PC Remote Controlling
Allgemeines
Auch wenn LIRC in den letzten Jahren deutlich an Bedeutung verloren hat, ist in vielen/allen Dokumentation zu RC (Tastaturen und Maeuse zaehle ich auch dazu) LIRC immer noch ein Bestandteil. Der Stellenwert und die Rolle wird weiter unten deutlich. Wichtig ist zu bemerken, dass bei der Recherche Versionsstaende des Kernels, von LIRC und das Veroeffentlichungsdatum der Informationen von groszer Bedeutung sind.
Nimmt man sich diesen [1] als Beispiel, zeigt er schoen wie man es damals gemacht haette. Heute kann man es zwar immer noch so machen, aber es gibt mindestens eine (bessere) Alternative.
Quaestio Cardinalis
HID oder nicht HID ist hier die Frage, die man zum Einstieg klaeren muss.
Der Empfaenger der Fernbedienung entscheidet darueber, ob man den HID-Weg, LIRC-Weg oder ganz wo anderes entlang geht.
Deutlich wird dieses durch folgendes Diagramm.
HID
HID ist ein USB-Geraeteklasse-Standard (ab ca. 1996 spezifiziert durch die USB-IF). Er definiert Report Descriptors, Usage Pages und Usage IDs, die direkt im USB-Protokoll übertragen werden.
HID im eigentlichen Sinn gilt nur für USB (und mittlerweile auch Bluetooth), nicht fuer z.B. klassische Gameports oder serielle Schnittstellen.
Im Diagramm koennte man also noch einen Weg "RC -> Receiver-> Legacy to HID Converter -> HID" ergaenzen. Bei Github findet man eine Unmenge von "Legacy-HID-Convertern" DIYs.
Der HID-(Um-)weg bietet viele Vorteile. Die individuelle Anpassung/Hardware kann aber auch den LIRC-Weg interessant machen.
Das Standardprotokoll (USB HID) beschreibt, wie Eingabegeraete wie Tastaturen, Maeuse, Gamepads, Joysticks oder Fernbedienungen mit dem Betriebssystem kommunizieren.
Der große Vorteil:
Dabei beschreibt ein Geraet selbst, welche Eingabeelemente es hat.
Betriebssysteme wie Windows, Linux oder macOS brauchen fuer Standardgeräte keine zusaetzlichen Treiber mehr.
Wie sich dem Flussdiagramm entnehmen laesst landen im besten Fall alle FRC-Aktivitaeten in einem Event-Device.
HID Tools
Um in HID einzusteigen ist dieses Dokument sehr hilfreich.
Ab hier ist es derzeit nur eine ungeordnete Liste von Befehlen, die ich zur Analyse benutzt habe.
grep -B5 -A5 -i "keyboard" /proc/bus/input/devices
sudo setkeycodes scancode keycode xmodmap -e "keycode 66 = Escape" setxkbmap -option caps:escape
evtest
sudo evtest /dev/input/eventX
systemd-hwdb
systemd-hwdb query 'evdev:b0003v046DpC534*'
uvadm
udevadm info -q path -n /dev/input/event7
hidviz
hwdb
/usr/lib/udev/hwdb.d
Liste aller Artikel zum Thema LIRC
...
Einordnung von LIRC
Die Abloesung von LIRC kam nicht schlagartig, sondern schrittweise, und es haengt sowohl von der Linux-Kernel-Version als auch vom LIRC-Subsystem ab.
📜 Hintergrund
- Früher (bis ca. 2009) mussten fast alle Infrarot-Fernbedienungen unter Linux über LIRC mit eigenen Userspace-Treibern angesprochen werden.
- Ab Kernel 2.6.36 (veröffentlicht Oktober 2010) begann die Integration von Infrarot-Treibern direkt ins Kernel-Input-Subsystem (
rc-core
+ir-keytable
). - Ziel: Die Fernbedienung soll wie eine Tastatur funktionieren (Keycodes werden direkt über das
/dev/input/eventX
-Interface geliefert). - Damit wurde LIRC von der Rolle eines Hardwaretreibers zu einer reinen Applikations-Schnittstelle für exotische Protokolle oder komplexe Konfigurationen.
📌 Wichtige Meilensteine
Kernel-Version | Datum | Änderung |
---|---|---|
2.6.36 | Okt 2010 | Einführung von rc-core und ir-keytable , erste Kernel-Treiber für IR-Geräte
|
2.6.38 | März 2011 | Mehr IR-Protokolle direkt im Kernel, Standard-Keymaps im Kernel-Tree |
3.0 | Juli 2011 | Viele DVB-T/S2-Sticks mit integrierten IR-Empfängern vollständig Kernel-seitig |
3.7 | Dez 2012 | LIRC-Kompatibilität über /dev/lircX aus Kernel heraus unterstützt
|
4.x | 2015–2017 | LIRC wird komplett über rc-core + input angebunden, Userspace-Treiber praktisch obsolet
|
ab 5.x | 2019+ | Nahezu alle gängigen IR-Geräte mit Kernel-Treibern; LIRC nur noch für Spezialprotokolle nötig |
🔍 Fazit
- Seit Kernel 2.6.36 (Okt 2010) hat der Linux-Kernel begonnen, LIRC-Hardwaretreiber schrittweise zu ersetzen.
- Seit ca. 2015 (Kernel 4.0) brauchen 90 % der gängigen IR-Fernbedienungen keinen LIRC-Treiber mehr – nur noch
ir-keytable
für Keymap-Anpassungen. - Heute (Kernel 5.x/6.x) wird LIRC fast nur noch als Konfigurations- und Signal-Decoder für exotische Hardware eingesetzt.
Der Linux-Kernel ersetzt LIRC‑Hardwaretreiber schrittweise durch eigene Kernel‑Input‑Treiber (rc‑core + ir‑keytable). Das erfolgt etappenweise und ist Hardware-spezifisch.
Eine gute Quelle zum Thema RC PC sind die Distributionen verschiedener Mediacenter, z. B. easyVDR und LinHES
Architektur
Hier eine Grafik, die die Architektur der Funktions-Bloecke verdeutlicht.
Kernel-basierte Unterstuetzung von IR-Fernbedienungen
Grundlagen (rc-core / ir-keytable)
Der Linux‑Kernel bringt seit Version 2.6.36 (Okt 2010) grundlegende Unterstuetzung für IR‑Empfänger mit. Dies erlaubt, dass Fernbedienungen über das Input-System (/dev/input/eventX) erkannt werden – quasi wie Tastaturtasten (Kernel.org).
Treibertypen
Es gibt zwei Haupttreibertypen innerhalb des rc-core
:
- RC_DRIVER_SCANCODE: Hardware dekodiert Puls/Zeit und liefert direkt Keycodes.
- RC_DRIVER_IR_RAW: Hardware liefert Puls-/Space‑Signale, Kernel dekodiert in Scan-Codes.
- (Optional für Sender): RC_DRIVER_IR_RAW_TX für IR-TX‑Geräte (Linux Kernel Documentation).
Übergang von LIRC zu Kernel-Input
Zeitraum | Zustand / Entwicklung |
---|---|
Kernel ≤ 2.6.36 | Meist LIRC erforderlich für IR‑Unterstützung |
2.6.36–3.x | Beginn der Integration (rc-core , ir-keytable ) (Kernel.org, Wikipedia)
|
Kernel 3.x → 4.x | Mehr Hardware erhält Kernel-Treiber; LIRC nur noch für spezifische Aufgaben nötig |
Ab Kernel 5.x | Fast alle gängigen IR-Geräte werden kernel-seitig unterstützt; LIRC nur noch für Spezialfälle/Bastelaufgaben (Yet Another Boring Developer’s Blog, lirc.org) |
Wann ist LIRC heute noch sinnvoll?
LIRC bleibt nuetzlich wenn:
- Es keine Kernel‑Unterstützung für den Empfänger gibt.
- Du spezielle Funktionalität brauchst (z. B. IR „blasten“, Skript-Automatismen mit
irexec
, erweiterte Modussteuerung). - Du spezielle Anwendungshardware hast, die abseits gängiger Protokolle arbeitet (lirc.org).
Summary – Meilenstein-Timeline
- Kernel 2.6.36 (Okt 2010): Start der Kernel-seitigen IR-Unterstützung (
rc-core
,ir-keytable
). - Kernel 3.x → 4.x: Breite Treiberintegration, LIRC wird optional.
- Kernel ≥ 5.x: Kernel deckt fast alle IR-Hardware ab; LIRC nur noch für Spezialfälle relevant.
Hier ist eine praktische Übersicht – welche gängigen IR‑Empfänger vom Linux‑Kernel (rc‑core + ir‑keytable) unterstützt werden, also ohne LIRC-Hardwaretreiber laufen:
Kernel-unterstütze IR-Empfänger (ohne LIRC)
Der Kernel liefert für viele IR-Empfänger eigene Treiber – unterstützt werden besonders:
- MCE-kompatible Empfänger → Treiber:
mceusb
(ab Kernel 2.6.38) (Kodi Community Forum, LibreELEC Forum) - iMON-Empfänger → Kernel-Treiber seit 2.6.35 (Kodi Community Forum)
- **SuperIO- und Motherboard-integrierte IR-Geräte** → Nuvoton CIR (w83667hg), Winbond Super I/O, ENE KB3926, Streamzap, ITE IT8712F / IT8512 → im Kernel ab Version 2.6.39 (Kodi Community Forum, wiki.libreelec.tv)
- Fintek‑LPC SuperIO IR‑Transceiver → seit Kernel 3.0 (Kodi Community Forum)
Zusammenfassung
Empfängertyp | Kernel-Treiber | Eingeführt ab Version |
---|---|---|
MCE-kompatible DVB / USB-Sticks | mceusb
|
Kernel 2.6.38 |
iMON-Empfänger | iMON-Treiber | Kernel 2.6.35 |
SuperIO & integrierte IR-Geräte | diverse (Nuvoton, Winbond, etc.) | Kernel 2.6.39 |
Fintek LPC SuperIO IR-Transceiver | Fintek LPC Treiber | Kernel 3.0 |
Was tun, wenn dein Gerät hier fehlt?
ir-keytable
einsetzen: Prüfe, ob dein Empfänger erkannt wird(siehe z. B.ir-keytable -t
)- Keymap finden/setzen: Nutze
/lib/udev/rc_keymaps/
, oder lege eine eigene Datei an (Arch Linux Forums, Yet Another Boring Developer’s Blog, Kodi Community Forum) - LIRC nur im Ausnahmefall verwenden – wenn dein Gerät keine Kernelunterstützung hat oder du komplexe Konfiguration/Javascript benötigst.
Lirc-Serial
Ich kann noch nicht ganz abschaetzen, ob der Serial-Treiber im Kernel, dem Lirc-Serial-Treiber gleichwertig ist.
Ich habe nach einer langen Probierphase diesen Adapter, als den zweckmaeszigsten ausgemacht.
Hier der Schaltplan im Original.
PCB TODO
Ein Test mit dem Kerneltreiber steht noch aus.