3,4 Finger swipes not detected

Hi, I have tried multiple time but I can’t seem to setup 3 finger swipes on my manjaro os(both Wayland and X11 sessions). 2 finger swipes work fine but somehow 3 and 4 finger swipes are not detected (I checked with libinput-gestures -r and libinput debug-events ). 3,4 finger swipes work fine on windows but they’re not detected here.

-event3   DEVICE_ADDED            Power Button                      seat0 default group1  cap:k
-event6   DEVICE_ADDED            Video Bus                         seat0 default group2  cap:k
-event1   DEVICE_ADDED            Power Button                      seat0 default group3  cap:k
-event0   DEVICE_ADDED            Lid Switch                        seat0 default group4  cap:S
-event2   DEVICE_ADDED            Sleep Button                      seat0 default group5  cap:k
-event10  DEVICE_ADDED            Laptop_Integrated_Webcam_1.3M:    seat0 default group6  cap:k
-event9   DEVICE_ADDED            Dell WMI hotkeys                  seat0 default group7  cap:k
-event4   DEVICE_ADDED            AT Translated Set 2 keyboard      seat0 default group8  cap:k
-event8   DEVICE_ADDED            AlpsPS/2 ALPS DualPoint TouchPad  seat0 default group9  cap:p  size 80x39mm tap(dl off) left scroll-nat scroll-2fg-edge dwt-on
-event7   DEVICE_ADDED            AlpsPS/2 ALPS DualPoint Stick     seat0 default group9  cap:p left scroll-nat scroll-button
-event8   POINTER_MOTION          +0.031s        -0.75/ -4.42 ( -2.00/-11.81)
 event8   POINTER_MOTION          +0.041s         0.00/ -2.34 ( +0.00/ -5.56)
 event8   POINTER_MOTION          +0.051s         0.84/ -2.63 ( +2.00/ -6.25)

I also tried fusuma, no luck.
Any idea how to get it working?

Prepare for war.

Manjaro Arch Linux

Just…no.

edited

1 Like

I have tried every tutorial I could find on the internet but I can’t seem to get 3,4 finger swipes to work on Manjaro kde. They work fine in windows but when I ran libinput debug-events 3,4 finger swipes are not detected. I have a dell Alps touchpad. Moreover fusuma and libinput-gestures didn’t work either.
Any idea how to get it working?

I might be wrong, but via libinput the 3 finger swipe works only under wayland and Gnome
https://wayland.freedesktop.org/libinput/doc/latest/gestures.html#

Have you tried GitHub - JoseExposito/touchegg: Linux multi-touch gesture recognizer ?

Yeah also tried touchegg, nothing happens. And libinput only detects two finger swipes.

I there something else I can replace libinput with?

No, is required by qt5-base
Reading trough some things, it seems you have to make sure there is no xf86-input-synaptics installed on your system.
More reading lead me to actual * theoretical confirmation* that your AlpsPS/2 ALPS DualPoint TouchPad should work with libinput-gestures and hence also with fusuma with 3 and 4 fingers gestures.

Even more reading, i think also the gebaar should work
https://wiki.archlinux.org/title/libinput#libinput-gestures

But i would look step by step and take note on what i do, if i was you. I do not have a laptop to check, but most of the documentation deals with each detail from what i see.
One thing i would make sure, since you dual boot with windows, is to disable that fast boot feature of windows as is hijacking devices, making them “faulty” in the linux session.

I have a feeling geebar might work but It’s not available in AUR, and when I try to install it through terminal (git) it gives a lot of error messages, CPP Program error messages.These errors appear when I run the command " make -j$(nproc)" …

Consolidate compiler generated dependencies of target gebaard
[ 16%] Building CXX object CMakeFiles/gebaard.dir/src/io/input.cpp.o
[ 33%] Building CXX object CMakeFiles/gebaard.dir/src/main.cpp.o
[ 50%] Building CXX object CMakeFiles/gebaard.dir/src/config/config.cpp.o
In file included from /home/user/Downloads/gebaar-libinput/src/main.cpp:21:
/home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp: In member function ‘void cxxopts::values::detail::SignedCheck<T, true>::operator()(bool, U, const string&)’:
/home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp:488:43: error: ‘numeric_limits’ is not a member of ‘std’
  488 |             if (u > static_cast<U>(-(std::numeric_limits<T>::min)()))
      |                                           ^~~~~~~~~~~~~~
/home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp:488:59: error: expected primary-expression before ‘>’ token
  488 |             if (u > static_cast<U>(-(std::numeric_limits<T>::min)()))
      |                                                           ^
/home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp:488:62: error: ‘::min’ has not been declared; did you mean ‘std::min’?
  488 |             if (u > static_cast<U>(-(std::numeric_limits<T>::min)()))
      |                                                              ^~~
      |                                                              std::min
In file included from /usr/include/c++/11.2.0/algorithm:62,
                 from /usr/include/c++/11.2.0/regex:38,
                 from /home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp:34,
                 from /home/user/Downloads/gebaar-libinput/src/main.cpp:21:
/usr/include/c++/11.2.0/bits/stl_algo.h:3455:5: note: ‘std::min’ declared here
 3455 |     min(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
In file included from /home/user/Downloads/gebaar-libinput/src/main.cpp:21:
/home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp:495:42: error: ‘numeric_limits’ is not a member of ‘std’
  495 |             if (u > static_cast<U>((std::numeric_limits<T>::max)()))
      |                                          ^~~~~~~~~~~~~~
/home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp:495:58: error: expected primary-expression before ‘>’ token
  495 |             if (u > static_cast<U>((std::numeric_limits<T>::max)()))
      |                                                          ^
/home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp:495:61: error: ‘::max’ has not been declared; did you mean ‘std::max’?
  495 |             if (u > static_cast<U>((std::numeric_limits<T>::max)()))
      |                                                             ^~~
      |                                                             std::max
In file included from /usr/include/c++/11.2.0/algorithm:62,
                 from /usr/include/c++/11.2.0/regex:38,
                 from /home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp:34,
                 from /home/user/Downloads/gebaar-libinput/src/main.cpp:21:
/usr/include/c++/11.2.0/bits/stl_algo.h:3467:5: note: ‘std::max’ declared here
 3467 |     max(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
In file included from /home/user/Downloads/gebaar-libinput/src/main.cpp:21:
/home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp: In function ‘void cxxopts::values::detail::check_signed_range(bool, U, const string&)’:
/home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp:515:29: error: ‘numeric_limits’ is not a member of ‘std’
  515 |         SignedCheck<T, std::numeric_limits<T>::is_signed>()(negative, value, text);
      |                             ^~~~~~~~~~~~~~
/home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp:515:45: error: template argument 2 is invalid
  515 |         SignedCheck<T, std::numeric_limits<T>::is_signed>()(negative, value, text);
      |                                             ^
/home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp:515:57: error: qualified-id in declaration before ‘>’ token
  515 |         SignedCheck<T, std::numeric_limits<T>::is_signed>()(negative, value, text);
      |                                                         ^
/home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp: In function ‘void cxxopts::values::integer_parser(const string&, T&)’:
/home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp:556:35: error: ‘numeric_limits’ is not a member of ‘std’
  556 |       constexpr auto umax = (std::numeric_limits<US>::max)();
      |                                   ^~~~~~~~~~~~~~
/home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp:556:52: error: expected primary-expression before ‘>’ token
  556 |       constexpr auto umax = (std::numeric_limits<US>::max)();
      |                                                    ^
/home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp:556:55: error: ‘::max’ has not been declared; did you mean ‘std::max’?
  556 |       constexpr auto umax = (std::numeric_limits<US>::max)();
      |                                                       ^~~
      |                                                       std::max
In file included from /usr/include/c++/11.2.0/algorithm:62,
                 from /usr/include/c++/11.2.0/regex:38,
                 from /home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp:34,
                 from /home/user/Downloads/gebaar-libinput/src/main.cpp:21:
/usr/include/c++/11.2.0/bits/stl_algo.h:3467:5: note: ‘std::max’ declared here
 3467 |     max(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
In file included from /home/user/Downloads/gebaar-libinput/src/main.cpp:21:
/home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp:557:39: error: ‘numeric_limits’ is not a member of ‘std’
  557 |       constexpr bool is_signed = std::numeric_limits<T>::is_signed;
      |                                       ^~~~~~~~~~~~~~
/home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp:557:55: error: expected primary-expression before ‘>’ token
  557 |       constexpr bool is_signed = std::numeric_limits<T>::is_signed;
      |                                                       ^
/home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp:557:58: error: ‘::is_signed’ has not been declared; did you mean ‘std::is_signed’?
  557 |       constexpr bool is_signed = std::numeric_limits<T>::is_signed;
      |                                                          ^~~~~~~~~
      |                                                          std::is_signed
In file included from /usr/include/c++/11.2.0/bits/move.h:57,
                 from /usr/include/c++/11.2.0/bits/nested_exception.h:40,
                 from /usr/include/c++/11.2.0/exception:148,
                 from /home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp:30,
                 from /home/user/Downloads/gebaar-libinput/src/main.cpp:21:
/usr/include/c++/11.2.0/type_traits:757:12: note: ‘std::is_signed’ declared here
  757 |     struct is_signed
      |            ^~~~~~~~~
In file included from /home/user/Downloads/gebaar-libinput/src/config/config.h:22,
                 from /home/user/Downloads/gebaar-libinput/src/main.cpp:22:
/home/user/Downloads/gebaar-libinput/libs/cpptoml/include/cpptoml.h: In static member function ‘static cpptoml::value_traits<T, typename std::enable_if<(((! cpptoml::valid_value_or_string_convertible<T>::value) && (! std::is_floating_point<typename std::decay<_Tp>::type>::value)) && std::is_signed<typename std::decay<_Tp>::type>::value)>::type>::value_type cpptoml::value_traits<T, typename std::enable_if<(((! cpptoml::valid_value_or_string_convertible<T>::value) && (! std::is_floating_point<typename std::decay<_Tp>::type>::value)) && std::is_signed<typename std::decay<_Tp>::type>::value)>::type>::construct(T&&)’:
/home/user/Downloads/gebaar-libinput/libs/cpptoml/include/cpptoml.h:344:25: error: ‘numeric_limits’ is not a member of ‘std’
  344 |         if (val < (std::numeric_limits<int64_t>::min)())
      |                         ^~~~~~~~~~~~~~
/home/user/Downloads/gebaar-libinput/libs/cpptoml/include/cpptoml.h:344:47: error: expected primary-expression before ‘>’ token
  344 |         if (val < (std::numeric_limits<int64_t>::min)())
      |                                               ^
/home/user/Downloads/gebaar-libinput/libs/cpptoml/include/cpptoml.h:344:50: error: ‘::min’ has not been declared; did you mean ‘std::min’?
  344 |         if (val < (std::numeric_limits<int64_t>::min)())
      |                                                  ^~~
      |                                                  std::min
In file included from /usr/include/c++/11.2.0/algorithm:62,
                 from /usr/include/c++/11.2.0/regex:38,
                 from /home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp:34,
                 from /home/user/Downloads/gebaar-libinput/src/main.cpp:21:
/usr/include/c++/11.2.0/bits/stl_algo.h:3455:5: note: ‘std::min’ declared here
 3455 |     min(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
In file included from /home/user/Downloads/gebaar-libinput/src/config/config.h:22,
                 from /home/user/Downloads/gebaar-libinput/src/main.cpp:22:
/home/user/Downloads/gebaar-libinput/libs/cpptoml/include/cpptoml.h:349:25: error: ‘numeric_limits’ is not a member of ‘std’
  349 |         if (val > (std::numeric_limits<int64_t>::max)())
      |                         ^~~~~~~~~~~~~~
/home/user/Downloads/gebaar-libinput/libs/cpptoml/include/cpptoml.h:349:47: error: expected primary-expression before ‘>’ token
  349 |         if (val > (std::numeric_limits<int64_t>::max)())
      |                                               ^
/home/user/Downloads/gebaar-libinput/libs/cpptoml/include/cpptoml.h:349:50: error: ‘::max’ has not been declared; did you mean ‘std::max’?
  349 |         if (val > (std::numeric_limits<int64_t>::max)())
      |                                                  ^~~
      |                                                  std::max
In file included from /usr/include/c++/11.2.0/algorithm:62,
                 from /usr/include/c++/11.2.0/regex:38,
                 from /home/user/Downloads/gebaar-libinput/libs/cxxopts/include/cxxopts.hpp:34,
                 from /home/user/Downloads/gebaar-libinput/src/main.cpp:21:
/usr/include/c++/11.2.0/bits/stl_algo.h:3467:5: note: ‘std::max’ declared here
 3467 |     max(initializer_list<_Tp> __l, _Compare __comp)

I posted half of it, It’s quite long

As per wiki description, the package you are looking for in AUR is gebaar-libinput-git
With
pamac build gebaar-libinput-git
you get those errors?

Not sure if compiling from source will be better

It seems the developer is keeping it in maintenance mode now.

I installed it through AUR and still no luck, I have lost hope now

I just had a very similar issue where I was stuck in X11 due to having an nvidia card, and the gnome-shell-extension-x11gestures extension that would normally take care of it wasn’t working.

After some googling, I found this post on an Arch forum and their solution happened to work. Apparently the touchegg daemon was not enabled to run in the background, so it needed to be enabled.

Instructions are at the bottom of the linked thread. Basically, you can launch the touchegg daemon manually to check whether that fixes it:

$ touchegg --daemon

And if that allows the extension to work (the terminal should say something about a connection), then you can configure it to run on startup with:

$ sudo systemctl enable touchegg.service
$ sudo systemctl start touchegg

I will confess, as a noob I have only the faintest inkling of how/why this works. And I have no idea if this will do anything for you, but your situation seemed most similar to mine out of all the forum posts I dug through. On the off chance anyone else has the same issue as me and also finds their way here, I hope this helps them.

1 Like