Synaptics Touchpad - Konfiguracja

Server Layout

Sekcja ta musi zawierać

InputDevice    "Synaptics" "CorePointer"

a od wersji xorg 1:7.3 koniecznie
InputDevice    "Synaptics" "SendCoreEvents"

" Synaptics " jest identyfikatorem sekcji dla urządzenia, które będziemy konfigurować. Można zmieniać jego wartość dowolnie. Należy jednak pamiętać, aby była taka sama jak nazwa sekcji touchpada.

Konfiguracja

Określenie posiadanej wersji

Ponieważ istnieją dwie wersje touchpadów Synaptics (normalny i ALPS) przed rozpoczęciem konfiguracji należy rozpoznać posiadaną wersję. W tym celu należy wykonać polecenie

cat /proc/bus/input/devices | grep PS/2

Jeśli otrzymamy wynik
N: Name="SynPS/2 Synaptics TouchPad"

to posiadamy zwykłą wersję touchpada, a jeśli otrzymamy
N: Name="AlpsPS/2 ALPS GlidePoint"

należy zastosować się do konfiguracji dla wersji ALPS.

Opis opcji sterownika synaptics wraz z przykładowymi wartościami

Protocol    "auto-dev"                                          # 'auto-dev' - automatyczna
                                                                # 'event' - kernel events,
                                                                # 'psaux' - raw
                                                                # 'psm' - sterownik psm FreeBSD
                                                                #
Option      "SHMConfig"                 "true"                  # konfiguracja touchpada w trakcie sesji X
Option      "LeftEdge"                  "0"                     # współrzędne lewej krawędzi tabliczki
Option      "RightEdge"                 "5000"                  # współrzędne prawej krawędzi tabliczki
Option      "TopEdge"                   "2000"                  # współrzędne górnej krawędzi tabliczki
Option      "BottomEdge"                "4000"                  # współrzędne dolnej krawędzi tabliczki
                                                                #
                                                                # pomocne przy ustalaniu krawędzi tabliczki może okazać się polecenie
                                                                #       $ synclient -m 1
                                                                #
Option      "FingerLow"                 "30"                    # gdy siła nacisku spadnie poniżej tej wartości, sterownik liczy ją jako 'puszczenie'
Option      "FingerHigh"                "30"                    # gdy siła nacisku przekroczy tą wartość, sterownik liczy ją jako dotyk
Option      "FingerPress"               "50"                    # gdy siła nacisku przekroczy tą wartość, sterownik liczy ją jako 'naciśnięcie' (kliknięcie?)
Option      "MaxTapTime"                "130"                   # maksymalny czas na wykrycie dotknięcia w milisekundach (1s=1000ms)
Option      "MaxTapMove"                "220"                   # maksymalne przemieszczenie do wykrycia dotknięcia w milisekundach (1s=1000ms)
Option      "MaxDoubleTapTime"          "300"                   # maksymalny czas na wykrycie podwójnego dotknięcia w milisekundach (1s=1000ms)
Option      "ClickTime"                 "100"                   # czas trwania kliknięcia wygenerowanego dotknięciem
Option      "FastTaps"                  "false"                 # 'szybkie dotkniecia' sprawiaja, że sterownik reaguje szybciej na pojedyńcze dotnięcie, ale za to wolniej na podwójne
Option      "VertEdgeScroll"            "true"                  # włącz 'rolkę' pionową
Option      "HorizEdgeScroll"           "false"                 # włącz 'rolkę' poziomą
Option      "VertTwoFingerScroll"       "false"                 # włącz 'rolkę' pionową, gdy touchpada dotykają dwa palce
Option      "HorizTwoFingerScroll"      "false"                 # włącz 'rolkę' poziomą, gdy touchpada dotykają dwa palce
Option      "VertScrollDelta"           "100"                   # wartość przesunięcia palca aktywujące 'rolkę' pionową
Option      "HorizScrollDelta"          "100"                   # wartość przesunięcia palca aktywujące 'rolkę' poziomą
Option      "EdgeMotionMinZ"            "30"
Option      "EdgeMotionMaxZ"            "160"
Option      "EdgeMotionMinSpeed"        "1"
Option      "EdgeMotionMaxSpeed"        "304"
Option      "EdgeMotionUseAlways"       "false"
Option      "Repeater"                  "/dev/input/mice"       # urządzenie przekaźnikowe
Option      "MinSpeed"                  "0.06"                  # minimalny współczynnik prędkości
Option      "MaxSpeed"                  "0.15"                  # maksymalny współczynnik prędkości
Option      "AccelFactor"               "0.009"                 # współczynnik przyspieszenia
Option      "TrackstickSpeed"           "40"
Option      "PressureMotionMinZ"        "30"                    # minimalny nacisk, przy którym współczynnik ruchu jest stosowany
Option      "PressureMotionMaxZ"        "160"                   # maksymalny nacisk, przy którym współczynnik ruchu jest stosowany
Option      "PressureMotionMinFactor"   "1"                     # najniższe ustawienie nacisku współczynnika ruchu
Option      "PressureMotionMaxFactor"   "1"                     # najwyższe ustawienie nacisku współczynnika ruchu
Option      "UpDownScrolling"           "true"                  # jeśli włączone przyciski 4 i 5 zachowują się jak 'rolka' pionowa; jeśli wyłączone
                                                                # ruch 'do przodu' powoduje podwójne kliknięcie, a ruch do tyłu wywołuje menu kontekstowe
Option      "LeftRightScrolling"        "true"                  # jeśli włączone przyciski 6 i 7 zachowują się jak 'rolka' pozioma; jeśli wyłączone jakikolwiek ruch wywołuje menu kontekstowe
Option      "UpDownRepeat"              "false"                 # jeśli przyciski 4 i 5 zachowują się jak 'rolka' pionowa, to będą automatycznie powtarzac tę czynność
Option      "LeftRightRepeat"           "false"                 # jeśli przyciski 6 i 7 zachowują się jak 'rolka' pozioma, to będą automatycznie powtarzac tę czynność
Option      "ScrollButtonRepeat"        "100"                   # czas pomiędzy kolejnymi powtórzeniami 'przewijania rolki' w milisekundach (1s=1000ms)
Option      "EmulateMidButtonTime"      "75"                    # maksymalny czas emulacji środkowego przycisku myszki w milisekundach (1s=1000ms)
Option      "EmulateTwoFingerMinZ"      "500"                   # (tylko Alps) minimalny nacisk powodujący emulację dotyku dwóch palców
Option      "TouchpadOff"               "false"                 # wyłącz touchpad
Option      "GuestMouseOff"             "false"
Option      "LockedDrags                "false"                 # jeśli wyłączone 'chwytanie' kończy się w momencie 'puszczenia' touchpada; jęsli włączone 'chwycenie' trwa do kolejnego 'kliknięcia'
Option      "LockedDragTimeout"         "5000"                  # czas trwania LockedDrag w milisekundach (1s=1000ms)
Option      "RTCornerButton"            "2"                     # numer przycisku znajdującego się w prawym górnym rogu tabliczki; 0 wyłącza tę opcję
Option      "RBCornerButton"            "3"                     # numer przycisku znajdującego się w prawym dolnym rogu tabliczki; 0 wyłącza tę opcję
Option      "LTCornerButton"            "0"                     # numer przycisku znajdującego się w lewym górnym rogu tabliczki; 0 wyłącza tę opcję
Option      "LBCornerButton"            "0"                     # numer przycisku znajdującego się w lewym dolnym rogu tabliczki; 0 wyłącza tę opcję
Option      "TapButton1"                "1"
Option      "TapButton2"                "2"
Option      "TapButton3"                "3"
Option      "CircularScrolling"         "false"                 # przewijanie kołowe / 'rolka kołowa'
Option      "CircScrollDelta"           "0.1"                   # kąt przesunięcia do wygenerowania ruchu 'rolki' w radianach
Option      "CircScrollTrigger"         "8"                     # 'starter rolki kołowej'
                                                                #
                                                                #   +---+-------------+---+
                                                                #   | 8 |      1      | 2 |
                                                                #   +-----+-----------+---+    0 - cała tabliczka
                                                                #   |   |             |   |
                                                                #   | 7 |             | 3 |
                                                                #   |   |             |   |
                                                                #   +---+-------------+---+
                                                                #   | 6 |      5      | 4 |
                                                                #   +---+-------------+---+
                                                                #
Option      "CircularPad"               "false"
Option      "PalmDetect"                "false"
Option      "PalmMinWidth"              "10"                    # minimalna szerokość palca, przy której dotknięcie uznawane jest za piórko
Option      "PalmMinZ"                  "200"                   # minimalny nacisk palca, przy ktorym dotknięcie uznawane jest za piórko
Option      "CoastingSpeed"             "0"
Option      "SingleTapTimeout"          "180"                   # czas po jakim dotknięcie jest rozpoznawane jako pojedyńcze dotknięcie
Option      "GrabEventDevice"           "false"

—-

Przykładowa konfiguracja
Przykładowa konfiguracja ALPS


Dziwnie zachowujący się Touchpad

Dość często się zdarza, iż touchpad się przycina, kursor skacze po całym ekranie lub tez touchpad całkowićie gubi swoją konfigurację. Dzieje się tak dlatego, że produkt Synaptics nie jest zgodny ze standardem i przesyła więcej pakietów danych niż robi to mysz zgodna ze standardem. By sprawdzić, czy to może być przyczyną, wystarczy wpisać w konsolę polecenie

dmesg | tail

Powinniśmy zaobserwować coś takiego:
psmouse.c: TouchPad at isa0060/serio2/input0 lost sync at byte 1
psmouse.c: TouchPad at isa0060/serio2/input0 lost sync at byte 1
psmouse.c: issuing reconnect request

Jak widać, system gubi synchronizację z urządzeniem i stara się ją odnowić. Bywa, że urządzenie zostanie przełączone na inny event, co skutkuje zgubieniem konfiguracji i zachowywaniem się jak zwykła mysz PS/2 (o ile jest dla niej wpis w xorg.conf). By temu zapobiec, wystarczy przypisać odpowiedni eventX zamiast mouseX, mice lub utworzyć regułę dla udev.

Metoda eventX

W pliku " /etc/X11/xorg.conf " zmienić linijkę

Option        "Device"        "/dev/input/mouse0"

na następującą
Option        "Device"        "/dev/input/eventX"

Wartość jaką należy wstawić w miejsce X odnajdziemy wpisując w konsoli polecenie " cat /proc/bus/input/devices "
I: Bus=0011 Vendor=0002 Product=0007 Version=00b1
N: Name="SynPS/2 Synaptics TouchPad"
P: Phys=isa0060/serio2/input0
S: Sysfs=/class/input/input2
U: Uniq=
H: Handlers=mouse0 event2
B: EV=b
B: KEY=6420 0 70000 0 0 0 0 0 0 0 0
B: ABS=11000003

Interesuje nas linia " H: Handlers=mouse0 event2 ", z której łatwo odczytujemy numer jaki należy wstawić w miejsce X. W większości przypadków jest to właśnie 2.

Metoda udev

Przechodzimy do katalogu reguł dla udev

cd /etc/udev/rules.d/

i tworzymy plik dla naszego touchpada
su -
touch 85-synaptics.rules

Dość ważne jest, by reguła dla synaptics miała niższy numer niż reguła dla HAL.

Kolejnym krokiem jest wpisanie do nowo utworzonego pliku odpowiedniej reguły

KERNEL=="event*", ATTRS{name}=="SynPS/2 Synaptics TouchPad", SYMLINK+="input/synaptics"

lub
SUBSYSTEM=="input", ATTRS{name}=="SynPS/2 Synaptics TouchPad", SYMLINK+="input/synaptics"

W debianie powyższą linię należy dodać do pliku /etc/udev/persistent-input.rules przed linią LABEL="persistent_input_end" .
Wartość dla ATTRS{name} uzyskamy wykonując polecenie
cat /proc/bus/input/devices

Interesuje nas część dotycząca naszego touchpada
I: Bus=0011 Vendor=0002 Product=0007 Version=00b1
N: Name="SynPS/2 Synaptics TouchPad"
P: Phys=isa0060/serio2/input0
S: Sysfs=/devices/platform/i8042/serio2/input/input6
U: Uniq=
H: Handlers=mouse1 event6 ts1 
B: EV=b
B: KEY=6420 0 70000 0 0 0 0 0 0 0 0
B: ABS=11000003

Linią zawierającą potrzebną nam wartość jest
N: Name="SynPS/2 Synaptics TouchPad"

SYMLINK tworzy dowiązanie symboliczne do urządzenia. Nazwa po " input/ " jest właściwie dowolna.

Po tym małym zabiegu można przejść do edycji pliku konfiguracyjnego xorg

cd /etc/X11
vim xorg.conf

Zamiast vim można użyć dowolnego innego edytora.

Odnajdujemy linię (wpis może się troszkę różnić)

Option        "Device"        "/dev/input/mice"

w sekcji dotyczącej touchpada i zmieniamy mice na wartość podaną przy SYMLINK
Option        "Device"        "/dev/input/synaptics"

Zapisujemy plik i restartujemy komputer.
shutdown -r now

Manual

man synaptics
O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-Noncommercial-Share Alike 2.5 License.