Sok 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.
legutóbbi hsz