Zarządzanie Touchpad-em z poziomu terminala (xinput)
touchpad a okienkowe konfiguratory w linuksie
Bardziej złożone (czyt. niezaliczające się do lekkich) środowiska graficzne mają najczęściej swoje własne konfiguratory do urządzeń wskazujących takich jak touchpad: Mate, Cinnamon, Gnome czy KDE, w LXDE nie ma nic takiego i nie byłoby to dużym problemem gdyby zawsze dobrze działał dodatkowy pakiet który możemy zainstalować kierując się nazwą gpointing-device-settings, niestety w moim przypadku (Lubuntu/Ubuntu 15.10 z LXDE) nie wszystkie ustawienia w gpointing-device-setting da się zastosować oraz system nie zapamiętuje tego po zakończeniu sesji.
mamy kilka dostępnych narzędzi z poziomu terminala:
synaptics
synclient
syndaemon
xinput
xinput
xinput to niewielki program który potrafi zarządzać myszką, touchpadem i klawiaturą
admin@PU551:~$ xinput
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ A4Tech USB Mouse id=9 [slave pointer (2)]
⎜ ↳ ETPS/2 Elantech Touchpad id=13 [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)]
↳ Sleep Button id=8 [slave keyboard (3)]
↳ USB2.0 HD UVC WebCam id=10 [slave keyboard (3)]
↳ Asus WMI hotkeys id=11 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=12 [slave keyboard (3)]
tutaj system pokazuje nam wszystkie wirtualne urządzenia wskazujące, jakie widzi w laptopie Asus PU551 z serii ASUSPRO,
możemy zobaczyć ustawienia dowolnego z urządzeń posługująć się jego pełną nazwą lub jego ID.
admin@PU551:~$ xinput list-props 13
Device 'ETPS/2 Elantech Touchpad':
Device Enabled (139): 1
Coordinate Transformation Matrix (141): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
Device Accel Profile (270): 1
Device Accel Constant Deceleration (271): 2.500000
Device Accel Adaptive Deceleration (272): 1.000000
Device Accel Velocity Scaling (273): 12.500000
Synaptics Edges (296): 130, 3126, 87, 1541
Synaptics Finger (297): 1, 1, 0
Synaptics Tap Time (298): 180
Synaptics Tap Move (299): 160
Synaptics Tap Durations (300): 180, 100, 100
Synaptics ClickPad (301): 0
Synaptics Middle Button Timeout (302): 75
Synaptics Two-Finger Pressure (303): 282
Synaptics Two-Finger Width (304): 7
Synaptics Scrolling Distance (305): 72, 72
Synaptics Edge Scrolling (306): 1, 0, 0
Synaptics Two-Finger Scrolling (307): 1, 0
Synaptics Move Speed (308): 1.000000, 1.750000, 0.054945, 0.000000
Synaptics Off (309): 2
Synaptics Locked Drags (310): 0
Synaptics Locked Drags Timeout (311): 5000
Synaptics Tap Action (312): 2, 3, 0, 0, 1, 3, 0
Synaptics Click Action (313): 1, 1, 0
Synaptics Circular Scrolling (314): 0
Synaptics Circular Scrolling Distance (315): 0.100000
Synaptics Circular Scrolling Trigger (316): 0
Synaptics Circular Pad (317): 0
Synaptics Palm Detection (318): 0
Synaptics Palm Dimensions (319): 10, 200
Synaptics Coasting Speed (320): 20.000000, 50.000000
Synaptics Pressure Motion (321): 30, 160
Synaptics Pressure Motion Factor (322): 1.000000, 1.000000
Synaptics Resolution Detect (323): 1
Synaptics Grab Event Device (324): 0
Synaptics Gestures (325): 1
Synaptics Capabilities (326): 1, 0, 1, 1, 1, 1, 1
Synaptics Pad Resolution (327): 33, 33
Synaptics Area (328): 0, 0, 0, 0
Synaptics Noise Cancellation (329): 18, 18
Device Product ID (259): 2, 14
Device Node (260): "/dev/input/event6"
przykładowe użycia
xinput set-prop 13 318 1
xinput set-prop "ETPS/2 Elantech Touchpad" "Device Accel Constant Deceleration" 1.5
xinput disable "ETPS/2 Elantech Touchpad"
pierwsze polecenie włącza wykrywanie dłoni (palm detection),
drugie zwiększa szybkość kursora Touchpad-a,
trzecie polecenie wyłącza urządzenie.
trzeba zauważyć że numery ID zmieniają sie za każdnym odnowieniem sesji, nie można więc stworzyć jednego polecenia z numerami ID które będziemy wywoływać jakimś skrótem klawiszowym czy skryptem, trzeba posłużyć się wtedy pełną nazwą urządzenia i parametru.
xinput ma dużo innych ciekawych funkcji, np dzięki funkcji xinput test można sprawdzić co robi urządzenie, a dzięki funkcji xinput watch-props możemy sprawdzić które ustawienia są właśnie zmieniane (np. przy użyciu innego graficznego konfiguratora)
admin@PU551:~$ xinput -h
usage :
xinput get-feedbacks <device name>
xinput set-ptr-feedback <device name> <threshold> <num> <denom>
xinput set-integer-feedback <device name> <feedback id> <value>
xinput get-button-map <device name>
xinput set-button-map <device name> <map button 1> [<map button 2> [...]]
xinput set-pointer <device name> [<x index> <y index>]
xinput set-mode <device name> ABSOLUTE|RELATIVE
xinput list [--short || --long || --name-only || --id-only] [<device name>...]
xinput query-state <device name>
xinput test [-proximity] <device name>
xinput create-master <id> [<sendCore (dflt:1)>] [<enable (dflt:1)>]
xinput remove-master <id> [Floating|AttachToMaster (dflt:Floating)] [<returnPointer>] [<returnKeyboard>]
xinput reattach <id> <master>
xinput float <id>
xinput set-cp <window> <device>
xinput test-xi2 [--root] <device>
xinput map-to-output <device> <output name>
xinput list-props <device> [<device> ...]
xinput set-int-prop <device> <property> <format (8, 16, 32)> <val> [<val> ...]
xinput set-float-prop <device> <property> <val> [<val> ...]
xinput set-atom-prop <device> <property> <val> [<val> ...]
xinput watch-props <device>
xinput delete-prop <device> <property>
xinput set-prop <device> [--type=atom|float|int] [--format=8|16|32] <property> <val> [<val> ...]
xinput disable <device>
xinput enable <device>
omówmy teraz możliwości (Capabilities) oraz akcje (Tap Action) naszego Touchpada:
xinput list-props "ETPS/2 Elantech Touchpad" | grep Capabilities
Synaptics Capabilities (326): 1, 0, 1, 1, 1, 1, 1
od lewej do prawej mamy kolejno:
(1) Touchpad ma fizyczny lewy przycisk,
(0) Touchpad nie ma fizycznego środkowego przycisku,
(1) Touchpad ma fizyczny prawy przycisk
(1) obsługuje 2-palcowe gesty
(1) obsługuje 3-palcowe gesty
(1) można regulować jego pionową rozdzielczość
(1) można regulować jego poziomą rozdzielczość
admin@PU551:~$ xinput list-props "ETPS/2 Elantech Touchpad" | grep "Tap Action"
Synaptics Tap Action (312): 2, 3, 0, 0, 1, 3, 0
akcje i podpięte do nich zdarzenia od lewej do prawej:
(2) dotyk w prawy górny róg, ( TODO, sprawdzić co to znaczy event 2)
(3) dotyk w prawy dolny róg, (też ma podpięte jakieś zdarzenie)
(0) dotyk w lewy górny róg, bez akcji
(0) dotyk w lewy dolny róg, bez akcji
(1) dotyk jednym palcem, zwraca naciśnięcie lewego klawisza myszki
(3) dotyk 2-palcami, zwraca naciśnięcie prawego klawisza myszki
(0) dotyk 3-palcami, bez akcji
xinput set-prop “ETPS/2 Elantech Touchpad” “Device Accel Constant Deceleration” 2
FAQ
jak wyłączyć opóźnianie kursora touchpada nie tracąc prędkości przesuwania?
rozwiązanie jest następujące:
- zredukować “Device Accel Constant Deceleration” z domyślnego (np. 2.5), możliwie blisko 1 (1 oznacza całkowity brak opóźnienia i spowolnienia), dla uzyskania wyższej precyzji można zostawić jakiś ułamek np. 1.2
- zwiększyć wartość “Device Accel Velocity Scaling” z domyślnego (np. 12.5) na 20
gotowa recepta, oczywiście w miejce nazwy urządzenia należy wkleić swoją:
xinput set-prop "ETPS/2 Elantech Touchpad" "Device Accel Constant Deceleration" 1
xinput set-prop "ETPS/2 Elantech Touchpad" "Device Accel Velocity Scaling" 20
jak wyłączyć kliknięcie na touchpadzie?
xinput set-prop “ETPS/2 Elantech Touchpad” “Synaptics Tap Time” 0
jak wyłączyć przypadkowe dotknięcie touchpada w trakcie pisania na klawiaturze?
wspomniane wykrywanie dłoni (Palm Detection) niestety nie wystarczy, potrzebne jest użycie syndaemon o którym napiszę dokładnie w kolejnym artykule
źródła:
https://wiki.archlinux.org/index.php/Touchpad_Synaptics
Komentarze