The current stack in X is convoluted and a mess
The X server loads the matching driver module based on the hardware:
Section "InputClass" Identifier "evdev pointer catchall" MatchIsPointer "on" MatchDevicePath "/dev/input/event*" Driver "evdev" EndSection
but: hardware doesn't matter much anymore
The X server loads the matching driver module based on the hardware:
Functionality is distributed across the server and modules
Module decides which feature is available:
Feature evdev synaptics wacom
Tapping: no yes yes
MB emulation: yes yes no
Gestures: no no yes
Finger Scrolling: no yes some
Calibration: yes* no* yes*
* server provides some calibration on top
Combinatorial explosion of test cases
→ 10e101 test combinations for synaptics alone
... not counting HW differences
... but it's not like we can test it properly anyway (see XIT)
Testing is almost impossible without firing up an X server
Summary:
These are mostly technical issues
Fixing X is not reasonable
Drivers are too entangled with the server to stand on their own
We're looking at an almost rewrite here
Fixing X is not reasonable
Wayland makes everything better!
...maybe...
In Wayland, the compositor takes the role of the X server and the input modules
Every compositor re-implements evdev, synaptics, wacom, ...
Feature bingo: guess which feature doesn't work in $COMPOSITOR
Ideally: a single input stack for all Wayland compositors
→ libinput
Started by Jonas Ã…dahl by forking off Weston in 2013
Currently at 0.6, stable API VerySoonNowâ„¢
Weston's input subsystem modified to be a library
Almost feature-equivalent to the X.org stack
Target user: the compositor, not the actual user or the client
libinput is not "Wayland", it doesn't care about Wayland protocol.
Internals are largely hidden
Touchpad features (normal):
Touchpad features (exotic):
Acceleration function copied from X server, but confusing and convoluted.
Userstudy with 41 effective data sets, testing 3 methods.
Acceleration function copied from X server, but confusing and convoluted.
Userstudy with 41 effective data sets, testing 3 methods.
Slim advantage for the two new methods, one of them 3 LOC.
Per-device acceleration functions possible (if supported by data).
Configuration normalised to the [-1, 1] range
Tablet support is work-in-progress, see Lyude's talk
Very limited configuration API:
A useful test suite
Future plans (obvious):
Future plans (non-obvious):
Questions/Suggestions?