ubuntuusers.de

Lirc

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

Dieser Artikel ist mit keiner aktuell unterstützten Ubuntu-Version getestet! Bitte teste diesen Artikel für eine Ubuntu-Version, welche aktuell unterstützt wird. Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

./LIRC.png

Mit LIRC (Linux Infrared Remote Control) ist es möglich, das Linux-System mit einer Fernbedienung zu steuern. Dazu sind ein Infrarot-Empfänger am PC und eine handelsübliche Fernbedienung nötig. Auch wenn der Name es nicht vermuten lässt: Auch Funkfernsteuerungen werden unterstützt. Weitere Informationen zu LIRC sind auf der offiziellen LIRC-Homepage 🇬🇧 und in den Links am Ende dieses Artikels zu finden.

Installation

LIRC kann direkt aus den Paketquellen installiert[1] werden:

  • lirc (universe)

  • lirc-x (universe, optional )

  • liblircclient0 (universe, optional, um bestimmte Programme steuern zu können)

  • inputlirc (universe, optional, liest automatisch die Eingaben aller /dev/input/eventX-Geräte aus; etliche Geräte funktionieren damit "Out-of-the-Box".)

Befehl zum Installieren der Pakete:

sudo apt-get install lirc lirc-x liblircclient0 inputlirc 

Oder mit apturl installieren, Link: apt://lirc,lirc-x,liblircclient0,inputlirc

Bei der Installation von lirc wird abgefragt, welche Fernbedienung und welcher Sender (Transmitter) verwendet werden sollen. Die Angabe des Transmitters ist allerdings nur in dem seltenen Falle notwendig, wenn via Computer ein weiteres Gerät (Stereo-Anlage, CD-Player etc.) gesteuert werden soll. Falls die eigene Fernbedienung/Sender nicht aufgeführt sind, dort None auswählen; z.B. auch dann, wenn inputlirc zum Einsatz kommen soll.

Falls falsche Eingaben gemacht wurden, kann die ganze Prozedur im Terminal[2] mit

sudo dpkg-reconfigure lirc 

erneut durchgeführt werden.

Ggf. kann für die Fernbedienung (z.B. für etliche Fernbedienungen, die zu USB-Sticks gehören) auch der Eintrag Linux Input Layer (dev/input/eventX) verwendet werden. Im nächstfolgenden Dialog dann das verwendete Gerät (Device) eintragen (unter neueren Lirc-Versionen auch direkt auswählbar). Dieses kann mit dem Befehl

cat /proc/bus/input/devices 

in Erfahrung gebracht werden, aus dem Eintrag geht das verwendete Gerät hervor, z.B.

I: Bus=0003 Vendor=0000 Product=0000 Version=0000
N: Name="em2880/em2870 remote control"
P: Phys=USB
S: Sysfs=/devices/virtual/input/input6
U: Uniq=
H: Handlers=kbd event6 
B: EV=100003
B: KEY=4afc334 0000000 0 0 0 0 0000 1a0 c0000801 9e96c0 0 0 ffd

In diesem Falle müsste, ersichtlich aus Zeile H: Handlers=kbd event6, als Gerät /dev/input/event6 ausgewählt werden.

Einrichten von LIRC und der Fernbedienung

Um LIRC einzurichten gibt es zwei Möglichkeiten (funktionieren nicht gleichzeitig; entweder inputlirc oder die (manuelle) Einrichtung):

Wichtig: Bei Verwendung der manuellen Einrichtung sollte zunächst inputlirc deinstalliert werden, da die manuelle Konfiguration ansonsten von der automatischen Einrichtung durch inputlirc bei jedem Neustart des Systems überschrieben wird.

Verwenden von 'inputlirc'

inputlirc liest standardmäßig alle Impulse aller /dev/input/event*-Geräte aus. Dabei wird auf die Tastenbelegung zurückgegriffen, die auch der Kernel verwendet (definiert in /usr/include/linux/input.h). Damit erübrigt sich für viele USB-Fernbedienungen und sogenannte HID-Geräte (Human Interface Devices, z.B. Fernbedienungen mit integriertem Joystick oder Trackball etc.) eine aufwändige LIRC-Konfiguration, da die Impulse ohne weitere Arbeiten erkannt werden. Weder in der hardware.conf noch in der lircd.conf brauchen spezielle Angaben gemacht zu werden (bei der Installation von LIRC einfach überall "None" angeben; das Paket lirc selbst wird allerdings gebraucht, schon um z.B. irexec oder irw verwenden zu können). Der LIRC-daemon (lircd) wird nicht benötigt; ggf. darauf achten, dass in der hardware.conf die Werte für START_LIRCD="" auf false gesetzt sind. Der inputlirc-Daemon inputlircd wird automatisch beim Systemstart ausgeführt.

Funktionstest für inputlirc

Bei einem Test sollte für die Tasten bei der Verwendung von irw im Terminal z.B.

66 0 KEY_HOME event6
8b 0 KEY_MENU event6
2 0 KEY_1 event6

ausgegeben werden; die Tastennamen (die dritte Variable der Ausgabe, also z.B. KEY_HOME] können dann in einer .lircrc verwendet werden.

Falls gar keine Ausgabe erfolgt, oder falls es Probleme gibt, die Nummerntasten zu verwenden (nur für diese keine Ausgabe bei irw) hilft es, in einem Editor[3] mit Rootrechten in der /etc/default/inputlirc-Datei folgende Optionen festzulegen:

1
2
3
# Options to be passed to inputlirc.
EVENTS="/dev/input/event*"
OPTIONS="-g -m 0"

Die Option -g ist mit Vorsicht zu verwenden; sie führt dazu, dass nur noch inputlirc auf die Impulse der festgelegten Geräte reagiert. Daher nur bei festgelegten events (s.u.) nutzen, sonst fällt ggf. Maus und Tastatur aus! (Die weiter unten beschriebene Anpassung von lirc.fdi sollte damit hinfällig werden). -m 0 sorgt dafür, dass alle Tasten erkannt werden; Standard ist, dass die Tasten unterhalb der Wertes 88 (das sind die der "Standard-Tastatur") nicht ausgelesen werden. Weiteres zu den verwendbaren Optionen in der man-Page (Befehl man inputlircd).

In /etc/default/inputlirc kann (bei Verwendung der "-g"-Option muss!) auch festgelegt werden, welche events inputlirc tatsächlich auslesen soll; dazu "*" durch das gewünschte event ersetzen, oder auch mehrere events angeben (z.B. EVENTS="/dev/input/event4, /dev/input/event5"), ansonsten kann es zu Problemen z.B. mit Maus und Keyboard kommen, weil deren Eingaben dann nur noch von inputlirc ausgelesen werden. Ggf. lässt sich dort auch etwas wie /dev/input/by-path/pci-5-2--event-ir festlegen (siehe dazu auch hier). Die Angaben werden erst nach einem Neustart von inputlirc wirksam:

sudo systemctl restart inputlirc.service 

Zur Verwendung der Fernbedienung ist allerdings eine funktionsfähige .lircrc-Datei nötig.

"Manuelle" Einrichtung

hardware.conf einrichten

Nach der Installation müssen die LIRC-Module geladen[5] und der passende Treiber verwendet werden. Welche Module, und welcher Treiber, benötigt werden, hängt von der verwendeten Hardware ab. Eine umfangreiche Liste findet sich hier 🇬🇧. Sie werden automatisch beim Systemstart geladen, wenn die richtigen Werte in die hardware.conf eingetragen sind. Wenn schon bei der Installation die passenden Angaben gemacht wurden, sind diese bereits in der Datei gespeichert. Sie befindet sich in /etc/lirc, in ihr können auch weitere Parameter festgelegt werden, die der LIRC-Daemon dann bei jedem Start verwendet. Welche davon zwingend benötigt werden und welche nicht, variiert je nach verwendeter Hardware. Bei Unsicherheiten kann man den jeweiligen Eintrag vorerst leer lassen. Alle Parameter werden zwischen den beiden " " eingetragen. Zeilen, die mit einer # beginnen, sind Kommentare.

Bestandteile der hardware.conf
Zeile Erklärung
LIRCD_ARGS Parameter die lircd bei jedem Start ausführt.
START_LIRCMD Der LIRC mouse daemon ermöglicht es, den Mauszeiger über die Fernbedienung zu steuern. Soll lircmd beim Start von lircd geladen werden, muss die Zeile einkommentiert und auf true gesetzt werden.
LOAD_MODULES Bei true versucht lircd selbstständig ein passendes Modul für die verwendete Hardware zu laden.
DRIVER Wählt einen Treiber aus. Wenn die Fernbedienung über /dev/input/"irgendwas" angesprochen wird, sollte hier "devinput" eingetragen werden. Eine Liste weiterer Treiber findet man mittels "lircd --driver=help"
DEVICE Über welches Device die Fernbedienung angesprochen wird, z.B. /dev/input/eventX.
MODULES Gibt an, welches Kernelmodul[5] lircd laden soll.
LIRCD_CONF Hier kann ein individueller Pfad zur lircd.conf angegeben werden. Standard ist ~/.lircd.conf.
LIRCMD_CONF Hier kann ein individueller Pfad zur lircmd.conf angegeben werden. Standard ist ~/.lircmd.conf.

Ab lirc-0.8.3 wird außerdem zwischen den Einträgen für die Fernbedienung (REMOTE) und Sender (TRANSMITTER, nur benötigt, wenn IR-Signale von einem tatsächlich vorhandenen Sender an andere Geräte weitergesendet werden sollen, siehe irsend 🇬🇧 ) unterschieden; eine für Linux input layer (/dev/input/eventX) und das Gerät /dev/input/event6 von lirc-0.8.3 automatisch erstellte hardware.conf sieht so aus:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# /etc/lirc/hardware.conf
#
#Chosen Remote Control
REMOTE="Linux input layer (/dev/input/eventX)"
REMOTE_MODULES=""
REMOTE_DRIVER="devinput"
REMOTE_DEVICE="/dev/input/event6"
REMOTE_LIRCD_CONF="generic/devinput.conf"
REMOTE_LIRCD_ARGS=""

#Chosen IR Transmitter
TRANSMITTER="None"
TRANSMITTER_MODULES=""
TRANSMITTER_DRIVER=""
TRANSMITTER_DEVICE=""
TRANSMITTER_LIRCD_CONF=""
TRANSMITTER_LIRCD_ARGS=""

#Enable lircd
START_LIRCD="true"

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

#Try to load appropriate kernel modules
LOAD_MODULES="true"

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

#Forcing noninteractive reconfiguration
#If lirc is to be reconfigured by an external application
#that doesn't have a debconf frontend available, the noninteractive
#frontend can be invoked and set to parse REMOTE and TRANSMITTER
#It will then populate all other variables without any user input
#If you would like to configure lirc via standard methods, be sure
#to leave this set to "false"
FORCE_NONINTERACTIVE_RECONFIGURATION="false"
START_LIRCMD=""

lircd.conf einrichten

Fernbedienungscodes
Modell Download
TS35 DVB-T Technisat Airstar 2lircd.conf
Terratec Cinergy Hybrid T USB XS lircd.conf

Bei jedem Tastendruck wird ein Zahlen-Buchstaben-Code an den Rechner gesendet (Bsp. 0x0067). Die lircd.conf stellt einen für Menschen nachvollziehbaren Zusammenhang zwischen den gesendeten Codes und den entsprechenden Tasten auf der Fernbedienung her. Ggf. wird bei der Installation bereits eine passende Konfiguration erstellt; z.T. sind sie unter /usr/share/lirc/remotes/ bereits vorhanden und werden in der automatisch erstellten lircd.conf einfach per include aufgerufen. Als Beispiel dafür wieder eine automatisch erstellte lircd.conf für Linux Input Layer, Gerät /dev/input/event6, die eigentlich nur aus dieser einen include-Zeile besteht:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#This configuration has been automatically generated via
#the Ubuntu LIRC package maintainer scripts.
#
#It includes the default configuration for the remote and/or
#transmitter that you have selected during package installation.
#
#Feel free to add any custom remotes to the configuration
#via additional include directives or below the existing
#Ubuntu include directives from your selected remote and/or
#transmitter.

#Configuration for the Linux input layer (/dev/input/eventX) remote:
include /usr/share/lirc/remotes/generic/devinput.conf

Vorgefertigte lircd.conf-Dateien findet man ggf. unter lirc.sourceforge.net 🇬🇧, die dann mit Root-Rechten nach /etc/lirc kopiert werden müssen. Falls keine passende vorhanden ist (oder man sich unsicher ist), kann mit irrecord sehr einfach eine eigene lircd.conf erstellt werden. irrecord benötigt den verwendeten Treiber, das verwendete Device, einen Speicherort für die lircd.conf und Root-Rechte:

sudo irrecord -H <Treibername> -d /dev/<das_ermittelte_device> /pfad/zur/lircd.conf 

Danach die Anweisungen befolgen und die Datei unter /etc/lirc/lircd.conf abspeichern (Root-Rechte nötig). Ab Version 0.8.6 sind standardmäßig nur noch bestimmte Tastennamen vorgesehen, sie lassen sich mit dem Befehl irrecord -l auflisten.

Funktionstest der Konfiguration

Nach einem Neustart von lircd und irw mit

sudo systemctl restart lirc.service
irw 

kann getestet werden, ob LIRC die Signale der Fernbedienung erkennt. Die Ausgabe sieht beispielsweise wie folgt aus:

0000000000000000 00 KEY_UP lircd.conf
0000000000000000 00 KEY_DOWN lircd.conf

Es erscheinen u.a. die in der lircd.conf hinterlegten Tastennamen (KEY_UP, KEY_DOWN), die dann für die .lircrc verwendet werden können. Ggf. erscheinen bei jedem Tastendruck zwei oder mehr Ausgaben; eigentlich sollte das keine Probleme verursachen, da in der Standardeinstellung Wiederholungen zunächst ignoriert werden. Falls aber die Befehle auch im Normalbetrieb doppelt ausgeführt werden, wie in Doppeltes Ausführen von Befehlen angegeben verfahren.

Falls keine Ausgabe erfolgt, kann ein erweiterter Test aufschlussreich sein. Dazu wird LIRC mit folgendem Befehl gestartet

sudo lircd --nodaemon -H devinput -d /dev/input/event6 

wobei die Parameter -H (driver) und -d (device) der eigenen Konfiguration angepasst werden müssen.

Ggf. muss zuvor ein laufendes lircd z.B. mit

sudo systemctl stop lirc.service 

beendet werden.

In einem weiteren Terminal kann jetzt irw aufgerufen werden; wenn alles funktioniert, wird für jede Taste der Fernbedienung etwas wie oben beschrieben ausgegeben. ⚓︎ Falls allerdings, bei Verwendung des "devinput"-Treibers gelegentlich der Fall, im ersten Terminal jetzt eine Meldung wie

lircd-0.8.3[8085]: can't get exclusive access to events comming from `/dev/input/event6' interface

erscheint, muss die Datei /usr/share/hal/fdi/preprobe/20thirdparty/lirc.fdi (existiert erst seit Version 0.8.3!) in einem Editor[3] so angepasst werden, dass dort die eigene Fernbedienung (aus der "cat /proc/bus/input/devices"-Ausgabe ersichtlich) statt des dort angegebenen Strings "saa7134" in der Zeile

1
      <match key="info.product" contains_ncase="saa7134">

eingetragen wird. Für die LIRC-Version > 0.8.4a müssen ggf. auch alle weiteren Einträge entfernt werden; damit steht dann in der lirc.fdi nur noch:

1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="UTF-8"?>

<deviceinfo version="0.2">
  <device>
     <match key="info.product" contains_ncase="Eigene Fernbedienung">
        <merge key="info.ignore" type="bool">true</merge>
     </match>
  </device>
</deviceinfo>

Danach müssen HAL und der XServer neu gestartet werden:

sudo /etc/init.d/hal restart
sudo /etc/init.d/gdm restart 

Im Zweifelsfall den Rechner neu booten. Ein Neustart von LIRC alleine reicht nicht aus!

Falls irw auch dann keine Ergebnisse liefert, ist vermutlich keine passende lircd.conf-Datei vorhanden, oder es ist zuvor ein Fehler unterlaufen; ggf. wird aber auch die Fernbedienung nicht unterstützt (was eher unwahrscheinlich ist). Einige Empfänger können mit gleichzeitig installiertem inputlirc nicht betrieben werden, das Programm muss dann gestoppt und ggf. das Paket ganz deinstalliert werden.

Tasten mit Funktionen belegen

Jetzt müssen den Tasten der Fernbedienung die gewünschten Funktionen zugeordnet werden. Mit diesem umfangreichen Thema beschäftigt sich ein eigener Unterartikel.

Problemlösungen

Bei der Installation sollte es eigentlich keine allzu großen Schwierigkeiten geben. Da jedoch die Einrichtung sehr komplex ist, werden hier Lösungsansätze für eventuell auftretende Probleme vorgestellt.

Doppeltes Ausführen von Befehlen

Wenn bei einer Fernbedienung, die über den devinput-Treiber läuft, beim Tastendruck der zugehörige Befehl doppelt ausgeführt wird, und auch nicht durch die Parameter repeat und delay beeinflussbar ist, hilft es, in der .lircd.conf den pre_data-Wert auf

1
   pre_data  0x8001

zu setzen, und den toggle_bit_mask-Wert zu löschen/auszukommentieren. Viele Fernbedienungen senden als Standard zweimal (teilweise auch häufiger) den Impuls der Taste, um sicherzustellen, dass er wirklich ankommt. Allerdings gibt es auch Fernbedienungen, die auf einen Tastendruck hin nicht mehrfach den identischen Impuls, sondern auch noch abwechselnd unterschiedliche Impulse senden, die sich aber meist nur in den "high order bit" am Anfang des gesendeten Codes unterscheiden. In einer, mit mit irrecord erstellten, lircd.conf für derartige Fernbedienungen findet sich ein Eintrag wie

1
  toggle_bit_mask   0x8000000 

Dieser Filter führt dazu, dass die Impulse, z.B. von irw, doppelt ausgegeben werden.

Im Normalfall werden doppelte Befehle (wenn nicht explizit anders angegeben) von .lircrc ignoriert; allerdings werden durch diese toggle-bit-mask gefilterten Impulse mit dem devinput-Treiber nicht mehr als "identische", sondern als zwei unterschiedliche Befehle aufgefasst, und somit auch beide hintereinander ausgeführt (ein bekannter Bug in irrecord). Das führt dazu, dass z.B. keine einzelnen Zahlen mehr eingegeben werden können, und Wechsel-Tasten sofort wieder in den Ausgangszustand zurückspringen. Abhilfe kann zum einen das Auskommentieren dieser Zeile schaffen (dann wird der zweite Impulse nicht mehr verarbeitet), allerdings lassen sich so noch keine Dauertastendrücke (wie z.B. zur Lautstärkeregelung wünschenswert) realisieren. Mit dem pre_data 0x8001-Wert wirkt dann auch der zweite gesendete Impulse (der beim Loslassen der Taste generiert wird) nicht mehr, und die Impulse können bei längerem Druck wie erwünscht als Wiederholung erkannt werden.

Wechselndes "eventX"

Wenn es Probleme mit dem Ansprechen der Fernbedienung gibt, weil von Start zu Start (aufgrund unterschiedlicher Verwendung der USB-Anschlüsse o.ä.) unterschiedliche "events" ausgegeben werden, kann ggf. auch ein fester Wert in die hardware.conf eingetragen werden, unter dem dann die Fernbedienung immer erkannt werden sollte. Dazu mit

ls -l /dev/input/by-path/* 

die Geräte nach Pfad-Angabe auflisten; das Ergebnis sieht in etwa so aus:

lrwxrwxrwx 1 root root 9 2009-02-22 13:16 /dev/input/by-path/pci-0000:00:10.1-usb-0:1:1.0-event-mouse -> ../event5
lrwxrwxrwx 1 root root 9 2009-02-22 13:16 /dev/input/by-path/pci-0000:00:10.1-usb-0:1:1.0-mouse -> ../mouse1
lrwxrwxrwx 1 root root 9 2009-02-22 13:16 /dev/input/by-path/pci-5-2--event-ir -> ../event7
lrwxrwxrwx 1 root root 9 2009-02-22 13:16 /dev/input/by-path/platform-i8042-serio-0-event-kbd -> ../event1
lrwxrwxrwx 1 root root 9 2009-02-22 13:16 /dev/input/by-path/platform-pcspkr-event-spkr -> ../event6

Der "event"-Wert, den man mit cat /proc/bus/input/devices erhalten hat, mit dem entsprechenden Wert abgleichen (hier für die Fernbedienung pci-5-2--event-ir als event7) und den String in der /etc/lirc/hardware.conf eintragen, hier also z.B.

1
REMOTE_DEVICE="/dev/input/by-path/pci-5-2--event-ir"

statt

1
REMOTE_DEVICE="/dev/input/event7"

verwenden.

Das funktioniert allerdings nicht, wenn für den Receiver bei cat /proc/bus/input/devices ein "virtuelles" Gerät angegeben wird, wie z.B. hier:

S: Sysfs=/devices/virtual/input/input6

Dann gibt es auch bei ls -l /dev/input/by-path/* keine passende Ausgabe für das Gerät.

Eigene udev-Regel erstellen

Falls für die Fernbedienung keine Einträge in /dev/input/by-path/ zu finden sind, kann man versuchen, eine eigene udev-Regel anzulegen. Gleiches gilt auch für Fernbedienungen ("HID", Human Interface Devices), die sich als Maus und Tastatur mit gleichem Namen ins System einhängen. Das kann man daran erkennen, dass cat /proc/bus/input/devices zwei Geräte mit gleichem Namen aufführt. Um eine udev-Regel zu verfassen muss mit cat /proc/bus/input/devices der Name des oder der Fernbedienungen herausgefunden werden, z.B.:

CoI: Bus=0003 Vendor=05a4 Product=9881 Version=0110
-> N: Name="HID 05a4:9881" <-
P: Phys=usb-0000:00:10.3-1/input0
S: Sysfs=/class/input/input11
U: Uniq=
H: Handlers=kbd event7 
B: EV=120013
B: KEY=e080ffdf 1cfffff ffffffff fffffffe
B: MSC=10
B: LED=7
de

Mit diesem kann man in /etc/udev/rules.d/10-local.rules (muss ggf. angelegt werden; Root-Rechte werden benötigt) eine udev-Regel erstellen:

KERNEL=="event*",ATTRS{name}=="HID 05a4:9881",SYMLINK+="input/ir"

Der "*" gibt an, dass alle events durchsucht werden sollen. Der Eintrag nach ATTRS{name} gibt den Namen des Gerätes an und SYMLINK erstellt einen Link auf das angegebene Verzeichnis. Mit diesem kann das Gerät dann auch von inputlirc angesprochen werden. Falls nun zwei Geräte für die Fernbedienung mit dem selben Namen bestehen, kann die udev-Regel auch mit den Phys-Angaben erstellt werden:

CodeI: Bus=0003 Vendor=05a4 Product=9881 Version=0110
N: -> Name="HID 05a4:9881" <-
P: -> Phys=usb-0000:00:10.3-1/input0 <-
S: Sysfs=/class/input/input11
U: Uniq=
H: Handlers=kbd event7 
B: EV=120013
B: KEY=e080ffdf 1cfffff ffffffff fffffffe
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:10.3-1/input1 <-
S: Sysfs=/class/input/input12
U: Uniq=
H: Handlers=kbd mouse1 event8 
B: EV=17
B: KEY=1f0000 0 2020000 3878 d801d001 1e0000 0 0 0
B: REL=103
B: MSC=10

Die Regel würde dann folgendermaßen aussehen:

KERNEL=="event*",ATTRS{phys}=="usb-0000:00:10.3-1/input0",SYMLINK+="input/ira"
KERNEL=="event*",ATTRS{phys}=="usb-0000:00:10.3-1/input1",SYMLINK+="input/irb"

Jedes Gerät wird nun zu einem eigenen Verzeichnis verlinkt. udev muss nun noch neu gestartet werden mit einem Reboot oder:

sudo udevadm trigger 

Hinweis:

sudo /etc/init.d/udev restart startet nur den udev-Daemon neu, ohne einen neuen Link /dev/input/ir anzulegen.

Inputlirc kann sie nun folgendermaßen ansprechen:

/etc/default/inputlirc

# Options to be passed to inputlirc.
EVENTS="/dev/input/ira /dev/input/irb"
OPTIONS="-g -m 0"

Fehlerhafte Tastenerkennung bei dvb-usb-dib0700-1.xx.fw

Bei Receivern von Karten, die über die Firmware 🇬🇧 dvb-usb-dib0700-1.xx.fw betrieben werden (z.B. TerraTec Cinergy T USB XXS, Hauppauge WinTV-NOVA-T-500) kann es zu Fehl- bzw. Nicht-Erkennung von Impulsen der Fernbedienung kommen. Abhilfe kann folgender Eintrag in /etc/modprobe.d/options schaffen:

options dvb_usb_dib0700 dvb_usb_dib0700_ir_proto=0

Danach sollten die Impulse eindeutig erkannt werden können (siehe auch im Forum und Forum im Forum).

Hinweis:

Die weiteren Problemlösungen wurden noch nicht mit einer aktuellen Version von Lirc getestet. Sie könnten daher veraltet sein und nicht mehr funktionieren.

Fehler beim Laden des lirc_serial-Moduls

Falls beim Laden des lirc_serial-Moduls ein Fehler auftritt, kann ggf. Folgendes Abhilfe schaffen:

sudo setserial /dev/ttyS0 uart none 

Nummerierung in Linux und Windows:

/dev/ttyS*
Schnittstelle Linux Device Windows Device
1 /dev/ttyS0 COM 1
2 /dev/ttyS1 COM 2

Dauerhaft kann das in der Datei /var/lib/setserial/autoserial.conf festgelegt werden.

irw und mode2 geben keine Ausgabe

Falls irw und mode2 keine Ausgabe ergeben, kann Folgendes hilfreich sein:

mode2 -d /dev/lirc0 

Sollte es nun zu einer Ausgabe bei mode2 kommen, muss der lirc-Daemon mit dem Zusatz -d /dev/lirc0 gestartet werden. Das verwendete Gerät lässt sich aber auch in der hardware.conf festlegen.

irw gibt keine Ausgabe bei einer mit irrecord selbst erstellten lircd.conf

Wird für die eigene Fernbedienung keine passende Konfiguration mitgeliefert, kann nach obiger Anleitung mit irrecord eine eigene Konfiguration erstellt werden. Es kann vorkommen, dass irw mit einer so selbst erzeugten Konfiguration keine Ausgabe erzeugt, obwohl das Einlernen der Fernbedienung mit irrecord funktioniert hat. Dies kann darauf zurückzuführen sein, dass die durch irrecord erzeugte Konfiguration fehlerhaft ist und irrecord in der erzeugten lircd.conf zusätzlich zum Tastencode noch weitere Informationen hinterlegt. Eine solche Konfiguration sieht dann bspw. so aus:

[...]
      begin codes
          KEY_PAUSE                0x04000400000030 0x00000000000000
          KEY_1                    0x04000400000001 0x00000000000001
          KEY_2                    0x04000400000002 0x00000000000001
          KEY_3                    0x04000400000003 0x00000000000001
          KEY_4                    0x04000400000004 0x00000000000001
          KEY_5                    0x04000400000005 0x00000000000001
      end codes
[...]

In obigem Beispiel ist die zweite Hex-Zahl nach dem Tastencode entsprechend der Definition der lircd.conf falsch; eine solche falsche Zeile wird von lircd ohne Fehler ignoriert. Löscht man die zweite Hex-Zahl (meist 0x0 oder 0x1) in den Tastencode-Zeilen, funktioniert die Konfiguration meist ohne Probleme.

/dev/lirc existiert nicht

Falls das Gerät /dev/lirc nicht existiert, kann es helfen, einen Symlink auf /dev/lirc0 zu legen:

ln -s /dev/lirc0 /dev/lirc 

Das löst das Problem allerdings nur temporär. Um langfristig eine Lösung zu haben, Folgendes durchführen:

sudo echo KERNEL="lirc0", SYMLINK="lirc" >> /etc/udev/udev.rules
echo lirc_i2c | sudo tee -a /etc/modules 

Eigentlich wäre der zweite Schritt nicht notwendig, da das Modul lirc_i2c vom LIRC-Daemon geladen wird. Allerdings scheint es so zu sein, dass der Symlink erst nach dem Start des LIRC-Daemons angelegt wird. Daher muss das Modul erneut geladen werden.

RAW-Modus

Hin und wieder kommt es vor, dass eine Fernbedienung durch irrecord nicht erkannt wird und zum Dekodieren der Signale der RAW-Modus zum Einsatz kommt. Leider ist diese Art der Dekodierung nicht nur hardwarehungrig, sondern auch äußerst unpräzise, wodurch es nicht selten zu unterschiedlichen Kommandos bei identischem Tastendruck kommt. Momentan ist auch keine erfolgversprechende Lösung bekannt, die über das doppelte Einlesen der Signale hinausgeht, abgesehen von der Neuanschaffung einer entsprechenden Hardware.

USB IR / IgorUSB

Neben den seriellen gibt es auch noch USB-Infrarotempfänger, wobei es aber leider häufig zu Problemen kommen kann. So werden USB-IR's von manchen Mainboards (z.B. Intel) erst dann erkannt, wenn man einen USB-Hub dazwischen schaltet.

Reaktionszeit verringern

Unter Umständen bemerkt man, dass das Navigieren durch Menü recht träge ist. Die kann an einer nicht zeitnahen Umsetzung schnell aufeinanderfolgender Tastendrücke liegen. Um das Problem in den Griff zu bekommen, muss man in der Datei lircd.conf mit den Parameter gap und repeat_gap etwas "spielen". Beispielwerte können aus dem nachfolgenden Codeblock entnommen werden:

  gap           100000
  repeat_gap    10

irexec / irw "No such file or directory"

Auch nach korrekter Installation und Konfiguration kann der Aufruf von irexec / irw fehlschlagen:

irexec 

irexec: could not connect to socket
irexec: No such file or directory 
irw 

connect: No such file or directory

Der Aufruf von irw unter Angabe des richtigen Sockets /dev/lircd funktioniert jedoch.

irw /dev/lircd  

71 0 KEY_MUTE event4
71 0 KEY_MUTE event4
a8 0 KEY_REWIND event4
a8 0 KEY_REWIND event4
...

Dem Programm irexec kann das richtige Socket nicht übergeben werden.

Das Problem besteht darin, dass die Programme irw und irexec auf die Datei /var/run/lirc/lircd zugreifen, welche nicht mehr angelegt wird. Der Paket-Maintainer hat das Standard-Socket von /var/run/lirc/lircd nach /dev/lircd verlegt, die Programme irw und irexec jedoch bisher nicht angepasst. Auch das Verzeichnis /var/run/lirc/ existiert dann i.d.R. nicht.

Das Verzeichnis und der Link auf das richtige Socket müssen dann angelegt werden:

sudo mkdir -p /var/run/lirc
sudo ln -s /dev/lircd /var/run/lirc/lircd 

Diese Lösung ist nicht persistent. Das Verzeichnis und der Link unter /var/run/ können aber bei jedem Systemstart[4] über eine Systemd-Unit angelegt werden.

mkdir -p /var/run/lirc/ && ln -s /dev/lircd /var/run/lirc/lircd

intern

extern

Diese Revision wurde am 24. März 2023 13:03 von DJKUhpisse erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Multimedia, TV, Hardware