Mappeljük a távirányítót a kedvenc programunknak

infrared-remoteSok lehetőség létezik arra, hogy a kedvenc programunkat utasíthassuk egy távirányítóval, de én most egy olyan lehetőséget mutatok be, melyet egyébként általában nem szokás használni.

Gyakran előfordul, hogy a távirányítónk gombjai nem működnek. Viszont, ha az eszköz szabványos, vagy van hozzá olyan driver, mely szabványossá alakítja és „event” eszközként kezeljük, akkor ez nem fordulhat elő.

Ezután persze az lenne a legpraktikusabb, ha lenne egy input eventet használó program, mely felismeri az X ablakot és a megfelelő billentyűt juttatja el neki. Ezzel ugyebár programonként vállogathatunk, hogy mit küldünk el. Persze a legtöbb program ma már úgy van megtervezve, hogy a gyorsbillentyűk módosíthatóak benne, azaz egy ilyen komplex program helyett (mely valószínűleg csak több részletben érhető el) használhatunk valami köznapibbat, ami ugyan nem vállogat a programok között, de alapvetően minden distribúció alatt elérhető. Ez nem más mint az udev.

Keressük meg az eszküzünket a következő paranccsal:

cat /proc/bus/input/devices

Ebből két sor lesz érdekes 1) „N:„, mely az eszköz nevét tartalmazza (mondjuk „Remote Control„); 2) „H:” (kbd, event3), mely az elérési útvonalhoz kell, de használhatjuk a „P:” (/dev/input/by-path/pci-0000:05:02.0/ir0) fizikai címet is, amennyiben az eszközök sorrendje változik.

Még mielőtt hozzálátnánk a feladathoz konfiguráljuk az xorg-ot.

Section "InputDevice"
        Identifier  "Remote Control"
        Driver      "evdev"
        Option      "AutoRepeat" "250 30"
        Option      "XkbModel" "evdev"
        Option      "XkbRules" "evdev"
        Option      "Device" "/dev/input/event3"
#        Option      "Dev Phys" "/dev/input/by-path/pci-0000:05:02.0/ir0"
EndSection

Mondjuk ez legyen a 3-as számú input eszköz, de megadható a fizikai címmel is. A lényeg az, hogy a Driver után evdev szerepeljen.

Ezek után felderíthetjük a gombjaink kódjait, az udev segítségével:

/lib/udev/keymap -i /dev/input/event3

Nyomjuk meg a kívánt gombot, mire megjelenik egy „scan code„, mely egy hexadecimális szám és egy  „key code„, mely sztring. A „key code„-ot dobjuk (cserélni fogjuk), nekünk a „scan code” kell.

Hozzunk létre egy „keymap” fájlt az „/etc/keymaps„, vagy bármely más útvonalon. Ebbe emeljük át a „key code„-ot és írjunk mellé egy „scan code” stringet. (Ha bizonytalanok vagyunk, akkor a /usr/include/linux/input.h fájlban nagy betűvel KEY_ előtaggal ott vannak a sztringek.)

Tehát a fájlunk valahogy így fog kinézni:

0x1F20 h #CH+

Azaz, jelen esetben a távirányító „CH+” gombja megnyomásakor olyan lesz, mintha egy „h” gombot nyomtunk volna meg. Persze ehhez még futtatnunk kell azt a programot, mely ezt a keymap fájlt beállítja:

/lib/udev/keymap /dev/input/event3 /etc/keymaps/keymap

Persze nem akarjuk minden esetben magunk futtatni ezt a parancsot, melynek a hatása csak addig tart amíg újra nem indítjuk a gépet, ezért írunk egy udev rule-t. Ezt elhelyezzük az /etc/udev/rules.d könyvtárba egy tetszőleges néven .rules kiterjesztéssel, mondjuk 90-remote-control.rules.

SUBSYSTEM=="input", ACTION=="add", ATTRS{name}=="Remote Control", RUN+="/lib/udev/keymap $devnode /etc/keymaps/keymap"

Ezt követően automatikusan cseréli a „Remote Control” nevű eszköz „CH+” gobját „h” gombra.

Vélemény, hozzászólás?