bulletmark / libinput-gestures

Actions gestures on your touchpad using libinput
3.93k stars 241 forks source link

USBest Technology SiS HID Touch Controller not triggering gestures #345

Closed onkobu closed 1 year ago

onkobu commented 1 year ago

Before creating a new issue, please follow each step in the TROUBLESHOOTING section of the main README.

libinput-gestures: session xfce+x11 on Linux-5.15.59-gentoo-sec2-x86_64-AMD_A8-4500M_APU_with_Radeon-tm-_HD_Graphics-with-glibc2.36, python 3.10.9, libinput 1.21.0
Hash: 1cfe6ad528f2202a483fea24b3cd7f47
Gestures configured in ~/.config/libinput-gestures.conf:
swipe up           _internal ws_up
swipe down         _internal ws_down
swipe left       3 xdotool key ctrl+alt+Right
swipe right      3 xdotool key ctrl+alt+Left
pinch in           xdotool key super+s
pinch out          xdotool key super+s
device USBest Technology SiS HID Touch Controller
libinput-gestures: device /dev/input/by-path/pci-0000:00:10.0-usb-0:1.3:1.0-event(event7): USBest Technology SiS HID Touch Controller
libinput-gestures is installed.
libinput-gestures is set up as a desktop application.
libinput-gestures is currently running as a desktop application.
libinput-gestures is set to autostart as a desktop application.
libinput-gestures is using custom configuration file.

(Updated currently running, was doing a lot of -d/ -r/ start/ stop/ restart)

Describe the issue The commands wmctrl and xdotool work as expected, for example switching workspaces with both works fine. Using libinput-gestures with -r also shows events coming in, e.g.:

event7   TOUCH_FRAME             +0.000s    
event7   TOUCH_DOWN              +0.000s    0 (0) 16.06/66.11 (82.25/193.43mm)
event7   TOUCH_DOWN              +0.000s    1 (1) 21.53/65.75 (110.25/192.36mm)
event7   TOUCH_DOWN              +0.000s    2 (2) 12.30/70.00 (63.00/204.79mm)
event7   TOUCH_FRAME             +0.000s    

event7   TOUCH_FRAME             +46.912s
event7   TOUCH_MOTION            +46.918s   0 (0) 36.45/33.15 (186.62/97.00mm)
event7   TOUCH_MOTION            +46.918s   1 (1) 43.58/37.01 (223.12/108.29mm)
event7   TOUCH_MOTION            +46.918s   2 (2) 30.91/33.81 (158.25/98.93mm)
event7   TOUCH_MOTION            +46.918s   3 (3) 26.64/37.82 (136.38/110.64mm)
event7   TOUCH_FRAME             +46.918s
…
event7   TOUCH_FRAME             +34.648s   
event7   TOUCH_UP                +34.665s   0 (0)
event7   TOUCH_UP                +34.665s   2 (2)
event7   TOUCH_FRAME             +34.665s   
event7   TOUCH_UP                +34.676s   1 (1)
event7   TOUCH_FRAME             +34.676s   

With only 3 fingers the line with 3 is missing. Depending on the precision TOUCH_FRAMEs come in any shape, for example finger 0+2, 1+2+3 and so on.

A synaptics touchpad is recognized correctly in the same session. The touch monitor is not. Window manager is XFCE4. I also experimented with finger count, e.g.

# also in various combinations to trigger different events also through _internal and wmctrl directly
gesture swipe left 3 xdotool key ctrl+alt+Right
gesture swipe left 4 xdotool key ctrl+alt+Right

Not a single gesture is recognized thus libinput-gesture -d stays up and running but never emits a gesture with this controller.

onkobu commented 1 year ago

Forgot to mention that it is an X11 with all configuration in /etc/X11/xorg.conf.d disabled.

$ xinput list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ USBest Technology SiS HID Touch Controller    id=11   [slave  pointer  (2)]
⎜   ↳ Logitech USB Optical Mouse                id=12   [slave  pointer  (2)]
⎜   ↳ ETPS/2 Elantech Touchpad                  id=17   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ UVC Camera (046d:0825)                    id=9    [slave  keyboard (3)]
    ↳ HID 046a:0011                             id=10   [slave  keyboard (3)]
    ↳ Lenovo EasyCamera: Lenovo EasyC           id=14   [slave  keyboard (3)]
    ↳ Ideapad extra buttons                     id=15   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=16   [slave  keyboard (3)]
    ↳ Yubico Yubikey 4 OTP+U2F+CCID             id=13   [slave  keyboard (3)]
$> lsusb
…
Bus 001 Device 006: ID 0457:1057 Silicon Integrated Systems Corp. SiS HID Touch Controller
…
onkobu commented 1 year ago
$> xinput --list --long
…
   ↳ USBest Technology SiS HID Touch Controller id=11   [slave  pointer  (2)]
    Reporting 6 classes:
        Class originated from: 11. Type: XIButtonClass
        Buttons supported: 7
        Button labels: "Button Left" "Button Middle" "Button Right" "Button Wheel Up" "Button Wheel Down" "Button Horiz Wheel Left" "Button Horiz Wheel Right"
        Button state:
        Class originated from: 11. Type: XIValuatorClass
        Detail for Valuator 0:
          Label: Abs MT Position X
          Range: 0.000000 - 65535.000000
          Resolution: 0 units/m
          Mode: absolute
          Current value: 25166.456427
        Class originated from: 11. Type: XIValuatorClass
        Detail for Valuator 1:
          Label: Abs MT Position Y
          Range: 0.000000 - 65535.000000
          Resolution: 0 units/m
          Mode: absolute
          Current value: 29215.554199
        Class originated from: 11. Type: XIValuatorClass
        Detail for Valuator 2:
          Label: Rel Horiz Scroll
          Range: -1.000000 - -1.000000
          Resolution: 0 units/m
          Mode: relative
        Class originated from: 11. Type: XIValuatorClass
        Detail for Valuator 3:
          Label: Rel Vert Scroll
          Range: -1.000000 - -1.000000
          Resolution: 0 units/m
          Mode: relative
        Class originated from: 11. Type: XITouchClass
        Touch mode: direct
        Max number of touches: 10
…
bulletmark commented 1 year ago

Did you see step 6 in the TROUBLESHOOTING section? If you run libinput-gestures -r then, as it says:

"If you do not see any GESTURE_* events then unfortunately your touchpad and/or libinput does not report multi-finger gestures so libinput-gestures can not work. The discrimination of gestures is done completely within libinput, before they get passed to libinput-gestures."

Your sample output shows no GESTURE events so I presume you do not get them.

Run libinput debug-events if you don't trust libinput-gestures -r output and confirm to yourself that libinput is not reporting gestures. Sorry, but there is nothing this utility can do about that.

onkobu commented 1 year ago

I read the docs/ troubleshooting as if TOUCH-events will be turned into GESTURE-events based on coordinates/ algorithm/ magic. So the changes must go into libinput itself so that either TOUCH* is to be replaced with GESTURE-something or in addition to TOUCH* also GESTURE-events appear?

a7n007 commented 1 year ago

Unsubscribe

On Tue, Feb 21, 2023, 9:18 AM Onkobu Tanaake @.***> wrote:

I read the docs/ troubleshooting as if TOUCH-events will be turned into GESTURE-events based on coordinates/ algorithm/ magic. So the changes must go into libinput itself so that either TOUCH* is to be replaced with GESTURE-something or in addition to TOUCH* also GESTURE-events appear?

— Reply to this email directly, view it on GitHub https://github.com/bulletmark/libinput-gestures/issues/345#issuecomment-1438753452, or unsubscribe https://github.com/notifications/unsubscribe-auth/AHAI5QHR7JZG5S3QMTEZLUTWYTTEHANCNFSM6AAAAAAUJWGC4U . You are receiving this because you are subscribed to this thread.Message ID: @.***>

bulletmark commented 1 year ago

I think the device you are referring to here controls a touchscreen, not a touchpad. Note that libinput does not process gestures for touchscreens, only touchpads so this utility is not relevant to you. Please confirm.

onkobu commented 1 year ago

It is a touchscreen, wasn't aware of the small but important differences. Yet I don't understand why a touchpad controlling the same 2D plane has such context information or why it gets along without it. For me as end user a touchpad or drawing surface (like the Bamboo-things) or a touch screen resemble the same 2D interaction canvas.

So it is up to the event receiver, e.g. Gtk, Qt or such to interprete events accordingly. That is why it barely works in browsers but not for X in general. And libinput would be too early in the event processing chain!?

I'm basically keen on events like swipe (on the desktop/ X root window) to change virtual workspaces offered by the window manager. Pinching with each finger in a different window is an edge case I don't care about. I'd be absolutely fine with events being ignored as soon as they're in the scope of an application window. But that'd be up to the window manager and its root window interaction capabilities!?

bulletmark commented 1 year ago

Sorry, I've never bothered to think about why there is any technical difference other than what it says in that link I provided to you. As you can see though it is very clear, libinput does not process gesture for a touchscreen so this issue/discussion is not relevant here and I am closing this issue.