Bug 102263

Summary: libinput does not support touchpad scroll buttons
Product: Wayland Reporter: Steve Hill <steve-freedesktop.org>
Component: libinputAssignee: Wayland bug list <wayland-bugs>
Status: RESOLVED WONTFIX QA Contact:
Severity: normal    
Priority: medium CC: peter.hutterer
Version: unspecified   
Hardware: x86-64 (AMD64)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:

Description Steve Hill 2017-08-16 14:19:58 UTC
libinput 1.8.0

The Acer Travelmate 6410 has a 4-way button pad under the Synaptics touchpad.  The button pad is intended to be used like a mouse scroll wheel.  The button pad is completely inoperative under libinput + Wayland (it used to work fine with the Synaptics driver + Xorg).

evtest shows /dev/input/event5 generating BTN_0, BTN_1, BTN_2 and BTN_3 events for each of the directions.  However, "libinput debug-events" does not report these events, although it does correctly report BTN_LEFT and BTN_RIGHT for the two mouse buttons.  stracing libinput shows that it is reading the events from /dev/input/event5 but then discarding them.
Comment 1 Peter Hutterer 2017-08-17 20:13:21 UTC
Attach an evemu-describe for this device please, thanks.
Comment 2 Steve Hill 2017-08-18 08:27:23 UTC
[root@atlantis ~]# evemu-describe /dev/input/event5
# EVEMU 1.3
# Kernel: 4.12.5-300.fc26.x86_64
# DMI: dmi:bvnAcer:bvr3.04:bd06/26/07:svnAcer:pnTravelMate6410:pvrCSR-000F:rvnAcer:rnConiston:rvrNotApplicable:cvnAcer:ct1:cvrN/A:
# Input device name: "SynPS/2 Synaptics TouchPad"
# Input device ID: bus 0x11 vendor 0x02 product 0x07 version 0x92b1
# Size in mm: 70x33
# Supported events:
#   Event type 0 (EV_SYN)
#     Event code 0 (SYN_REPORT)
#     Event code 1 (SYN_CONFIG)
#     Event code 2 (SYN_MT_REPORT)
#     Event code 3 (SYN_DROPPED)
#     Event code 4 ((null))
#     Event code 5 ((null))
#     Event code 6 ((null))
#     Event code 7 ((null))
#     Event code 8 ((null))
#     Event code 9 ((null))
#     Event code 10 ((null))
#     Event code 11 ((null))
#     Event code 12 ((null))
#     Event code 13 ((null))
#     Event code 14 ((null))
#     Event code 15 (SYN_MAX)
#   Event type 1 (EV_KEY)
#     Event code 256 (BTN_0)
#     Event code 257 (BTN_1)
#     Event code 258 (BTN_2)
#     Event code 259 (BTN_3)
#     Event code 272 (BTN_LEFT)
#     Event code 273 (BTN_RIGHT)
#     Event code 325 (BTN_TOOL_FINGER)
#     Event code 330 (BTN_TOUCH)
#     Event code 333 (BTN_TOOL_DOUBLETAP)
#     Event code 334 (BTN_TOOL_TRIPLETAP)
#   Event type 3 (EV_ABS)
#     Event code 0 (ABS_X)
#       Value     3741
#       Min       1472
#       Max       5472
#       Fuzz         0
#       Flat         0
#       Resolution  57
#     Event code 1 (ABS_Y)
#       Value     3131
#       Min       1408
#       Max       4448
#       Fuzz         0
#       Flat         0
#       Resolution  91
#     Event code 24 (ABS_PRESSURE)
#       Value        0
#       Min          0
#       Max        255
#       Fuzz         0
#       Flat         0
#       Resolution   0
#     Event code 28 (ABS_TOOL_WIDTH)
#       Value        0
#       Min          0
#       Max         15
#       Fuzz         0
#       Flat         0
#       Resolution   0
# Properties:
#   Property  type 0 (INPUT_PROP_POINTER)
N: SynPS/2 Synaptics TouchPad
I: 0011 0002 0007 92b1
P: 01 00 00 00 00 00 00 00
B: 00 0b 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 0f 00 03 00 00 00 00 00
B: 01 20 64 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 02 00 00 00 00 00 00 00 00
B: 03 03 00 00 11 00 00 00 00
B: 04 00 00 00 00 00 00 00 00
B: 05 00 00 00 00 00 00 00 00
B: 11 00 00 00 00 00 00 00 00
B: 12 00 00 00 00 00 00 00 00
B: 14 00 00 00 00 00 00 00 00
B: 15 00 00 00 00 00 00 00 00
B: 15 00 00 00 00 00 00 00 00
A: 00 1472 5472 0 0 57
A: 01 1408 4448 0 0 91
A: 18 0 255 0 0 0
A: 1c 0 15 0 0 0
Comment 3 Peter Hutterer 2017-08-28 01:30:49 UTC
Just a heads-up: I'm not sure if/when I'll add support to this to libinput. It's a fairly unique feature on these devices but (afaict) they are all at least 10 years old. I expect very few of these to still be alive and adding support for the buttons - while easy for libinput itself - will have a trail of changes that then goes into the xf86-input-libinput driver, the compositors and possibly the toolkits. So a lot of work for some very few devices. I think it's better to stick with xf86-input-synaptics for this device, sorry.
Comment 4 Steve Hill 2017-08-29 08:21:10 UTC
Thanks for the reply.  Am I right in thinking that xf86-input-libinput can't be used with Wayland?
Comment 5 Peter Hutterer 2017-08-29 08:55:05 UTC
more the other way round, libinput is used by the wayland compositors,
xf86-input-synaptics is a driver only used by xorg.
Comment 6 Peter Hutterer 2017-09-06 05:58:46 UTC
Basic outline of what's needed here:
1) libinput needs to add a scroll source 'button'
2) libinput needs to hook into the button events to send scroll events for those buttons
3) the xf86-input-libinput driver needs to redirect the scroll button events into the right axis (or create a new one here, not 100% sure how to best handle this without more research)
4) the wayland protocol needs to add a new scroll source
5) all compositors need to be updated to add the new scroll source

As said above, the libinput bits 1 and 2 are the easiest. 3 needs more research. 4 and 5 is mostly just code churn and inertia because we need to release libinput, then wayland with the new changes.

I'm not aware of any common modern devices that use dedicated buttons to scroll, otherwise this churn would be worth it. As it is, it'll likely take a year or so to get this into the mainstream distributions and I'm not sure your laptop has that much life left :)

So I'm sorry again, but I'll be marking this as WONTFIX. Keeping it open when it's unlikely to ever be fixed doesn't help anywone either.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.