Skip to content
seahawk1986 edited this page May 29, 2019 · 4 revisions

Was ist Eventlircd?

Eventlircd ist ein Dienst, der Tastendrücke (Events) von Kernel Input Devices (also den Geräteknoten, die in /dev/input/ angelegt werden) lesen und auf einem Lirc-kompatiblen Sockel ausgeben kann. Im Gegensatz zu inputlircd, das statisch konfiguriert wird, kann eventlircd mit Hilfe von udev dynamisch neue Geräte hinzufügen.

Bei yaVDR wird eventlircd genutzt, um die Tastendrücke von nativen Kernel Input Devices, Lirc und anderen Diensten, die Tastendrücke von Fernbedienungen weiterreichen, zu bündeln und für den VDR bereitzustellen (der Tastendrücke nur von einem Lirc-kompatiblen Sockel lesen kann).

Konfiguration

Eventlircd bindet Kernel Input Devices automatisch ein, wenn sie das Attribut ENV{eventlircd_enable}="true" besitzen. Zusätzlich kann über das Attribut ENV{eventlircd_evmap}=receiver.evmap eine evmap gesetzt werden, die die Tastennamen in den für yaVDR vorgesehenen Namespace übersetzt. Die evmaps werden im Ordner /etc/eventlircd.d/ erwartet. Eventlircd startet nicht, wenn eine angegebene evmap nicht vorhanden ist.

Mit evmaps können Tastennamen ersetzt und Tastenkombinationen zu einem einzelnen Tastendruck geändert werden (was für MCE-kompatible HID-Empfänger oft nötig ist):

# Ändere KEY_ENTER in KEY_OK
KEY_ENTER = KEY_OK
# Fasse Tastenkombinationen zu einer Taste zusammen
ctrl+shift+KEY_F5 = KEY_VIDEO

FAQ

eventlircd startet nicht, wie kann ich auf Fehlersuche gehen?

Um möglichst viele Informationen darüber zu erhalten, was beim Startversuch passiert, kann man eventlircd von Hand mit detaillierter Debug-Ausgabe starten lassen:

sudo eventlircd -vvv -f --socket=/var/run/lirc/lirc

Wie kann ich eventlircd vorübergehend deaktivieren?

eventlircd öffnet die Eingabegeräte exklusiv, d.h. andere Anwendungen haben keinen Zugriff auf die eingebundenen Geräteknoten. Will man das ändern (z.B. um eine Fernbedienung anzulernen), kann man die Units eventlircd.service und eventlircd.socket bis zum nächsten Neustart stoppen und maskieren lassen:

systemctl mask --runtime --now eventlircd.{socket,service}

Warum ignoriert der X-Server Tastendrücke von für die Nutzung mit eventlircd konfigurierten Empfängern (yaVDR >= 0.7)?

Damit eventlircd und der X-Server nicht in einer festgelegten Reihenfolge gestartet werden müssen (beide würden versuchen die Eingabegeräte an sich zu binden), ist der X-Server so konfiguriert, dass er für eventlircd konfigurierte Empfänger ignoriert. Dazu ist in der xorg-Konfiguration diese Regel gesetzt:

Section "InputClass"
    Identifier "exclude eventlircd devices"
    MatchTag   "eventlircd"
    Option     "Ignore"    "True"
EndSection

Der Tag "eventlircd" wird in den udev-Regeln für die eventlircd-Empfänger wird über das Attribut ENV{ID_INPUT.tags} gesetzt:

# set xorg tag for eventlircd receivers
ENV{eventlircd_enable}=="true", ENV{ID_INPUT.tags}+="eventlircd"