X.Org input - jak machać, żeby się nie namachać
kozik Troszkę mnie irytowało zachowanie serwera X.Org na laptopie w sytuacji jego uruchomienia z podpiętą już myszką USB. Poprzez powiązanie urządzeń wskazujących wprost z urządzeniami /dev konfiguracja była bardzo nieelastyczna i wymuszała wpięcie myszy USB dopiero po wykryciu touchpada. Ale przy okazji upgrade’u do X.Org 7.2 trafiłem na evdev…
evdev to, jak mówi manual, generic Linux input driver. Może obsłużyć zarówno klawiaturę jak i urządzenia wskazujące. Sprawdziłem wersję 1.1.5 (1.1.2 nie chciała się skompilować). Ma mnóstwo bugów i ogólnie mówiąc, nie działa poprawnie:
- część klawiszy w klawiaturze jest podmapowana pod zupełnie inne (wracam do starego sterownika kbd);
- touchpad standardowo jest w trybie “absolute”, czyli przypisany zostaje sztywno do ekranu (dotknięcie go w lewym górnym rogu powoduje automatyczne ustawienie kursora w tym miejscu - inaczej niż na urządzeniach typu myszka);
- po przestawieniu touchpada w tryb “relative” (czyli ruchy jak w zwykłej myszy) jest bardzo niedokładny;
Ale ma jedną zasadniczą zaletę. W konfiguracji xorg.conf można dokładnie precyzować jakie urządzenia chcemy uwzględnić w danej sekcji InputDevice. Przykładowo myszkę opisują opcje:
Driver "evdev"
Option "evBits" "+1-2" # EV_KEY i EV_REL
Option "keyBits" "~272-287"
Option "relBits" "~0-2 ~6 ~8" # (REL_X lub REL_Y lub REL_Z) i REL_HWHEEL i REL_WHEEL
Option "Pass" "3"
Touchpad nigdy nie “wpadnie” w tę klasyfikację, ponieważ ma on (EV = EV_SYN+EV_KEY+EV_ABS) oraz brakuje mu bitów REL zamiast których posiada ABS.
Co mi to daje? Dla touchpada ustawionego jako CorePointer mogę użyć starego drivera mouse z urządzeniem /dev/input/mice, a dla myszy USB (SendCoreEvents) - sterownik evdev, pod który nigdy touchpad nie wpadnie. Dodatkowo mogę zduplikować sekcję InputDevice dla myszki i podpinać dowolną ilość gryzoni - nie będą się żarły i nie zabiorą touchpadowi wymaganego CorePointer! W teorii powinno być już idealnie…
P.S. Jeśli ktoś by chciał użyć evdev dla touchpada, to najprościej ustawić Name na odpowiednią nazwę urządzenia z /proc/bus/input/devices. U mnie “SynPS/2 Synaptics TouchPad“. Natomiast rozpoznawanie po bitach wyglądać może tak:
Driver "evdev"
Option "evBits" "+1 +3"
Option "keyBits" "~272-287"
Option "absBits" "~0-2"
Option "Pass" "3"
Wysłano w Blog - Linux i Unix | Tags: linux, open-source |

kwiecień 21st, 2007 at 22:52
Bardzo fajna ciekawostka. Zastanawiam się jak to będzie pracowało na trackpoincie, cóż nie pozostało mi nic innego jak przetestować to na laptopie ;).
kwiecień 22nd, 2007 at 20:55
Fajne. Bo mi coś na Sabayonie nie chciał na początku Touch działać xD