LIRC és XBMC

A Ubuwiki wikiből

A LIRC egy olyan csomag, ami az infravörös távkapcsolóból érkező jeleket dekódolja.

Az XBMC (Xbox Media Center) pedig egy cross-platform digitális médialejátszó és HTPC (Házi-Mozi PC) szoftver, melyet úgy alakítottak ki, hogy amolyan médialejátszószerűen könnyen vezérelhető legyen akár egy távirányítóval is, egy televízión. (Hivatalos weboldal)

A cél

Ha úgy döntöttünk, hogy a gépből médiacentert csinálunk, és rendelkezünk egy távkapcsolóval (TV-tunerrel vagy más módon szereztünk a géphez), akkor jogos az igény, hogy használjunk is, ám ez nem mindig sikerül, ugyanis a rendszer vagy nem kezeli, vagy nem úgy, ahogy azt kellene. Alább álljon az a módszer, amellyel sikeresen beállítható egy devinput-ként működő távkapcsoló az XBMC nevű médiacenter alkalmazáshoz. Az alábbi leírás Kubuntu 10.10-en működött.

Az eszköz

Legelső kérdés, hogy a rendszer felismeri-e az adott eszközt. Ezt nagyon könnyen ellenőrizhetjük:

for i in /sys/class/input/input* ; do echo -n "$(basename "$i"): "; cat "$i/name"; done

Erre egy hasonló válasszal tér vissza:

input0: Power Button
input1: Power Button
input2: AT Translated Set 2 keyboard
input3: sonixb
input4: ImPS/2 Generic Wheel Mouse
input5: saa7134 IR (ASUSTeK P7131 Analo

Van bekapcsoló gomb, klaviatúra, egér stb., és a legutolsó az saa7134 IR, a TV-tuner infrája. Eddig jó. Próbáljuk ki!

sudo cat /dev/input/event5

A gombok lenyomására reagálnia illene, mindenféle összevissza-jelekkel. Ha nem működik, akkor ellenőrizzük, hogy az érzékelő látható-e, be van-e dugva, az elemek nincsenek lemerülve stb. Ha ezek ellenére sem jó, ez a hibaelhárító nem képes megoldani a hibát. :D Ha reagál, akkor jelünk van, már csak fel kéne fogatni a rendszerrel, hogy mit szeretnénk, és erre való a LIRC. De mielőtt nekiesnénk, a későbbi problémák elkerülése végett adjuk ki a következő parancsot:

ls -la /dev/input/by-path

Ez elárulja nekünk, milyen néven tudunk hivatkozni később az eszközünkre, a jelen esetben erre a sorra volt szükségünk:

lrwxrwxrwx 1 root root   9 2011-03-25 13:35 pci-0000:01:0a.0-event-ir -> ../event5

Az eszközünk tehát a /dev/input/by-path/pci-0000:01:0a.0-event-ir címen érhető tetten, amiben az ir elég beszédes (infra red) Ím, érkezzék a dekódoló eszköz vala!

A LIRC

A LIRC egy olyan csomag, ami az infravörös távkapcsolóból érkező jeleket dekódolja. Nem minden kapcsolót ismer, de elég sokat tud. Ubuntunál a lirc nevű csomagot kell feltegyük. Be kell állítani, hogy milyen eszközt figyeljen és hogyan értelmezze. Ehhez nyissuk meg a /etc/lirc/hardware.conf fájlt. A következő sorok kellenek:

REMOTE_DRIVER=""
REMOTE_DEVICE=""

A fenti esetben ez a következőképp fog kinézni:

REMOTE_DRIVER="devinput"
REMOTE_DEVICE="/dev/input/by-path/pci-0000:01:0a.0-event-ir"

Ha kész, indítsuk újra - akár fut, akár nem.

sudo service lirc restart

Ha a lirc nem futott, visszakaphatjuk, hogy * Stopping remote control daemon(s): LIRC [fail], de ez nem hiba! Nem tudjuk leállítani, ami nem fut. Ennyi. Most le kell tesztelni az eszközt az irw paranccsal. Egy üres sort ad, majd a távkapcsoló gombjait nyomkodva hasonló választ kapunk:

000000008001001c 00 KEY_ENTER devinput
000000008001006a 00 KEY_RIGHT devinput
0000000080010069 00 KEY_LEFT devinput
0000000080010067 00 KEY_UP devinput

Érdemes megjegyezni, melyik gombnak mi a neve, vagy akár felírni, de általában rá van írva a gombra vagy alá/fölé valami hasonló elnevezés. Már csak annyi a dolgunk, hogy az XBMC-t saját képünkre és igényünkre formáljuk.

XBMC

XBox Media Center eme szoftvernek a neve, amit most beállítunk. Nem sok média centert próbáltam, de ez tetszetős is, jól is használható, habár ahogy én tudom, a TV-tuner képességeit nem lehet vele kihasználni, de sebaj. Én rendszer szinten állítottam be a gombokat, de valószínűleg analóg módon a ~/.xbmc mappában is meg lehet tenni. Az első fájl, ami kelleni fog, az a /usr/share/xbmc/system/Lircmap.xml. Ezt nyissuk meg rendszergazdaként. Keressük meg a devinput-ot.

        <remote device="linux-input-layer">
        <altname>cx23885_remote</altname>
        <altname>devinput</altname>
...

A fájl alján van valahol. A <remote></remote> tag-ek között állítjuk be, hogy az adott eszköz mire mit reagáljon. A device= után van az eszköz elsődleges neve, majd az <altname> tag-ben megadhatjuk, hogy mi legyen az alternatív neve. Mi a devinput eszközt használjuk. Ha felírtuk a gombok neveit, itt értelem szerűen kitölthetjük a reakciókat. Például, hogy a left nevű esemény fusson le a KEY_LEFT megnyomására

<left>KEY_LEFT</left>

Az itt felsorolt tag-eket egyébként szintén érdemes megjegyezni, felírni vagy nyitva hagyni, ugyanis most megnézzük, hogy egyébként milyen utasításokat hajtanak végre. Ehhez nyissuk meg a /usr/share/xbmc/system/keymaps/remote.xml fájlt. Itt van leírva, hogy milyen gombra milyen reakciók fussanak le. a <global> tag az általános dolgokra vonatkozik, amit később felülírhatunk.

Íme egy rövidített példa, amiben beállítjuk, hogy a menu gomb általában az előző menüre lépjen vissza, de ha a zenelistában vagyunk, akkor a helyi menüt nyissa meg:

Az irw a Menü gomb megnyomására a KEY_MENU-vel válaszol.

Lircmap.xml:

<lircmap>
    <remote device="linux-input-layer">
    <altname>cx23885_remote</altname>
    <altname>devinput</altname>
        <menu>KEY_MENU</menu>
    </remote>
</lircmap>

Tehát ekkor a KEY_MENU lenyomására a menu hívódik meg.

keymaps/remote.xml:

<keymap>
    <global>
        <remote>
            <menu>PreviousMenu</menu>
        </remote>
    </global>
    <MyMusicPlaylist>
        <remote>
            <menu>ContextMenu</menu>
        </remote>
    </MyMusicPlaylist>
</keymap>

Ekkor globálisan a menu utasításra a PreviousMenu parancs hajtódik végre, viszont a MyMusicPlaylist-ben már a ContextMenu. Ezután indítsuk el az XBMC-t, és nézzük meg, működik-e minden. Ha minden rendben, akkor már tudjuk, mi a dolgunk: Beállítani mindent, amit ahogy szeretnénk, majd eldőlni a kanapén vagy az ágyon, kiszemelni egy filmet és megnézni. Hajrá! :D

Személyes eszközök