Használj még több egérgombot!

A „sokgombos” egerek manapság már egyáltalán nem számítanak különlegességnek, azonban az ezekben rejlő lehetőségeket szinte alig használjuk ki.

Egészen eddig én magam is leginkább csak játék közben használtam ezeket. Ennek oka lehet az is, hogy nem nagyon könnyítik meg ezek használatát. Windows alatt is szinte csak a Logitech egereihez adott szoftver az, amivel könnyedén hozzárendelhetünk tetszőleges műveletet, makrót, billentyűkombinációt  egy-egy egérgombhoz.

A lehetőség persze Linux alatt is adott, ám leginkább csak parancssori varázslatokkal, ugyanis még senki nem készített ehhez könnyedén használható és univerzális grafikus felületet.

Mivel Qubes OS alatt a VM-ek közötti Copy and Paste művelethez speciális billentyűkombinációkat kell használni, így már régóta tervezem, hogy ezeket a műveleteket inkább egy-egy egérgomb megnyomásával használjam.

Ehhez mindenképpen meg kell tudnunk, hogy az általunk használt egér gombjainak lenyomását hogyan érzékeli a rendszerünk. Ezt azzal kezdjük, hogy kiválasztjuk a megfelelő beviteli eszközt:

[user@dom0 ~]$ xinput --list
 ⎡ Virtual core pointer           id=2 [master pointer  (3)]
 ⎜  ↳ Virtual core XTEST pointer  id=4 [slave pointer   (2)]
 ⎜  ↳ SynPS/2 Synaptics TouchPad  id=10 [slave pointer  (2)]
 ⎜  ↳ TPPS/2 IBM TrackPoint       id=11 [slave pointer  (2)]
 ⎜  ↳ sys-usb: Logitech M705      id=14 [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)]
   ↳ Video Bus                    id=7 [slave keyboard  (3)]
   ↳ Sleep Button                 id=8 [slave keyboard  (3)]
   ↳ AT Translated Set 2 keyboard id=9 [slave keyboard  (3)]
   ↳ ThinkPad Extra Buttons       id=12 [slave keyboard (3)]

A parancs kimenete mindenkinél más lehet, de a lényeg hogy megtaláljuk a megfelelő beviteli eszköz azonosítóját, ami esetemben a 14-es azonosítóval rendelkező Logitech M705. Az egyetlen Qubes OS specifikus dolog, hogy az egér a sys-usb VM-hez van csatlakoztatva, nem közvetlenül a dom0-ba. Köszönhetően a Qubes Input Proxy-nak, amin csak ellenőrzött „egér műveletek” juthatnak a rendszer legérzékenyebb részéhez (dom0), ez a megoldás a MouseJack (és más hasonló támadási formák) ellen is védelmet nyújt.

Egyébként az itt leírtak várhatóan ugyan úgy működnek bármilyen más Linux rendszeren is, amiről egyébként már más is írt cikket korábban.

Amint megvan az egerünk azonosítója, kideríthetjük melyik gombnyomás milyen eseményt generál jelenleg:

[user@dom0 ~]$ xinput test 14 |grep -v motion

Ez után ha lenyomunk  egy gombot, a képernyőn megjelenik az Xorg számára küldött művelet. Ezekből tulajdonképpen a gombok számai érdekesek, amit a végigpróbálgatás után érdemes feljegyezni.

Jöhet a megoldás érdemi része, amihez a következő két csomagra van szükségünk: Az xbindkeys, amivel billentyű kombinációkhoz (esetünkben egér gombnyomáshoz) tudunk parancsokat rendelni. És az  xdotool, amivel pedig billentyű kombinációkat tudunk szimulálni.

Qubes OS esetén a xbindkeys csomagot biztosan nekünk kell utólag feltelepíteni, mert a telepítőkészlet ezt nem tartalmazza. Más Linux disztribúciók esetén várhatóan mindkét parancs rendelkezésünk áll.

Hogy mindebből egy működő megoldás legyen, egy konfigurációs állományt kell létrehoznunk, ami alapján az xbindkesy elvégzi a varázslatot: egérgomb lenyomására billentyűkombinációt szimulál és/vagy elindít egy tetszőleges parancsot és/vagy műveletet.

# Qubes secure_copy_sequence /etc/qubes/guid.conf
"xdotool keydown shift keydown ctrl key c keyup ctrl keyup shift"
 b:8
# Qubes secure_paste_sequence /etc/qubes/guid.conf
"xdotool keydown shift keydown ctrl key v keyup ctrl keyup shift"
 b:9

# KDE nextDesktop 
"qdbus-qt5 org.kde.KWin /KWin org.kde.KWin.nextDesktop"
 Mod4 + Super_L + b:7
# KDE previousDesktop
"qdbus-qt5 org.kde.KWin /KWin org.kde.KWin.previousDesktop"
 Mod4 + Super_L + b:6

A fenti példa első két bejegyzése kell a Qubes copy-paste egérgombhoz rendeléséhez, a második kettő pedig KDE specifikus: a „windows” billenytű lenyomása mellett a választott  egérgombbal az előző/következő desktopra vált.

Innentől már csak a képzeletünk szab határt annak, hogy mit szeretnénk egy gombnyomással elérni :)

Nagy segítség az xbindkeys -k, ami megmutatja hogy mit eredményez egy adott gomb lenyomása a billentyűzetünkön, olyan formában ahogy az .xbindkesyrc állományba használhatjuk.

Például a „Windows” billentyű = „Mod4 + Super_L”

[user@dom0 ~]$ xbindkeys -k
Press combination of keys or/and click under the window.
You can use one of the two lines after "NoCommand"
in $HOME/.xbindkeysrc to bind a key.
"NoCommand"
 m:0x40 + c:133
 Mod4 + Super_L

További infó a használt parancsokról:

Az elkészült kofigot egyből ki is próbálhatjuk, ehhez csak újra kell indítanunk a xbindkeys parancsot:

[user@dom0 ~]$ killall xbindkeys && xbindkey

Ahhoz hogy ezt ne kelljen mindig kézzel elindítani, célszerű automatikusan indítani. Amit KDE esetén könnyedén megtehetünk: