ir-keytable
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Hinweis:
Unter Ubuntu 20.04 ist die Nutzung aller Protokolle, die im System enthalten sind, nicht möglich. Daher funktioniert diese Anleitung unter 20.04 nur in Verbindung mit dem Protokoll "other" das in der Regel von Funkfernbedienungen genutzt wird.
In diesem Artikel geht es um die Einrichtung von Fernbedienungen mit Hilfe von ir-keytable ohne die Installation von Lirc und inputlirc.
Neben den Grundfunktionen einer Fernbedienung wie Lautstärke und Pfeiltasten, die ohne Anpassung immer systemweit funktionieren, wird in dieser Anleitung erläutert wie mit Hilfe von ir-keytable und einer Konfigurationsdatei Tasten der Fernbedienung in Tastaurbefehle umgesetzt werden. Es reicht die Modifikation oder Erstellung einer Konfigurationsdatei.
Voraussetzungen¶
Damit alle Tasten der Fernbedienung funktionieren muss der Benutzer der Gruppe input
angehören:
sudo usermod -aG input BENUTZERNAME
Vor der weiteren Einrichtung das System neu starten damit die neue Gruppen Zugehörigkeit aktiv wird.
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)
Befehl zum Installieren der Pakete:
sudo apt-get install ir-keytable
Oder mit apturl installieren, Link: apt://ir-keytable
Wer ir-keytable nur testen möchte ohne eine eventuell. vorhandene Lirc Einrichtung zu ändern, muss zum Testen lirc stoppen [2]:
sudo systemctl stop eventlircd sudo systemctl stop lircd
Wer ir-keytable dauerhaft nutzen möchte, deinstalliert lirc:
sudo apt purge lirc inputlirc
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 diese Datei existiert und Module enthält, diese Module temporär laden wenn nur getestet werden soll:
sudo modprobe -v MODUL
Bei dauerhafter Nutzung wird die Blacklist entfernt:
sudo rm /etc/modprobe.d/lirc-blklist.conf
Testen des Receivers:
ir-keytable
Ausgabebeispiel:
X10 Medion OR24E Receivers (gilt auch für baugleiche wie die RF MCE Remote (OR22V)):
ir-keytable
/sys/class/rc/rc0/ gefunden mit: Name: X10 WTI RF receiver Treiber: ati_remote Standardschlüsselcodeabbildung: rc-medion-x10-or2x Eingabegerät: /dev/input/event11 LIRC Gerät: /dev/lirc0 Angehangene BPF-Protokolle: Keine Berechtigung Unterstützte Kernel-Protokolle: other Kernelprotokolle aktivieren: other bus: 3, Anbieter/Produkt: 0bc7:0006, Version: 0x0100 Wiederholungsverzögerung = 500 ms, Wiederholungsperiode = 125 ms
Der Receiver wird erkannt. Die Bezeichnung hinter Standardschlüsselcodeabbildung
gibt an, ob eine Keymap in /lib/udev/rc_keymaps/ vorhanden ist. Ist die Ausgabe rc-empty
, ist keine Keymap vorhanden, eine neue Keymap muss erstellt werden.
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ügbare Protokolle des Kernels: nec, rc-5, rc-6, jvc, sony, sanyo, rc-5-sz, sharp, mce-kbd, xmp, imon, rc-mm, other, all. Wird die FB durch keins der Protokolle unterstützt, werden danach BPF Protokolle aus dem System geladen: grundig, imon_rsc, manchester, pulse_distance, pulse_length, raw, xbox-dvd |
-t, --test | Testen der Eingabe-Events |
-r, --read | Liest die aktive Keymap ein und gibt sie aus |
Start des Ausgabe Test. Als Protokoll die Angabe hinter Unterstützte Kernel-Protokolle: angeben. Im Fall der X10: other
sudo ir-keytable -c -p other -t
Hinweis:
Startet man den Test mit -p
all, testet ir-keytable alle vorhandenen Protokolle und listet alle Protokolle die eventuell im System nicht vorhanden sind.
Ausgabebeispiel X10:
RF MCE Remote Controll X10:
Ereignisse werden getestet. Bitte drücken Sie STRG-C, um abzubrechen. 20495.413718: Lirc Protokoll(other): scancode = 0x25 umschalten=1 20495.413750: Ereignistyp EV_MSC(0x04): Scancode = 0x25 20495.413750: Ereignistyp EV_SYN(0x00). 20496.141707: Lirc Protokoll(other): scancode = 0x24 umschalten=1 20496.141736: Ereignistyp EV_MSC(0x04): Scancode = 0x24 20496.141736: Ereignistyp EV_SYN(0x00). 20496.877700: Lirc Protokoll(other): scancode = 0x26 umschalten=1 20496.877725: Ereignistyp EV_MSC(0x04): Scancode = 0x26 20496.877725: Ereignistyp EV_SYN(0x00). 20503.989638: Lirc Protokoll(other): scancode = 0xf umschalten=1 20503.989675: Ereignistyp EV_MSC(0x04): Scancode = 0x0f 20503.989675: Ereignistyp EV_SYN(0x00).
Wenn die Ausgabe aus ir-keytable hinter Standardschlüsselcodeabbildung: keine Keymap angegeben hat, kann man in den vorhandenen Keymaps eine möglichst passende suchen und anpassen.
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/*.toml
Für SCANCODE
die Ausgabe einer Taste aus ir-keytable -t
einsetzen. Aus dem Beispiel der X10 z.B.: 0x25
.
grep -iH '0x25 =' /lib/udev/rc_keymaps/*.toml
/lib/udev/rc_keymaps/ati_x10.toml:0x25 = "KEY_PLAY" /lib/udev/rc_keymaps/budget_ci_old.toml:0x25 = "KEY_OK" /lib/udev/rc_keymaps/cec.toml:0x25 = "KEY_NUMERIC_5" /lib/udev/rc_keymaps/medion_x10_digitainer.toml:0x25 = "KEY_PLAY" /lib/udev/rc_keymaps/medion_x10_or2x.toml:0x25 = "KEY_PLAY" /lib/udev/rc_keymaps/medion_x10.toml:0x25 = "KEY_PLAY" /lib/udev/rc_keymaps/norwood.toml:0x25 = "KEY_NUMERIC_5" /lib/udev/rc_keymaps/pinnacle_grey.toml:0x25 = "KEY_INFO" /lib/udev/rc_keymaps/powercolor_real_angel.toml:0x25 = "KEY_POWER" /lib/udev/rc_keymaps/snapstream_firefly.toml:0x25 = "KEY_PLAY" /lib/udev/rc_keymaps/su3000.toml:0x25 = "KEY_POWER" /lib/udev/rc_keymaps/terratec_cinergy_c_pci.toml:0x25 = "KEY_BLUE" /lib/udev/rc_keymaps/terratec_cinergy_s2_hd.toml:0x25 = "KEY_BLUE" /lib/udev/rc_keymaps/twinhan_dtv_cab_ci.toml:0x25 = "KEY_STOP" /lib/udev/rc_keymaps/videomate_k100.toml:0x25 = "KEY_NUMERIC_8" /lib/udev/rc_keymaps/videomate_s350.toml:0x25 = "KEY_LAST" /lib/udev/rc_keymaps/winfast.toml:0x25 = "KEY_TIME"
Falls die Auswahl zu unübersichtlich ist, lässt sich die Suche weiter eingrenzen. Im Beispiel der X10 wurde für den Scancode 0x25 die Taste PLAY gedrückt. Neue Suche mit genaueren Angaben:
grep -iH '0x25 = "KEY_PLAY"' /lib/udev/rc_keymaps/*.toml
/lib/udev/rc_keymaps/ati_x10.toml:0x25 = "KEY_PLAY" /lib/udev/rc_keymaps/medion_x10_digitainer.toml:0x25 = "KEY_PLAY" /lib/udev/rc_keymaps/medion_x10_or2x.toml:0x25 = "KEY_PLAY" /lib/udev/rc_keymaps/medion_x10.toml:0x25 = "KEY_PLAY" /lib/udev/rc_keymaps/snapstream_firefly.toml:0x25 = "KEY_PLAY"
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. Die Keymap, die den geforderten Scancodes am nächsten kommt wird für die weitere Anpassung genommen.
Keymap¶
Hinweis:
Niemals die Originalvorlage ändern! Reine Kommentarzeilen sind in der Keymap nicht erlaubt. Kommentare hinter den Scancodes sind erlaubt.
Aktuell geladenes Mapping ansehen:
sudo ir-keytable -r
Beispielausgabe, wenn eine Keymap aktiv ist:
ir-keytable -r
Scancode 0x0000 = KEY_MUTE (0x71) Scancode 0x0002 = KEY_POWER (0x74) Scancode 0x0004 = KEY_DVD (0x185) Scancode 0x0008 = KEY_VOLUMEDOWN (0x72) Scancode 0x0009 = KEY_VOLUMEUP (0x73) Scancode 0x000b = KEY_CHANNELUP (0x192) Scancode 0x000c = KEY_CHANNELDOWN (0x193) Scancode 0x000d = KEY_1 (0x02) Scancode 0x000e = KEY_2 (0x03) Scancode 0x000f = KEY_3 (0x04) Scancode 0x0010 = KEY_4 (0x05) Scancode 0x0011 = KEY_5 (0x06) Scancode 0x0012 = KEY_6 (0x07) Scancode 0x0013 = KEY_7 (0x08) Scancode 0x0014 = KEY_8 (0x09) Scancode 0x0015 = KEY_9 (0x0a) Scancode 0x0016 = KEY_TEXT (0x184) Scancode 0x0017 = KEY_0 (0x0b) Scancode 0x0018 = KEY_PVR (0x16e) Scancode 0x001a = KEY_UP (0x67) Scancode 0x001b = KEY_MEDIA (0xe2) Scancode 0x001c = KEY_TV (0x179) Scancode 0x001d = KEY_LEFT (0x69) Scancode 0x001e = KEY_ENTER (0x1c) Scancode 0x001f = KEY_RIGHT (0x6a) Scancode 0x0020 = KEY_BACK (0x9e) Scancode 0x0021 = KEY_P (0x19) Scancode 0x0022 = KEY_DOWN (0x6c) Scancode 0x0023 = KEY_N (0x31) Scancode 0x0024 = KEY_REWIND (0xa8) Scancode 0x0025 = KEY_SPACE (0x39) Scancode 0x0026 = KEY_FORWARD (0x9f) Scancode 0x0027 = KEY_RECORD (0xa7) Scancode 0x0028 = KEY_S (0x1f) Scancode 0x0029 = KEY_SPACE (0x39) Scancode 0x002f = KEY_INFO (0x166) Scancode 0x0030 = KEY_CLEAR (0x163) Scancode 0x0031 = KEY_EPG (0x16d) Scancode 0x0032 = KEY_RED (0x18e) Scancode 0x0033 = KEY_GREEN (0x18f) Scancode 0x0034 = KEY_YELLOW (0x190) Scancode 0x0035 = KEY_BLUE (0x191) Scancode 0x0036 = KEY_ENTER (0x1c) Scancode 0x0037 = KEY_NUMERIC_STAR (0x20a) Scancode 0x0038 = KEY_NUMERIC_POUND (0x20b) Kernelprotokolle aktivieren: other
Wenn ir-keytable in der Ausgabe hinter Standardschlüsselcodeabbildung
eine Keymap anzeigt:
sudo cp /lib/udev/rc_keymaps/KEYMAP /etc/rc_keymaps/
Wenn keine passende Keymap gefunden wurde, wird eine beliebige Keymap kopiert die dann angepasst werden muss.
Aufbau einer Keymap:
[[protocols]] name = "medion_x10_or2x" protocol = "other" [protocols.scancodes] 0x02 = "KEY_POWER" 0x16 = "KEY_TEXT" 0x09 = "KEY_VOLUMEUP" 0x08 = "KEY_VOLUMEDOWN" 0x00 = "KEY_MUTE" 0x0b = "KEY_CHANNELUP" 0x0c = "KEY_CHANNELDOWN" 0x32 = "KEY_RED" 0x33 = "KEY_GREEN" 0x34 = "KEY_YELLOW" 0x35 = "KEY_BLUE" 0x18 = "KEY_PVR" 0x04 = "KEY_DVD" 0x31 = "KEY_EPG" 0x1c = "KEY_TV" 0x20 = "KEY_BACK" 0x2f = "KEY_INFO" 0x1a = "KEY_UP" 0x22 = "KEY_DOWN" 0x1d = "KEY_LEFT" 0x1f = "KEY_RIGHT" 0x1e = "KEY_OK" 0x1b = "KEY_MEDIA" 0x21 = "KEY_PREVIOUS" 0x23 = "KEY_NEXT" 0x24 = "KEY_REWIND" 0x26 = "KEY_FORWARD" 0x25 = "KEY_PLAY" 0x28 = "KEY_STOP" 0x29 = "KEY_PAUSE" 0x27 = "KEY_RECORD"
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 für VLC: Aus KEY_PREVIOUS wird KEY_P (Playlist vorheriger), aus KEY_NEXT wird KEY_N (Playlist nächster). KBeispiel Kodi: Aus KEY_INFO wird KEY_I (Information). aus KEY_MENU wird KEY_M (Menü) u.s.w. Jedes Programm das per Tastatur bedienbar ist, lässt sich so per Fernbedienung steuern. Eine Liste möglicher KEYs liefert für 20.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. Erfolgreich getestete Fernbedienungen an einem alten DVB-T 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 das zu steuernde Programm, die Keymap in einem Editor mit root Rechten und ein Terminal nebeneinander zu öffnen. Aktivieren der Keymap:
sudo ir-keytable -c -w /etc/rc_keymaps/meine_keymap
Jetzt sollte die Fernbedienung mit allen definierten Tasten funktionieren. Nach Ändern einer Zuordnung oder Hinzufügen neuer KEYs im Terminal den Aktivierungsbefehl erneut aufrufen. Die Änderungen können sofort getestet werden.
Die zuletzt per ir-keytable ausgewählte Keymap wird automatisch beim nächsten Neustart aktiviert.
Links¶