W Linuksie jak i w X.Org dodano jakiś czas temu taki sprytny sterownik evdev, który ma odpowiadać za każde urządzenie wejściowe (np. myszkę i klawiaturę). Generalnie dobry pomysł – hot plugging, wiele urządzeń na raz, brak konfiguracji – cud miód. No poza touchpadami, których evdev ewidentnie nienawidzi.
Już kiedyś walczyłem z evdevem – pozycjonowanie kursora ustawiał on na “absolutne”, czyli dotknięcie touchpada np. w prawym górnym rogu powodowało przeniesienie kursora do prawego górnego rogu. To była porażka – nie dało się tak pracować.
Teraz całe X.Org przeszły na automatyczne wykrywanie urządzeń wejściowych korzystając z HAL (i hald). Można wywalić całą konfigurację klawiatury czy myszki z xorg.conf i działa znakomicie. Poza touchpadem, który jest poprawnie wykrywany i przypisany mu zostaje sterownik evdev. Efekty? Touchpad zachowuje się jak szalony. Zwykłe przyłożenie do niego palca powoduje jego “skakanie”, a o precyzyjnym ruchu można zapomnieć. Pewnie jakaś horrendalnie duża mikro-czułość… czy co tam. Nie ważne… raczej istotne jest, żeby evdev nie brał się za obsługę Synaptics TouchPad, ale lepiej zostawić to statycznej konfiguracji w xorg.conf. O tak:
1. Edycja (utworzenie) pliku /etc/hal/fdi/policy/10-x11-input.fdi, a w nim:
<?xml version="1.0" encoding="utf-8"?>
<deviceinfo version="0.2">
<match key="info.capabilities" contains="input.touchpad">
<remove key="input.x11_driver"></remove>
</match>
</deviceinfo>
2. Restart xdm i hald, X-y biorą dla touchpada konfigurację z xorg.conf i tym samym on normalnieje.
P.S. Próba podmiany sterownika (merge key) na mouse nie powiodła się – X-y wariowały, ale na logikę, to powinno to być lepszym rozwiązaniem.
P.S. A i tak najlepszym rozwiązaniem jest użycie sterownika Synaptics (x11-drivers/xf86-input-synaptics), który nie tylko działa jak powinien, ale i oferuje dodatkowe funkcjonalności. Wyciąg z pliku /etc/hal/fdi/policy/10-x11-input.fdi:
<?xml version="1.0" encoding="utf-8"?>
<deviceinfo version="0.2">
<!-- Touchpad - opcje sterownika Synaptics -->
<match key="info.capabilities" contains="input.touchpad">
<!-- Maximum time (in milliseconds) for detecting a tap. -->
<merge key="input.x11_options.MaxTapTime"
type="string">100</merge>
<!-- Maximum time (in milliseconds) for detecting a double tap. -->
<merge key="input.x11_options.MaxDoubleTapTime"
type="string">150</merge>
<!-- Makes the driver react faster to a single tap, but also
makes double clicks caused by double tapping slower. -->
<merge key="input.x11_options.FastTaps" type="string">true</merge>
<!-- Which mouse button is reported on a non-corner one-finger tap. -->
<merge key="input.x11_options.TapButton1" type="string">1</merge>
<!-- hich mouse button is reported on a non-corner two-finger tap. -->
<merge key="input.x11_options.TapButton2" type="string">2</merge>
<!-- Which mouse button is reported on a non-corner three-finger tap. -->
<merge key="input.x11_options.TapButton3" type="string">3</merge>
<!-- Enable vertical scrolling when dragging along the right edge -->
<merge key="input.x11_options.VertEdgeScroll" type="string">true</merge>
<!-- Enable horizontal scrolling when dragging along the right edge -->
<merge key="input.x11_options.HorizEdgeScroll"
type="string">true</merge>
<!-- Enable vertical scrolling when dragging with two fingers anywhere
on the touchpad -->
<merge key="input.x11_options.VertTwoFingerScroll"
type="string">true</merge>
<!-- Enable horizontal scrolling when dragging with two fingers anywhere
on the touchpad -->
<merge key="input.x11_options.HorizTwoFingerScroll"
type="string">true</merge>
</match>
</deviceinfo>
kozik
