ubuntuusers.de

Kodi Remote

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

./kodi.png Die Einrichtung einer Fernbedienung für Kodi (vormals XBMC alias XBox Media Center) führt immer wieder zu Irritationen. Von funktioniert überhaupt nicht, obskuren Fehlern bis hin zu klappt auf Anhieb ist alles vorhanden. Viele Probleme haben ihre Ursache im mangelnden Wissen über die im Kernel eingebauten Lirc-Funktionen. Seit der Kernelversion 2.6.33 enthalten alle Mainline-Kernel ein Modul ir-core. In diesem Artikel geht es um die Einrichtung von Fernbedienungen für Kodi ohne die Installation von Lirc (und inputlirc).

Neben den Grundfunktionen einer Fernbedienung wie Lautstärke und Pfeiltasten, die ohne Anpassung immer systemweit funktionieren, werden in dieser Anleitung alle anderen Funktionen für Kodi als Tastatur-Events erläutert. Es reicht die Modifikation oder Erstellung einer Konfigurationsdatei. Änderungen in Kodi sind bei dieser Methode nicht erforderlich.

Voraussetzungen

Zuerst muss festgestellt werden, ob der eigene Receiver geeignet ist.

Hinweis:

Wenn Lirc, Eventlirc und Inputlirc nicht installiert ist, reicht es, den Receiver anzuschließen und die Lautstärketasten der Fernbedienung (FB) zu probieren. Lässt sich die Lautstärke steuern, kennt der Kernel den Receiver und die FB. Eine passende Keymap ist im Verzeichnis /lib/udev/rc_keymaps/ vorhanden. Nach der Installation von ir-keytable geht es im Abschnitt Keymap weiter. Eventlirc ist Bestandteil von z.B. YaVDR, der Paketname kann je nach Quelle abweichen. Für einen Test muss es gestoppt werden.

Bei Nutzung der im Kernel eingebauten Lirc-Funktionen entfallen Befehle wie irw. Stattdessen ist das Programm ir-keytable zuständig [1]:

  • ir-keytable (universe)

Paketliste zum Kopieren:

sudo apt-get install ir-keytable 

Oder mit apturl installieren, Link: apt://ir-keytable

Falls Lirc läuft, muss dieses gestoppt werden [2]:

sudo service lirc stop
sudo service inputlirc stop
sudo service eventlircd stop 

Bei der Installation von Lirc werden je nach genutztem Receiver Module durch einen Eintrag in die Blacklist gesperrt. Daher ist zu prüfen, ob Module in der Lirc-Blacklist stehen:

cat /etc/modprobe.d/lirc-blklist.conf 

Wenn in der Ausgabe des Befehls ein Modul erscheint, ist dieses Modul zu laden (häufiger Kandidat ist z.B. ati_remote):

sudo modprobe -v MODUL 

Testen des Receivers:

ir-keytable 

Ausgabebeispiele:

  • LogiLink DVB-T IR Receiver:

    Found /sys/class/rc/rc0/ (/dev/input/event11) with:
    	Driver dvb_usb_rtl28xxu, table rc-empty
    	Supported protocols: NEC RC-5 RC-6 JVC SONY SANYO LIRC 
    	Enabled protocols: NEC RC-5 RC-6 JVC SONY SANYO LIRC
  • X10 Medion OR24E Receivers (gilt auch für baugleiche wie die RF MCE Remote (OR22V)):

    Found /sys/class/rc/rc1/ (/dev/input/event9) with:
    	Driver ati_remote, table rc-medion-x10-or2x
    	Supported protocols: other 
    	Enabled protocols: other

Beide Receiver werden erkannt. Die Bezeichnung hinter table gibt an, ob eine Keymap in /lib/udev/rc_keymaps/ vorhanden ist. In den Beispielen ist das nur für die X10 OR2x der Fall. Für den LogiLink Receiver wird rc-empty angegeben. Es ist keine Keymap vorhanden, eine neue Keymap muss erstellt werden.

Vorbereitung

Diese Schritte entfallen, wenn lirc/inputlirc/eventlirc nicht installiert sind.

  • Lirc und Inputlirc deinstallieren:

    sudo apt-get purge lirc inputlirc 
  • Lirc-Blacklist entfernen, falls vorhanden:

    sudo rm /etc/modprobe.d/lirc-blklist.conf 

Fernbedienung testen

ir-keytable Parameter
Verfügbare Optionen Bedeutung
-c, --clear löscht eine evt. vorhandene Zuordnungs-Tabelle
-p, --protokoll=Protokoll Protokolle, die genutzt werden. Verfügbar: NEC, RC-5, RC-6, JVC, SONY, other
-t, --test Testen der Eingabe-Events
-r, --read Liest die aktive Keymap ein und gibt sie aus
sudo ir-keytable -c -p NEC,RC-5,RC-6,JVC,SONY -t 

Ausgabebeispiele:

  • LogiLink DVB-T Receiver mit einer X4-Tech Fernbedienung:

    1408376196.465580: event type EV_MSC(0x04): scancode = 0x05
    1408376196.465580: event type EV_SYN(0x00).
    1408376200.473560: event type EV_MSC(0x04): scancode = 0x02
    1408376200.473560: event type EV_SYN(0x00).
    1408376205.681561: event type EV_MSC(0x04): scancode = 0x0a
    1408376205.681561: event type EV_SYN(0x00).
  • LogiLink DVB-T Receiver mit einer Dayton DVD Player Fernbedienung:

    1408743753.124909: event type EV_MSC(0x04): scancode = 0x201d
    1408743753.124909: event type EV_SYN(0x00).
    1408743757.532918: event type EV_MSC(0x04): scancode = 0x2011
    1408743757.532918: event type EV_SYN(0x00).
    1408743766.340913: event type EV_MSC(0x04): scancode = 0x205c
    1408743766.340913: event type EV_SYN(0x00).

Wenn die Fernbedienung reagiert, sollte man die Protokolle einzeln testen und nur das funktionierende Protokoll später in die Keymap eintragen.

Mit dem nächsten Befehl kann festgestellt werden, ob es schon eine passende Keymap im System gibt:

ls /lib/udev/rc_keymaps/ 

listet alle vorhanden Keymaps auf. Wenn an Hand des Namen keine offensichtliche Wahl möglich ist, hilft grep und einer der Scancodes aus dem Test weiter:

grep -iH SCANCODE /lib/udev/rc_keymaps/* 

Für SCANCODE die Ausgabe einer Taste aus ir-keytable -t einsetzen. In diesem Beispiel der LogiLink wäre das 0x05.

$ grep -iH '0x05 KEY' /lib/udev/rc_keymaps/* 

/lib/udev/rc_keymaps/apac_viewcomp:0x05 KEY_5
/lib/udev/rc_keymaps/ati_tv_wonder_hd_600:0x05 KEY_REWIND
/lib/udev/rc_keymaps/ati_x10:0x05 KEY_WWW
/lib/udev/rc_keymaps/avermedia_cardbus:0x05 KEY_1
/lib/udev/rc_keymaps/avermedia_rm_ks:0x0501 KEY_POWER2
/lib/udev/rc_keymaps/avermedia_rm_ks:0x0502 KEY_CHANNELUP
/lib/udev/rc_keymaps/avermedia_rm_ks:0x0503 KEY_CHANNELDOWN
/lib/udev/rc_keymaps/avermedia_rm_ks:0x0504 KEY_VOLUMEUP
/lib/udev/rc_keymaps/avermedia_rm_ks:0x0505 KEY_VOLUMEDOWN
/lib/udev/rc_keymaps/avermedia_rm_ks:0x0506 KEY_MUTE
/lib/udev/rc_keymaps/avermedia_rm_ks:0x0507 KEY_RIGHT
/lib/udev/rc_keymaps/avermedia_rm_ks:0x0508 KEY_RED
/lib/udev/rc_keymaps/avermedia_rm_ks:0x0509 KEY_1
/lib/udev/rc_keymaps/avermedia_rm_ks:0x050a KEY_2
/lib/udev/rc_keymaps/avermedia_rm_ks:0x050b KEY_3
/lib/udev/rc_keymaps/avermedia_rm_ks:0x050c KEY_4
/lib/udev/rc_keymaps/avermedia_rm_ks:0x050d KEY_5
/lib/udev/rc_keymaps/avermedia_rm_ks:0x050e KEY_6
/lib/udev/rc_keymaps/avermedia_rm_ks:0x050f KEY_7
/lib/udev/rc_keymaps/avermedia_rm_ks:0x0510 KEY_8
/lib/udev/rc_keymaps/avermedia_rm_ks:0x0511 KEY_9
/lib/udev/rc_keymaps/avermedia_rm_ks:0x0512 KEY_0
/lib/udev/rc_keymaps/avermedia_rm_ks:0x0513 KEY_AUDIO
/lib/udev/rc_keymaps/avermedia_rm_ks:0x0515 KEY_EPG
/lib/udev/rc_keymaps/avermedia_rm_ks:0x0516 KEY_PLAY
/lib/udev/rc_keymaps/avermedia_rm_ks:0x0517 KEY_RECORD
/lib/udev/rc_keymaps/avermedia_rm_ks:0x0518 KEY_STOP
/lib/udev/rc_keymaps/avermedia_rm_ks:0x051c KEY_BACK
/lib/udev/rc_keymaps/avermedia_rm_ks:0x051d KEY_FORWARD
/lib/udev/rc_keymaps/avermedia_rm_ks:0x054d KEY_LEFT
/lib/udev/rc_keymaps/avermedia_rm_ks:0x0556 KEY_ZOOM
/lib/udev/rc_keymaps/behold_columbus:0x05 KEY_5
/lib/udev/rc_keymaps/budget_ci_old:0x05 KEY_5
/lib/udev/rc_keymaps/cinergy:0x05 KEY_5
/lib/udev/rc_keymaps/cinergy_1400:0x05 KEY_4
/lib/udev/rc_keymaps/dib0700_rc5:0x057c KEY_8
/lib/udev/rc_keymaps/dm1105_nec:0x05 KEY_RECORD
/lib/udev/rc_keymaps/dntv_live_dvb_t:0x05 KEY_5
/lib/udev/rc_keymaps/dntv_live_dvbt_pro:0x05 KEY_CHANNELUP
/lib/udev/rc_keymaps/em_terratec:0x05 KEY_1
/lib/udev/rc_keymaps/encore_enltv:0x05 KEY_4
/lib/udev/rc_keymaps/encore_enltv_fm53:0x05 KEY_CAMERA
/lib/udev/rc_keymaps/evga_indtube:0x05 KEY_CHANNELDOWN
/lib/udev/rc_keymaps/eztv:0x05 KEY_1
/lib/udev/rc_keymaps/flydvb:0x05 KEY_3
/lib/udev/rc_keymaps/flyvideo:0x05 KEY_3
/lib/udev/rc_keymaps/fusionhdtv_mce:0x05 KEY_VOLUMEDOWN
/lib/udev/rc_keymaps/gadmei_rm008z:0x05 KEY_6
/lib/udev/rc_keymaps/genius_tvgo_a11mce:0x05 KEY_CAMERA
/lib/udev/rc_keymaps/gotview7135:0x05 KEY_ZOOM
/lib/udev/rc_keymaps/kaiomy:0x05 KEY_5
/lib/udev/rc_keymaps/kworld_pc150u:0x05 KEY_6
/lib/udev/rc_keymaps/kworld_plus_tv_analog:0x05 KEY_6
/lib/udev/rc_keymaps/manli:0x05 KEY_5
/lib/udev/rc_keymaps/medion_x10:0x05 KEY_DIRECTORY
/lib/udev/rc_keymaps/medion_x10_digitainer:0x05 KEY_IMAGES
/lib/udev/rc_keymaps/msi_tvanywhere:0x05 KEY_5
/lib/udev/rc_keymaps/msi_tvanywhere_plus:0x05 KEY_4
/lib/udev/rc_keymaps/nebula:0x05 KEY_5
/lib/udev/rc_keymaps/opera1:0x05fa KEY_9
/lib/udev/rc_keymaps/pctv_sedna:0x05 KEY_5
/lib/udev/rc_keymaps/pinnacle310e:0x05 KEY_CHANNELUP
/lib/udev/rc_keymaps/pixelview:0x05 KEY_4
/lib/udev/rc_keymaps/powercolor_real_angel:0x05 KEY_5
/lib/udev/rc_keymaps/proteus_2309:0x05 KEY_5
/lib/udev/rc_keymaps/purpletv:0x05 KEY_2
/lib/udev/rc_keymaps/pv951:0x05 KEY_5
/lib/udev/rc_keymaps/real_audio_220_32_keys:0x05 KEY_5
/lib/udev/rc_keymaps/snapstream_firefly:0x05 KEY_IMAGES
/lib/udev/rc_keymaps/su3000:0x05 KEY_5
/lib/udev/rc_keymaps/terratec_cinergy_xs:0x05 KEY_4
/lib/udev/rc_keymaps/tevii_nec:0x05 KEY_TUNER
/lib/udev/rc_keymaps/twinhan_vp1027_dvbs:0x05 KEY_CHANNELUP
/lib/udev/rc_keymaps/videomate_k100:0x05 KEY_VOLUMEUP
/lib/udev/rc_keymaps/videomate_s350:0x05 KEY_VIDEO
/lib/udev/rc_keymaps/videomate_tv_pvr:0x05 KEY_VIDEO
/lib/udev/rc_keymaps/winfast:0x05 KEY_1

Die mögliche Auswahl ist damit immer noch (zu) groß. Mit Merken der für den eingesetzten Scancode genutzten Taste, ist es einfach möglich, die Auswahl einzugrenzen. Im Beispiel war das Channelup. Neue Suche mit genaueren Angaben:

$ grep -iH '0x05 KEY_CHANNELUP' /lib/udev/rc_keymaps/* 

/lib/udev/rc_keymaps/dntv_live_dvbt_pro:0x05 KEY_CHANNELUP
/lib/udev/rc_keymaps/pinnacle310e:0x05 KEY_CHANNELUP
/lib/udev/rc_keymaps/twinhan_vp1027_dvbs:0x05 KEY_CHANNELUP

Mit nebeneinander angeordneter Vorlage und Terminal mit laufendem ir-keytable -t kann man jetzt weitere Scancodes der Fernbedienung ausgeben und mit der jeweiligen Vorlage vergleichen. Wird keine passende gefunden, muss eine neue angelegt werden.

Keymap

Hinweis:

Niemals die Originalvorlage ändern! Reine Kommentarzeilen sind in der Keymap nicht erlaubt. Die erste Zeile, als Kommantar gekennzeichnet, muss gültige Werte enthalten. Kommentare hinter den Scancodes sind erlaubt.

Einige der vom System mitgelieferten Keymaps enthalten fehlerhafte Angaben zum Protokoll in der ersten Zeile. In der genutzen Kopie entsprechend ändern.

Aktuell geladenes Mapping ansehen:

sudo ir-keytable -r 

Beispielausgabe, wenn eine Keymap aktiv ist:

scancode 0x0002 = KEY_DOWN (0x6c)
scancode 0x0005 = KEY_UP (0x67)
scancode 0x0009 = KEY_1 (0x02)
scancode 0x000a = KEY_LEFT (0x69)
scancode 0x000c = KEY_M (0x32)
scancode 0x000d = KEY_4 (0x05)
scancode 0x0010 = KEY_PLAY (0xcf)
scancode 0x0011 = KEY_7 (0x08)
scancode 0x0012 = KEY_0 (0x0b)
scancode 0x0014 = KEY_ENTER (0x1c)
scancode 0x0015 = KEY_8 (0x09)
scancode 0x0016 = KEY_MUTE (0x71)
scancode 0x0017 = KEY_9 (0x0a)
scancode 0x0019 = KEY_5 (0x06)
scancode 0x001b = KEY_6 (0x07)
scancode 0x001c = KEY_STOP (0x80)
scancode 0x001d = KEY_2 (0x03)
scancode 0x001e = KEY_RIGHT (0x6a)
scancode 0x001f = KEY_3 (0x04)
scancode 0x0040 = KEY_BACK (0x9e)
scancode 0x004c = KEY_I (0x17)
scancode 0x0054 = KEY_C (0x2e)
Enabled protocols: NEC 

Wenn ir-keytable in der Ausgabe hinter table eine Keymap anzeigt:

sudo cp /lib/udev/rc_keymaps/KEYMAP /etc/rc_keymaps/ 

Eine neue Keymap muss man anlegen, wenn keine passende Keymap im System vorhanden ist. Der Name der Keymap-Datei ist beliebig. Sie kann mit einem Editor mit Root-Rechten [3][4] im Verzeichnis /etc/rc_keymaps angelegt werden.

Die Keymap fängt immer mit einer Kommentarzeile an, die den Namen der Tabelle und das zu nutzende Protokoll enthält. Danach folgen die Zeilen mit jeweils einem Scancode und dem Event der mit diesem Scancode ausgelöst werden soll. Beispiel X4-Tech TV-Karten FB an LogiLink DVB-T:

# table meine_Keymap, type: NEC
0x05 KEY_CHANNELUP
0x02 KEY_CHANNELDOWN
0x0a KEY_VOLUMEDOWN
0x1e KEY_VOLUMEUP
0x14 KEY_ENTER
0x10 KEY_STOP

Geändert für Kodi:

# table meine_Keymap, type: NEC
0x05 KEY_UP
0x02 KEY_DOWN
0x0a KEY_LEFT
0x1e KEY_RIGHT
0x14 KEY_ENTER
0x10 KEY_PLAY

Jede Taste kann beliebig belegt werden. Statt "CHANNELUP" kann auch z.B. "KEY_I" oder "KEY_KPPLUS" eingetragen werden. Die Taste würde damit den gleichen Event wie der Druck von I oder + auf der Tastatur auslösen. Da mit der hier beschriebenen Methode die Fernbedienung Tastatureingaben emuliert, ist es notwendig, einige Codes anzupassen. Beispiel: Aus KEY_INFO wird KEY_I, aus KEY_MENU wird KEY_M. Info in Kodi per Tastatur aufrufen: i, Menü per Tastatur aufrufen: m. Eine Liste möglicher KEYs liefert für 14.04:

cat /usr/include/linux/input.h | grep '#define KEY' 

Für 16.04:

cat /usr/include/linux/input-event-codes.h | grep '#define KEY' 

Hinweis:

Die von ir-keytable unterstützten Protokolle decken fast alle Fernbedienungen ab, die derzeit auf dem Markt sind. Der im LogiLink VG0002A DVB-T Stick eingebaute IR-Receiver versteht alle Protokolle. Erfolgreich getestete Fernbedienungen an diesem Stick: Haier TV FB, Terratec FB, x4-Tech FB, Samsung TV FB, Sony DVD Player FB und einige mehr. Es ändern sich jeweils die Scancodes. Was alles unterstützt wird, hängt nur von den Fähigkeiten des Receivers ab.

Ist die Keymap zumindest mit Grundfunktionen fertig, kann getestet werden. Es bietet sich für den Test an, Kodi im Fenstermodus ( Alt Gr + ß ) neben dem Editor mit der Keymap und einem Terminal zu legen. Aktivieren der Keymap:

sudo ir-keytable -c -w /etc/rc_keymaps/meine_keymap 

Jetzt sollte die Fernbedienung mit allen definierten Tasten in Kodi funktionieren. Nach Ändern einer Zuordnung oder Hinzufügen neuer KEYs im Terminal den Aktivierungsbefehl erneut aufrufen. Die Änderungen können sofort in Kodi getestet werden.

Damit das Mapping einen Neustart des Rechners überlebt, den Befehl ohne sudo in /etc/rc.local vor exit 0 eintragen:

ir-keytable -c -w /etc/rc_keymaps/meine_keymap 

Problembehebung

Das System verfügt über mehr als ein Receiver oder auf Grund anderer Eingabegeräte verändert sich der Event des Recievers. In diesen Fällen ir-keytable mit --device oder --sysdev aufrufen:

  • sudo ir-keytable  --device /dev/input/eventX -c -w /etc/rc_keymaps/meine_keymap 

    X ersetzen mit der entsprechenden Event-Nummer oder

  • sudo ir-keytable  --sysdev rcX -c -w /etc/rc_keymaps/meine_keymap 

    X ersetzen mit der entsprechenden rc Nummer aus /sys/class/rc

Sogenannte "ghost repeat events" in Verbindung mit einem USB-Receiver können durch Verwendung eines anderen USB-Ports an einem anderem USB-Controller behoben werden (sprich: man probiert eine andere USB-Buchse aus).

Diese Revision wurde am 30. April 2019 20:18 von Beforge erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Remote, Kodi, XBMC, Hardware, Multimedia