Hama MCE Remote in Kodi auf dem Raspberry Pi 2 einbinden

Ein Mediacenter nutzt ja erst mal nicht sehr viel, wenn man ihn nicht auch bedienen kann. Und da, wie ich finde, eine Tastatur, sei sie nun per Kabel oder drahtlos angeschlossen, nicht so toll ins Wohnzimmerbild passt, kommt natürlich nur eine Fernbedienung in Frage.

Ich habe mich für eine Hama MCE Remote entschieden, die es bei Amazon für 28,65 € gibt. Zugegeben, als ich die gekauft habe, war sie bedeutend billiger.

Es gibt zwar eine Menge Fernbedienungen, die unseren Zweck erfüllen, diese werden aber unterschiedlich eingerichtet und konfiguriert. Und die Hama MCE Remote hat durchaus einige Besonderheiten, weswegen ich diesen Text schreibe.

Hinweise

Die Anleitung gilt nur für Linux und auf Linux basierende Installationen. Diese Anleitung funktioniert bei mir mit einem Mediacenter PC mit Ubuntu und auch mit dem Raspberry Pi 2.

Auch wenn die Einrichtung erst mal sehr kompliziert erscheint, so muss man dies jedoch nur ein Mal machen. Danach hat man seine Ruhe. Und da die Fernbedienung tadellos funktioniert, würde ich diese Zeit durchaus investieren. Folgt also der Anleitung, und eure Fernbedienung sollte, wenn es zu keinen Problemen kommt, gut funktionieren.

Um euch den Einstieg leicht zu machen, findet ihr hier den Inhalt der Konfigurationsdateien komplett. Es ist zwar nicht garantiert, dass es bei euch mit genau dieser Konfiguration auch läuft, aber so habt ihr einen Einstiegspunkt, von dem aus ihr eurem persönlichen Geschmack oder euren Systemvoraussetzungen entsprechend arbeiten könnt.

In dieser Anleitung findet ihr die Beispielkonfigurationen für einen Raspberry Pi 2 mit XBIAN. Wie ihr das installieren und konfigurieren könnt, erfahrt ihr in den Podcasts 80 bis 84.

Vorbereitungen

Fahrt euren Raspberry Pi herunter und zieht das Netzkabel. Vermutlich ist das zwar nicht nötig, aber ich möchte die Anleitung gerne an einem fest definierten Startpunkt beginnen.

Schließt den USB-IR-Empfänger der Fernbedienung an den Raspberry Pi an. Merkt euch, an welche USB-Schnittstelle ihr den Empfänger anschließt. Solltet ihr den Empfänger später mal an eine andere USB-Schnittstelle des Raspberry Pi anschließen, könnte es gut sein, dass ihr die UDEV-Regel neu konfigurieren müsst, dazu aber später. Ihr erspart euch das, wenn ihr den Empfänger immer an der gleichen USB-Schnittstelle anschließt. Ich habe hierzu die untere USB-Buchse direkt neben dem Netzwerkanschluss gewählt.

Nun könnt ihr das Netzteil des Raspberry Pi wieder anschließen. Wartet nun, bis das System voll hochgefahren ist.

Software-Installation

Wenn Kodi hochgefahren ist, und ihr Tasten an der Fernbedienung drückt, passiert was. Warum also noch konfigurieren, könntet ihr Fragen? Ja, Basisfunktionen der Fernbedienung funktionieren. Manch einem mag das sogar reichen. Aber es funktionieren längst nicht alle Tasten und man möchte vielleicht manche Sonderfunktionen auf bestimmte Tasten legen. Und hier wird es erforderlich, etwas Hand anzulegen. 🙂

Übrigens, hier kommt die Anleitung her, nach der ich die Fernbedienung konfiguriert habe. Sollte euch meine kurze Beschreibung nicht reichen, so findet ihr das Ganze auch im Detail dort.

Damit die Fernbedienung nun also so läuft, wie wir das wollen, braucht’s ein Software-Paket. Das Paket lirc für Fernbedienungen ist ja schon installiert, wir brauchen aber zusätzlich noch inputlirc. Öffnet also eine Sitzung mit einem SSH-Client und meldet euch am Raspberry Pi an. Nun gebt ihr folgende Befehle ein:

sudo apt-get update
sudo apt-get install inputlirc

Lasst das Fenster ruhig offen, das brauchen wir noch einige Male zum editieren von Konfigurationsdateien.

UDEV-Regel erstellen

Damit die Fernbedienung auch immer gefunden wird, bedarf es einer UDEV-Regel. Ich könnte mir durchaus vorstellen, dass es auch einfacher geht, aber bei mir haben diverse Abkürzungen nur kurzfristig funktioniert, daher erwähne ich die gleich nicht. Dieser Weg mag komplizierter sein, er hat aber den unschlagbaren Vorteil, dass er funktioniert… 🙂

Bei einem PC, wie z. B. meinem Mediacenter-PC, mag der Vorgang umfangreicher sein, aber da wir beim Raspberry Pi doch eine sehr überschaubare Hardware haben, können wir uns diverse Schritte auch schenken. Aber wir sollten doch mal eben etwas kontrollieren.

Lasst euch doch mal den Inhalt des Verzeichnisses /dev/input anzeigen:

ls /dev/input

Hier müssten jetzt 4 Verzeichnisse sein, event0, event1, event2 und evtl. mouse0. Interessant sind für uns die drei eventx-Verzeichnisse.

Eine der Besonderheiten der Hama MCE Remote ist, dass sie tatsächlich als 2 Geräte vorhanden ist. Sie ist nämlich nicht nur Fernbedienung, sondern auch Maus. Daher verteilen sich die Tasten auf mehrere Geräte. Um nun herauszufinden, welches Gerät mit welchem event-Verzeichnis verknüpft ist, gebt ihr folgenden Befehl ein:

cat /proc/bus/input/devices

Ihr bekommt dann eine Ausgabe, die in Etwa so aussehen könnte:

I: Bus=0003 Vendor=05a4 Product=9881 Version=0110
N: Name="HID 05a4:9881"
P: Phys=usb-0000:00:06.0-1/input0
S: Sysfs=/devices/pci0000:00/0000:00:06.0/usb4/4-1/4-1:1.0/input/input0
U: Uniq=
H: Handlers=kbd event0
B: EV=120013
B: KEY=e080ffdf01cfffff fffffffffffffffe
B: MSC=10
B: LED=7

I: Bus=0003 Vendor=05a4 Product=9881 Version=0110
N: Name="HID 05a4:9881"
P: Phys=usb-0000:00:06.0-1/input1
S: Sysfs=/devices/pci0000:00/0000:00:06.0/usb4/4-1/4-1:1.1/input/input5
U: Uniq=
H: Handlers=kbd mouse1 event1
B: EV=17
B: KEY=1f0000 2020000 3878d801d001 1e000000000000 0
B: REL=103
B: MSC=10

Das ist nur eine Beispielanzeige, die ich aus der oben genannten Anleitung rauskopiert und geringfügig angepasst habe. Der Raspberry Pi ist zur Zeit verliehen und steht mir gerade nicht zur Verfügung, weswegen ich etwas triksen musste… 🙂 Viel wichtiger ist, dass wir bei beiden Geräten in der Zeile „h: Handlers=“ sehen können, an welchen Verzeichnissen sie hängen.

Bei meinem Raspberry Pi ist das event0 und eventt1. Das Verzeichnis event2 ist mit lirc verknüpft.

Nun benötigen wir noch die Minor- und Major-Nummern beider Geräte. Das ist später für die Regeldatei nötig. Diese bekommen wir so heraus:

udevadm info -q all -n /dev/input/event0
udevadm info -q all -n /dev/input/event1

Die ganze Anzeige ist völlig belanglos, nur ganz unten findet ihr die beiden Zeilen „Major“ und „Minor“. Diese Zahlen notiert ihr euch bitte, für beide Geräte, da sie gleich für die Regeln nötig werden. In meinem Fall waren es übrigens Major 13 und Minor 64 und 65.

Nun schreiben wir eine UDEV-Regeldatei.

sudo nano /etc/udev/rules.d/10-irremote.rules

Und in diese leere Datei fügen wir folgenden Inhalt ein:

SUBSYSTEM=="input",ATTRS{idVendor}=="05a4",ATTRS{idProduct}=="9881",ATTR{dev}=="13:64",SYMLINK="input/irremote0"
SUBSYSTEM=="input",ATTRS{idVendor}=="05a4",ATTRS{idProduct}=="9881",ATTR{dev}=="13:65",SYMLINK="input/irremote1"

Vergesst nicht, die Minor-Zahl zu ändern, die hier bei 64 und 65 steht, falls dies bei euch andere Werte hat. Sonst funktioniert es nicht. Speichert die Datei nun mit Ctrl+X, so dass ihr wieder auf der Eingabeaufforderung steht.

Man könnte UDEV einfach neu starten, aber das hat bei mir nicht funktioniert, keine Ahnung, warum. Daher habe ich den Raspberry Pi komplett neu gestartet mit dem Befehl „sudo reboot“. Das dauert zwar, aber naja…

Wenn der Raspberry Pi wieder hochgefahren ist und ihr mit SSH wieder verbunden seid, lasst euch doch nochmal das Verzeichnis /dev/input anzeigen. Wenn die Regel nämlich geklappt hat, sind da jetzt zwei neue Verzeichnisse, eigentlich sind das symbolische Links: irremote0 und irremote1. Falls nicht, hat was nicht geklappt.

Editieren von Konfigurationsdateien

Ab jetzt wird es einfacher, denn nun könnt ihr getrost die Beispiele verwenden, die ich hier reinstelle. Anpassen müsst ihr da nichts mehr.

inputlirc

Zunächst muss die Datei /etc/default/inputlirc editiert werden.

sudo nano /etc/default/inputlirc

Am besten, ihr löscht den Inhalt der Datei und fügt folgenden Inhalt ein:

# Options to be passed to inputlirc.
EVENTS="/dev/input/irremote0 /dev/input/irremote1"
OPTIONS="-g -m 0 -c -r 280"

Nun noch mit Ctrl+X speichern.

lircd.conf

Damit imputlirc funktionieren kann, muss lirc umgangen werden. Öffnet also:

sudo nano /etc/lirc/lircd.conf

Hier stehen bereits einige Zeilen drin. Kommentiert diese aus. Stellt vor jede Zeile ein Nummernzeichen, #, voran. Anschließend mit Ctrl+X speichern, fertig.

custom.conf

Nun muss die Hardware für lirc konfiguriert werden:

sudo nano /etc/lirc/hardware/custom.conf

Löscht auch hier den Inhalt und fügt folgenden Inhalt ein:

# /etc/lirc/hardware/custom.conf
#
# Arguments which will be used when launching lircd
#LIRCD_ARGS=""

#Enable lircd
START_LIRCD="false"

#Don't start lircmd even if there seems to be a good config file
#START_LIRCMD=false

#Don't start irexec, even if a good config file seems to exist.
#START_IREXEC=false

#Try to load appropriate kernel modules
LOAD_MODULES=false

# Run "lircd --driver=help" for a list of supported drivers.
#DRIVER=""
# usually /dev/lirc0 is the correct setting for systems using udev
#DEVICE=""
#MODULES=""

# Default configuration files for your hardware if any
LIRCD_CONF=""
#LIRCMD_CONF=""

Auch dies noch mit Ctrl+X speichern, fertig. Der Raspberry Pi muss mit „sudo reboot“ neu gestartet werden.

Konfiguration von Kodi

Hier gibt es zwei Dateien, die das Verhalten der Fernbedienung beeinflussen. Zum Einen haben wir eine keymap.xml und eine Lircmap.xml. Beide Dateien sorgen im Zusammenspiel dafür, dass die Fernbedienung letztlich tut, was wir von ihr wollen.

Verbindet euch nach dem Neustart des Raspberry Pi also wieder per SSH und wechselt in das Kodi-Verzeichnis, und dort in das Verzeichnis für die eigenen Einstellungen:

cd .kodi/userdata

remote.xml

Die Fernbedienung kann bestimmte Funktionen in bestimmten Fenstern unterschiedlich behandeln. So habe ich es z. B. eingestellt, dass die Taste, mit der ich das Kontextmenü öffne, im Hauptfenster die Favoritenliste öffnet. Auch eine Löschtaste, falls man mal alte TV-Aufnahmen löschen will, habe ich hinzugefügt. Damit dies aber funktioniert, braucht es eben eine keymap.

Wir stehen ja jetzt im userdata-Verzeichnis. Also müssen wir eben noch ins keymaps-Verzeichnis:

cd keymaps

Hier erstellen wir die Datei remote.xml:

nano remote.xml

Das sudo ist hier nicht nötig, weil wir jetzt ja nicht mit Admin-Rechten, sondern unseren eigenen Rechten arbeiten.

In die nun offene leere Datei fügt ihr folgenden Inhalt ein:

<keymap>
    <global>
        <remote>
            <start>ActivateWindow(shutdownmenu)</start>
            <teletext>XBMC.RunScript(service.xbmc.tts,key.ITEM_EXTRA)</teletext>
            <record>screenshot</record>
        </remote>
        <universalremote>
            <obc1>XBMC.RunScript(service.xbmc.tts,key.REPEAT)</obc1>
            <obc2>XBMC.RunScript(special://home/addons/service.xbmc.tts/enabler.py)</obc2>
            <obc3>XBMC.RunScript(service.xbmc.tts,key.STOP)</obc3>
        </universalremote>
    </global>
    <MyVideoFiles>
        <remote>
            <clear>Delete</clear>
        </remote>
    </MyVideoFiles>
    <MyMusicFiles>
        <remote>
            <clear>Delete</clear>
        </remote>
    </MyMusicFiles>
    <Home>
        <remote>
            <title>ActivateWindow(favourites)</title>
        </remote>
    </Home>
</keymap>

Nun noch mit Ctrl+X speichern und mit cd .. zurück ins userdata-Verzeichnis gehen.

Lircmap.xml

Jeder Tastendruck auf eurer Fernbedienung sendet einen Code an den Rechner. Und in der Datei Lircmap.xml legt ihr fest, welche Taste welchen Code hat. Und danach weiß Kodi, was es damit zu tun hat.

Wenn ihr auf der Eingabeaufforderung nun den Befehl irw eingebt, so seid ihr in einem Fenster, in dem ihr die Codes sehen könnt. Drückt mal z. B. auf die Play-Taste, die Ausgabe sieht dann wahrscheinlich so aus:

a4 0 KEY_PLAYPAUSE /dev/input/irremote1

Ihr wisst jetzt also, dass der Code KEY_PLAYPAUSE die Play-Taste auf dem Gerät /dev/input/irremote1 ist.

Das könntet ihr jetzt für jede einzelne Taste wiederholen, um sie in die Lircmap.xml einzutragen, aber ihr könnt auch meine Lircmap nehmen. Die ist, so finde ich, schon recht brauchbar belegt… 🙂 Übrigens, das irw-Programm beendet ihr mit Ctrl+c.

Ihr seid ja jetzt im userdata-Verzeichnis, also öffnet ihr:

nano Lircmap.xml

Und in die leere Datei fügt ihr folgenden Inhalt ein:

<lircmap>
    <remote device="/dev/input/irremote1">
        <power>KEY_SLEEP</power>
        <play>KEY_PLAYPAUSE</play>
        <stop>KEY_STOPCD</stop>
        <menu>BTN_MOUSE</menu>
        <title>BTN_RIGHT</title>
        <skipplus>KEY_NEXTSONG</skipplus>
        <skipminus>KEY_PREVIOUSSONG</skipminus>
        <start>KEY_HOMEPAGE</start>
        <volumeplus>KEY_VOLUMEUP</volumeplus>
        <volumeminus>KEY_VOLUMEDOWN</volumeminus>
        <mute>KEY_MUTE</mute>
    </remote>
    <remote device="/dev/input/irremote0">  
        <record>CTRL_KEY_R</record>
        <reverse>CTRL_SHIFT_KEY_B</reverse>
        <forward>CTRL_SHIFT_KEY_F</forward>
        <left>KEY_LEFT</left>
        <right>KEY_RIGHT</right>
        <up>KEY_UP</up>
        <down>KEY_DOWN</down>
        <select>KEY_ENTER</select>
        <pageplus>KEY_PAGEUP</pageplus>
        <pageminus>KEY_PAGEDOWN</pageminus>
        <back>KEY_BACKSPACE</back>
        <info>ALT_META_KEY_ENTER</info>
        <display>KEY_ESC</display>
        <myvideo>CTRL_KEY_E</myvideo>
        <mymusic>CTRL_KEY_M</mymusic>
        <mypictures>CTRL_KEY_I</mypictures>
        <mytv>CTRL_SHIFT_KEY_T</mytv>
        <one>KEY_KP1</one>
        <two>KEY_KP2</two>
        <three>KEY_KP3</three>
        <four>KEY_KP4</four>
        <five>KEY_KP5</five>
        <six>KEY_KP6</six>
        <seven>KEY_KP7</seven>
        <eight>KEY_KP8</eight>
        <nine>KEY_KP9</nine>
        <zero>KEY_KP0</zero>
        <star>KEY_KPASTERISK</star>
        <hash>ALT_KEY_KP5</hash>
        <clear>CTRL_KEY_O</clear>
        <teletext>CTRL_KEY_G</teletext>
        <obc1>CTRL_KEY_T</obc1>
        <obc3>CTRL_SHIFT_KEY_M</obc3>
        <obc2>ALT_KEY_F4</obc2>
    </remote>
</lircmap>

Nun noch mit Ctrl+X speichern und den Raspberry Pi ein letztes Mal mit „sudo reboot“ neu starten.

Besonderheiten der Tastenbelegung

Die Fernbedienung ist korrekt belegt, mit ein paar Besonderheiten, auf die ich mal ganz kurz eingehen möchte, da sie sich vielleicht nicht von selbst erschließen. Ich werde jetzt nicht auf die ganze Fernbedienung eingehen, nur auf die Besonderheiten, die sich durch meine Tastenbelegung ergeben.

Ganz oben sind ja zwei einsame Tasten. Die rechte davon ist Power, und schaltet den Raspberry Pi ab, bzw. fährt ihn runter. Die linke taste öffnet ein Abschaltmenü, wo man auch einen Neustart auswählen kann.

Darunter kommen die Farbtasten, von links nach rechts: TV, Audio, Bilder, Video. So kann man schnell in die jeweiligen Bereiche springen.

Darunter kommt eine Reihe, die so belegt ist, dass man von der Beschriftung der Tasten nicht auf deren Funktion schließen kann. Auch wieder von links nach rechts:

  • Löschen: Löscht Aufnahmen im TV-Bereich oder auch Dateien in Videos oder Audios.
  • Extras vorlesen: Wenn ihr auf einem Film steht, der in eurer Datenbank ist, so liest dieser Tastendruck die Filmbeschreibung vor. Im EPG liest es die EPG-Daten vor.
  • Fenster vorlesen: Liest Fenstertitel und evtl. wie viele Elemente in diesem Fenster sind.
  • Ruhe: Unterbricht die Sprachausgabe.

Das Cursor-Kreuz ist ja klar, aber hier mal kurz die Beschreibung der 4 Tasten um das Kreuz herum:

  • Linke obere ecke: Eine ebene Zurück, um z. B. in das darüberliegende Verzeichnis zu wechseln. Bei Texteingaben ist das auch die Rücktaste.
  • Linke untere Ecke: Schließt die Texteingabe ohne zu bestätigen, wechselt ins Hauptmenü oder beendet die Ansicht für Videos oder Audios oder dergleichen. Bei laufender Wiedergabe bringt diese Taste euch in das OSD-Menü.
  • Beide Tasten rechts vom Cursor-Kreuz: Öffnen überall das Kontextmenü, außer im Hauptmenü, dort öffnet es die Favoritenansicht.

Die beiden rechten Tasten senden den gleichen Code, daher konnte ich sie nicht unterschiedlich belegen.

Unter dem Cursor-Kreuz kommt so ein rundes Pad, das ist die Maussteuerung und ist nutzlos, weil auch nicht konfiguriert. Aber darunter wird es noch mal interessant:

Links sind zwei Tasten übereinander, das ist oben laut und unten leise. In der Mitte ist eine kleine Taste, das ist Stumm, und darunter eine querliegende längliche dicke Taste, das ist die Info-Taste. Damit zeigt ihr z. B. die Datenbank-Infos an oder könnt bei laufenden Sendungen oder Audios Details zum gerade abgespielten Track anzeigen. Rechts sind wieder zwei Tasten übereinander, das ist Page up und Page down.

Darunter kommt die Zifferntastatur, damit gibt man auch im SMS-Stil Text ein. In Listen kann man so auch per Anfangsbuchstabe springen.

Ganz unten sind noch zwei Tasten, die von Bedeutung sind: Ganz links unten schaltet den Kodi Screen Reader aus und ein. Die mittlere Taste blendet bei laufendem Video die Benutzeroberfläche ein und aus. Und ganz rechts ist eine zweite Enter-Taste, die sendet auch den gleichen Code wie die OK-Taste in der Mitte des Cursor-Kreuzes.

Fazit

Ich kann und will nicht garantieren, dass meine Konfigurationsbeispiele so bei euch funktionieren oder euren Geschmack treffen. Vor allem ist wirklich viel Aufmerksamkeit bei der Ermittlung der Minor- und Major-Nummern gefragt. Wenn UDEV die Fernbedienung nicht finden kann, funktioniert keines meiner Konfigurationsbeispiele.

Wenn es denn aber mal läuft, braucht ihr euch darum nicht mehr zu kümmern. Bislang laufen drei Kodi-Installationen, die ich mit dieser Fernbedienung eingerichtet habe, seit mehr als 2 Jahren problemlos. Vor allem, wenn man sich an die Belegung mal gewöhnt hat, ist es sehr bequem, alles in einer Hand steuern zu können. Auch wenn die Einrichtung kompliziert ist, es hat sich definitiv gelohnt!