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