Emulacja rolek myszy (scroll)

Spis treści

Na forum DUG pojawił się ciekawy temat dotyczący emulacji rolek myszy (scroll) w urządzeniach, które ich nie posiadają. W tym przypadku chodziło o bliżej nieokreślony model trackball'a. Niemniej jednak, są też myszy, które może i rolki mają, ale użytkownikom tych urządzeń zwyczajnie nie chce się wysilać, by tymi kółkami kręcić non stop. Jako, że ja się zaliczam do tej grupy osób, pomyślałem, by zaimplementować sobie ficzer, który sprawi, że moja bardzo wypasiona mysz będzie miała pod prawym przyciskiem również emulację scroll'a. Oczywiście dalej będzie można klikać prawym przyciskiem, by uzyskać dostęp do menu kontekstowego i pod tym względem nic się nie zmieni. W tym wpisie sprawdzimy jak taka emulacja rolek wygląda w praktyce.

Emulacja rolki za sprawą Xserver'a

Jako, że to Xserver zajmuje się obsługą urządzeń wskazujących, które podłączamy do naszego komputera, to w jego konfiguracji możemy dodać stosowne wpisy, które sprawią, że emulacja scroll'a zostanie aktywowana. Niemniej jednak, musimy ustalić kilka parametrów zanim przejdziemy do pisania pliku konfiguracyjnego. Wpisujemy zatem xinput w terminalu, by uzyskać listę dostępnych urządzeń, przykładowo:

$ xinput
...
⎜   ↳ A4Tech USB Mouse                          id=9    [slave  pointer  (2)]
...

To będzie nasza mysz laboratoryjna. Do tego urządzenia możemy odwoływać się po nazwie, tj. A4Tech USB Mouse lub też po ID ( 9 ) . Jeśli odwołujemy się po nazwie, to trzeba ją ująć w " " .

Każde wymienione urządzenie ma określoną domyślną konfigurację, na którą składa się szereg parametrów. Wszystkie z nich możemy podejrzeć za sprawą xinput list-props . Nas interesować będą te poniższe parametry:

$ xinput list-props 9
...
Evdev Third Button Emulation (286):     0
Evdev Third Button Emulation Timeout (287):     1000
Evdev Third Button Emulation Button (288):      3
Evdev Third Button Emulation Threshold (289):   20
Evdev Wheel Emulation (290):    0
Evdev Wheel Emulation Axes (291):       0, 0, 4, 5
Evdev Wheel Emulation Inertia (292):    10
Evdev Wheel Emulation Timeout (293):    200
Evdev Wheel Emulation Button (294):     4
Evdev Drag Lock Buttons (295):  0

Emulacja trzeciego klawisza jak i scroll'a musi zostać aktywowana oraz trzeba im przypisać odpowiednie przyciski. Musimy także dostosować sobie czas, po upłynięciu którego emulacja będzie załączana. Wartość 1000 odpowiada za jedną sekundę. Każdy klik poniżej tego czasu będzie oznaczać zwyczajne kliknięcie prawym przyciskiem myszki.

Niektóre aplikacje, np. tmux mogą nie działać jak należy po zmianie tych ustawień. By to poprawić, musimy zmienić wartość parametru Third Button Emulation Threshold na 0 , zaś parametr Third Button Emulation Button ustawić na 2 .

Podobnie jak w przypadku wyboru urządzenia, przy konfiguracji parametrów również możemy się odwoływać do pełnych nazw lub ID (wartości w nawiasach). Parametry zmieniamy w poniższy sposób:

$ xinput set-prop 9 286 1
$ xinput set-prop 9 287 400
$ xinput set-prop 9 288 2
$ xinput set-prop 9 289 0
$ xinput set-prop 9 290 1
$ xinput set-prop 9 294 3

$ xinput get-button-map 9
1 2 3 4 5 6 7 8 9 10 11 12

Zmiany są natychmiastowe i powinniśmy być w tej chwili w stanie, np. przewijać stronę w przeglądarce po przyciśnięciu prawego przycisku i wykonaniu ruchu myszą do przodu lub do tyłu. Jeśli nasza mysz ma rolki, to one również powinny działać bez problemów. Wyżej mamy również podane aktualne mapowanie przycisków myszy.

Jeśli zadowalają nas te ustawienia, to piszemy plik konfiguracyjny dla Xserver'a. Sprawi to, że nie będziemy musieli wywoływać tych powyższych poleceń za każdym razem, gdy startujemy graficzną sesję. Plik nazwijmy sobie 10-mouse.conf i wrzućmy go do katalogu /etc/X11/xorg.conf.d/ . Treść, jaką należy w tym pliku umieścić, jest poniżej:

Section "InputClass"
      Identifier        "A4Tech USB Mouse"
      Driver            "evdev"
      MatchIsPointer    "yes"
      MatchDevicePath   "/dev/input/event*"
      MatchProduct      "USB"
      MatchVendor       "A4Tech"

      Option "Name" "A4Tech USB Mouse"
      Option "AccelerationNumerator" "2"
      Option "AccelerationDenominator" "1"
      Option "AccelerationThreshold" "4"

      Option "ButtonMapping" "1 2 3 4 5 6 7 8 9 10 11 12"
      Option "YAxisMapping" "4 5

      Option "EmulateThirdButton" "on"
      Option "EmulateThirdButtonButton" "2"
      Option "EmulateThirdButtonMoveThreshold" "0"
      Option "EmulateThirdButtonTimeout" "400"
      Option "EmulateWheel" "1"
      Option "EmulateWheelButton" "3"

Pozostałe opcje użyte w powyższym pliku zostały opisane we wpisie poświęconym konfiguracji samej myszy . Zatem jeśli mamy problem z dopasowaniem urządzenia lub też nie do końca rozumiemy za co odpowiadają poszczególne parametry, to zachęcam do zapoznania się z podlinkowanym artykułem. Warto też zajrzeć do man evdev.

Emulacja roki myszy przy pomocy mouseemu

Emulacja scroll'a myszy może się odbyć także za sprawą narzędzia mouseemu . Jest ono dostępne w debianie w pakiecie o tej samej nazwie, zatem nie powinno być problemów z jego instalacją. Jeśli chodzi zaś o samo narzędzie, to za jego sprawą jesteśmy w stanie zrealizować mniej więcej to samo zadanie, co przy pomocy wyżej opisanego pliku konfiguracyjnego Xserver'a. Podstawowa różnica tkwi jednak w tym, że zamiast korzystać z prawego przycisku myszki, ustawiamy modyfikator w postaci przycisku na klawiaturze. W taki sposób, po przyciśnięciu i trzymaniu klawisza, przykładowo Alt , zachowanie myszy ulegnie zmianie i za pomocą ruchów myszy będziemy w stanie przewijać strony.

Po zainstalowaniu pakietu mouseemu zostanie utworzony plik /etc/default/mouseemu , w którym jest trzymana konfiguracja poszczególnych klawiszy. Za scroll odpowiada poniższa linijka:

SCROLL="-scroll 125"

Numerek 125 określa klawisz Win . Jeśli chcemy przypisać sobie inny modyfikator, to wystarczy odpalić evtest i odczytać kod pożądanego klawisza:

Event: time 1453044885.934446, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e3
Event: time 1453044885.934446, type 1 (EV_KEY), code 125 (KEY_LEFTMETA), value 0
Event: time 1453044885.934446, -------------- SYN_REPORT ------------

Po dostosowaniu powyższego pliku, usługę trzeba zresetować, by zmiany zaczęły obowiązywać.

Mikhail Morfikov avatar
Mikhail Morfikov
Po ponad 10 latach spędzonych z różnej maści linux'ami (Debian/Ubuntu, OpenWRT, Android) mogę śmiało powiedzieć, że nie ma rzeczy niemożliwych i problemów, których nie da się rozwiązać. Jedną umiejętność, którą ludzki umysł musi posiąść, by wybrnąć nawet z tej najbardziej nieprzyjemniej sytuacji, to zdolność logicznego rozumowania.