libinput
這是 Xorg 上的 Input Stack :
這是 Wayland 上的 Input Stack :
Xorg 上的 Input Stack 有以下問題
Features distributed across modules
No communication between modules
Impossible to test
Lots of user-exposed options
driver feature 比對
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* |
(* means server provides some calibration on top)
為了讓 Wayland 的 compositor 能有共通的 input stack 實作, 所以獨立出了 libinput 來解決問題, libinput 把很多內部的東西都處理掉 (藏起來), 有著以下特色 :
multiple backends, but not exposed to the users
struct udev* in, devices out
only the configuration options that make sense
everything else is handled based on the hardware
Touchpad features (normal):
proper multitouch support
top and bottom software button on clickpads
two-finger scrolling
1/2/3-finger tapping
clickfinger on Apple touchpads
palm detection
Touchpad features (exotic):
re-routing of T440 software buttons through trackstick
trackstick wheel emulation on T440
smart disabling of the touchpad
auto-scaling of the top software buttons
disable touchpad while using the trackstick
normalized pointer acceleration
A useful test suite
tests multiple devices automatically
uinput based
tests without a compositor
Future plans (non-obvious):
“buttonbox” interface/gamepads
raw/unaccelerated mouse input
device identification system
touchpad handwriting
touchpad gestures
近況
libinput 最近發展的漸漸成熟,在 2015-01-15 釋出了 0.8 版, Fedora 22 也要把 Xorg 底下的 input driver 換成使用 libinput (xf86-input-libinput), 目前 xf86-input-libinput 在 AUR 裡,不過相信未來應該會進 official repositories。
Users
在 Arch Linux 上,要把 Xorg 底下的 input driver 換成 libinput 的話,
先去 AUR 裝 xf86-input-libinput
,
接著就可以在 Xorg 的設定檔裡選擇 libinput
當 driver,
不過要注意的是,一些 Options 會不一樣,所以設定要調整過,
例如 :
原本
# xorg.conf.d/50-synaptics.conf
# Original
Section "InputClass"
Identifier "enable tapping"
MatchProduct "my touchpad"
Driver "synaptics"
Option "TapButton1" "1"
EndSection
後來
# xorg.conf.d/50-synaptics.conf
# libinput version
Section "InputClass"
Identifier "enable tapping"
MatchProduct "my touchpad"
Driver "synaptics"
Option "TapButton1" "1"
EndSection
這邊注意到,之前是把 driver assign 給 device,接著設定 options, 後來 libinput 的版本是 match 到一個 driver。