Meniu

Configurare mouse cu 7 butoane in Linux

Indiferent de cate butoane are mouse-ul functionalitatea dorita se invarte in jurul a 7 actiuni care se doresc a fi recunoscute de orice mouse care poate lua locul unuia standard cu 5 butoane. De ce 7 actiuni la 5 butoane? Simplu: rotita de scroll este privita de catre X ca 3 butoane, nu ca unul singur (middle click).

Actiunile recunoscute de X (cel putin pe ubuntu si pe kubuntu sunt asa) sunt urmatoarele:

butonul 1 - left click butonul 2 - middle click butonul 3 - right click butonul 4 - scroll up butonul 5 - scroll down butonul 6 - navigation back butonul 7 - navigation forward

Motivul pentru care nu toti mousii sunt recunoscuti corect de catre X este pentru ca nu toti producatorii respecta aceasta numerotare a butoanelor in functie de actiunile/evenimentele dorite. Acesta este si motivul pentru care incercarile mele au esuat incercand sa respect alte how-to-uri si posturi de pe alte forumuri: nu folosesc un mouse standard.

Solutia cea mai la indemana este remaparea butoanelor.

Suportul pentru butoanele de navigare este implementat in X, acesta doar trebuie activat in cazul in care acesta nu a fost auto-detectat. Spre exemplu Mandriva 2007 il auto-detecteaza si chiar mai mult, mapeaza corect actiunile mouse-ului. Aceasta se face editand /etc/X11/xorg.conf.
Configurarea mea difera putin si o sa explic unde si de ce.

Section "InputDevice" Identifier "Configured Mouse" Driver "mouse" Option "Buttons" "7" Option "CorePointer" Option "Device" "/dev/input/mice" Option "Protocol" "ExplorerPS/2" Option "ZAxisMapping" "4 5" EndSection

1. Linia asta specifica cate butoane are mouse-ul:

Option "Buttons" "7"

Chiar daca el are mai multe, cum am spus mai sus, prezinta interes doar cele 7 actiuni deci valoarea va fi setata pe 7.
Am observat ca mai mult nu strica (desi nici nu aduce nimic in plus) dar mai putin da.
Aceasta este valoarea recomandata la o configuratie de acest gen.

2. Linia asta specifica care sunt butoanele care ar trebui sa execute scroll up si scroll down

Option "ZAxisMapping" "4 5"

Caz in care acestea in hardware nu sunt recunoscute ca fiind butoanele 4 si 5 exista doua metode prin care aceasta poate fi corectata.

editarea xorg.conf unde se inlocuiesc valorile de 4 si 5 cu acele care corespund lui scrool up si scrool down. Ajung si la partea unde acestea se pot identifica cu xev.
recomandata este remaparea lor cu xmodmap.

Nu recomand adaugarea de “ButtonMapping” ca optiuni in xorg.conf deoarece in anumite cazuri particulare aceasta solutie nu functioneaza, ba mai mult, X-ul nu va mai recunoaste mai mult de 7 butoane iar daca alea de navigare sunt de la 8 incolo, aleluia. Nu am reusit sa le fac sa le vada prin metoda asta deci dupa vreo 20 de minute am renuntat.

xev

Identificarea carui buton ii este atasata o actiune este simpla. Se ruleaza din terminal aplicatia xev. Se va deschide o fereastra peste care se pot executa evenimente de la mouse sau de la tastatura, evenimente care vor fi afisate in fereastra terminalului.
Evenimentele vor arata ceva de genul:

ButtonRelease event, serial 29, synthetic NO, window 0x2600001, root 0x156, subw 0x0, time 4183550102, (95,78), root:(691,126), state 0x10, button 8, same_screen YES ButtonPress event, serial 29, synthetic NO, window 0x2600001, root 0x156, subw 0x0, time 4183550457, (95,78), root:(691,126), state 0x10, button 9, same_screen YES

Asa se vor identifica si butoanele cu pricina. Spre exemplu in cazul meu particular butoanele 8 si 9 executau navigation back si navigation forward in loc de butoanele 6 si 7. A trebuit sa le remapez si cam aceasta a fost solutia.

xmodmap

Remaparea cu xmodmap in principiu este simpla. Comanda accepta ca parametru un sir de numere care definesc actiunile dupa cum urmeaza:

xmodmap -e "pointer = 1 2 3 x1 y1 z1 t1 x2 y2 z2 t2"

Vor fi inlocuite cu numere dupa cum urmeaza:

x1 - va fi inlocuit cu numarul butonului care a fost identificat in xev ca executand scrool up y1 - va fi inlocuit cu numarul butonului care a fost identificat in xev ca executand scrool down z1 - va fi inlocuit cu numarul butonului care a fost identificat in xev ca executand navigation back t1 - va fi inlocuit cu numarul butonului care a fost identificat in xev ca executand navigation forward

Restul de x2, y2, t2, z2 sunt butoanele care au fost inlocuite din mapping si care trebuie puse la coada. Am incercat sa nu le pun iar rezultatul a fost un mouse care nu functiona corect deci cele inlocuite nu sunt optionale. Pentru ca am pomenit de cazul meu particular, comanda utilizata de mine a fost:

xmodmap -e "pointer = 1 2 3 4 5 8 9 6 7"

deoarece doar butoanele de navigare erau busite. Cum am zis si mai sus, doar primele 7 sunt importante.

Comanda xmodmap se poate executa din terminal deci in caz de eroare se poate reveni usor la configuratia initiala spre deosebire de cazul xorg.conf unde trebuie rescris fisierul si restartat X-ul pentru a obtine modificarile dorite. Dupa remapare puteti testa evenimentele cu xev iar acestea trebuie sa corespunda cu lista publicata. Daca acestea corespund atunci se poate incerca intr-un browser cum ar fi Firefox sau Opera. In cazul meu it works like a charm.

Script

Deoarece maparea cu xmodmap nu va ramane dupa restartarea X-ului exista mai multe metode.
Una este cea descrisa de danieljucan cu scriptul din /bin. Eu am ales-o pe aia pe care o stiam. Am facut un script custom pe care l-am pus in ~/.kde/Autostart (sunt KDE user): autostart.sh

#!/usr/b i n/sh xmodmap -e "pointer = 1 2 3 4 5 8 9 6 7"

Am salvat sriptul cu denumirea de mai sus (autostart.sh) si i-am dat drept de execute cu:

chmod -c 755 autostart.sh

KDM si KDE

Pentru ca xmodmap sa ruleze automat numai pentru userul cu care te loghezi creezi un fisier folosind un editor text, vi in acest caz:

#vi ~/.kde/Autostart/Xmodmap

cu urmatorul continut

#!/bin/sh xmodmap /etc/X11/Xmodmap

Alternativ puteti adauga urmatoarea linie in ${kdedir}/share/config/kdm/Xstartup pentru ca remaparea sa aiba loc pentru toti userii:

exec /usr/bin/xmodmap -e "pointer = 1 2 3 4 5 8 9 6 7"

GDM si GNOME

Creati ~/.Xmodmap si gdm il va incarca automat la urmatorul login

pointer = 1 2 3 4 5 8 9 6 7

Pentru a aplica remaparea pentru toti userii creati /etc/X11/Xmodmap

Andreea

"Rome wasn't built in a day" !
  • | 120 articole

Nici un comentariu inca. Fii primul!
  • powered by Verysign