Genius Ergo 525 miš i Linux

Ne želim ga ureći, ali me ovaj miš već služi 7 godina. Istina, iz dva puta. Kao i većina uređaja na Linuxu, radi dovoljno dobro već nakon priključivanja. Prepoznati su svi ekstra dugmići, čak i oni koji nisu radili na Windowsu kao što je horizontalno skrolovanje sa kolutićem. Stvar koja kvari perfektan učinak su pobrkani dugmići za naprijed i nazad. Osim toga htio sam staviti dugmić između "naprijed/nazad" da osvježava stranicu, tj. da se ponaša kao da sam pritisno F5 (dugmić označen na slici).

Dugme za F5

Pogrešni "naprijed/nazad" dugmići

Prvi problem, sa pobrkanim dugmićima, je bilo relativno jednostavno riješiti. Pomoću xinput-a možete saznati trenutni raspored dugmića.

$ xinput
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Genius Ergo Mouse                         id=8    [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)]
    ↳ Power Button                              id=7    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=9    [slave  keyboard (3)]
    ↳ Genius Ergo Mouse                         id=10   [slave  keyboard (3)]

Moj miš je Genius Ergo Mouse, a njegov id je 8. xinput ima mnogo opcija, a nama je interesantna query-state opcija. Pomoću nje možete vidjeti status uređaja, tj. u našem slučaju status pritisnutih dugmića. Postoje i drugi načini kako da saznate koje je koje dugme, ali je xinput koristan jer ga sigurno već imate instaliranog. Dok sam pritisno dugme za naprijed na mišu ovo je ispis komande (sa izostavljenim neinteresantnim stvarima):

$ xinput query-state 8
...
    button[7]=up
    button[8]=down
    button[9]=up
...

Istu stvar sam ponovio za "nazad" dugmić, i saznao da je broj 9. Sad kad znamo koji je broj, možemo koristiti xinput da ih zamjenimo. Prvo izlistamo sve dugmiće što miš ima sa:

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

Nakon toga zamjenimo mjesta 8 i 9.

$ xinput set-button-map 8 1 2 3 4 5 6 7 9 8 10 11 12 13 14 15

Da bi promjena ostala trajna možete staviti gore navedenu komandu da se izvrši pri pokretanju X sesije. Meni je draže koristiti Xorg konfiguracioni fajl. Ovako izgleda (izostavljene stvari nevezane za miš):

Section "InputClass"
    Identifier "Ergo Mouse"
    MatchUSBID "0458:0087"
    Option "ButtonMapping" "1 2 3 4 5 6 7 9 8 10"
EndSection

MatchUSBID sam saznao pomoću lsusb i služi za identifikaciju uređaja, da se postavke primjene za miš. To je onaj par rječi od 4 slova/cifre poslije ID, sa dvotačkom između.

$ lsusb
...
Bus 002 Device 002: ID 0458:0087 KYE Systems Corp. (Mouse Systems) Ergo 525V Laser Mouse
...

Dugmić za F5

Za mijenjanje funkcije dugmića na mišu sam koristio udev direktno. Vjerovatno postoji i drugi način (xbindkeys možda), ali mi se udev način činio mnogo "čistijim". Pronašao sam ovaj članak koji objašnjava kako da se izvede sve.

Pomoću evtest programa možemo saznati scancode dugmića.

$ evtest
...
Event: time 1472069345.467695, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90006
Event: time 1472069345.467695, type 1 (EV_KEY), code 63 (KEY_F5), value 1
Event: time 1472069345.467695, -------------- SYN_REPORT ------------
...

Scancode je onaj broj poslije "value", znači za nas je 90006. Opet nam je potreban i ID što smo koristili maloprije za Xorg konfiguracioni fajl. Na onom gore blogu piše da koristimo keyboard:usb:vXXXXpXXXX*, gdje X-ovi predstavljaju naše ID-ove. Međutim nisam imao uspijeha s tim, ali sam našao rješenje na ovom blogu. Treba promjeniti u evdev:input:b*vXXXXpXXXX*. Pokušao sam pronaći zašto, ali nisam ništa pronašao. Ako neko zna, bilo bi dobro da podijeli.

Sve podatke sam ubacio u fajl pod /etc/udev/hwdb.d/10-genius-mouse.hwdb. Izgleda ovako:

evdev:input:b*v0458p0087*
 KEYBOARD_KEY_90006=f5

Posljednji korak je da pokrenete sljedeće komande, da se ažurira i aktivira udev baza podataka:

udevadm hwdb --update
udevadm trigger