[[Vorlage(Getestet, bionic)]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] [:Autostart: Automatischer Start von Programmen] }}} [[Inhaltsverzeichnis()]] [[Bild(./LIRC.png, 150, left)]] 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 [http://www.lirc.org/ LIRC-Homepage] {en} und in den [#Links Links] am Ende dieses Artikels zu finden. = Installation = LIRC kann direkt aus den Paketquellen installiert[1] werden: {{{#!vorlage Paketinstallation 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". }}} 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 [#Verwenden-von-inputlirc inputlirc] zum Einsatz kommen soll. Falls falsche Eingaben gemacht wurden, kann die ganze Prozedur im Terminal[2] mit {{{#!vorlage Befehl 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 {{{#!vorlage 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): * Verwenden von 'inputlirc' * (Manuelle) Einrichtung der [#hardware-conf-einrichten hardware.conf] und der [#lircd-conf-einrichten lircd.conf] 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 ('''H'''uman '''I'''nterface '''D'''evices, 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. [:Archiv/Lirc/Tasten_mit_Funktionen_belegen#irexec: 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 [:Archiv/Lirc/Tasten_mit_Funktionen_belegen#lircrc:.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: {{{#!code text # 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 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 [#Wechselndes-eventX hier]). Die Angaben werden erst nach einem Neustart von inputlirc wirksam: {{{#!vorlage Befehl sudo systemctl restart inputlirc.service }}} Zur Verwendung der Fernbedienung ist allerdings eine funktionsfähige [:Archiv/Lirc/Tasten_mit_Funktionen_belegen:.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 [http://www.lirc.org/html/table.html hier] {en}. 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. ||<-2 tableclass="zebra_start3" rowclass="titel"> 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 [http://www.lirc.org/html/irsend.html irsend] {en} ) 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: {{{#!code text # /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 === ||<-2 rowclass="titel"> Fernbedienungscodes || || Modell || Download || || TS35 DVB-T Technisat Airstar 2||[:Lirc/lircd.conf:lircd.conf] || || Terratec Cinergy Hybrid T USB XS || [http://paste.ubuntuusers.de/10458/ 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: {{{#!code text #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 [http://lirc.sourceforge.net/remotes/ lirc.sourceforge.net] {en}, 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: {{{#!vorlage Befehl sudo irrecord -H -d /dev/ /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 {{{#!vorlage Befehl 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 [:Archiv/Lirc/Tasten_mit_Funktionen_belegen#lircrc:.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 [:Lirc#Doppeltes-Ausfuehren-von-Befehlen: Doppeltes Ausführen von Befehlen] angegeben verfahren. Falls keine Ausgabe erfolgt, kann ein erweiterter Test aufschlussreich sein. Dazu wird LIRC mit folgendem Befehl gestartet {{{#!vorlage Befehl 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 {{{#!vorlage Befehl 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. [[Anker(lirc.fdi)]] 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 {{{#!code html }}} 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: {{{#!code html true }}} Danach __müssen__ HAL und der [:XServer:] neu gestartet werden: {{{#!vorlage Befehl 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 [:Lirc#lircd-conf-einrichten: 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 [:Archiv/Lirc/Tasten_mit_Funktionen_belegen: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 [:Archiv/Lirc/Tasten_mit_Funktionen_belegen#repeat: repeat] und [:Archiv/Lirc/Tasten_mit_Funktionen_belegen#delay: delay] beeinflussbar ist, hilft es, in der '''.lircd.conf''' den `pre_data`-Wert auf {{{#!code text 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 {{{#!code text 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 {{{#!vorlage Befehl 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. {{{#!code text REMOTE_DEVICE="/dev/input/by-path/pci-5-2--event-ir" }}} statt {{{#!code text 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: {{{#!vorlage Befehl sudo udevadm trigger }}} {{{#!vorlage 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 [https://www.linuxtv.org/wiki/index.php/DVB-T_USB_Devices#DiB0700_USB2.0_DVB-T_devices Firmware] {en} '''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 [topic:fernsteuerung-fuer-dvb-usb-stick-geht-nicht:Forum] und [topic:terratec-cinergy-dt-usb-xs-lirc:Forum] im Forum). {{{#!vorlage 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: {{{#!vorlage Befehl sudo setserial /dev/ttyS0 uart none }}} Nummerierung in Linux und Windows: {{{#!vorlage Tabelle <-3 rowclass="titel">/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: {{{#!vorlage Befehl 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 [http://winlirc.sourceforge.net/technicaldetails.html 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl irexec }}} {{{ irexec: could not connect to socket irexec: No such file or directory }}} {{{#!vorlage Befehl irw }}} {{{ connect: No such file or directory }}} Der Aufruf von irw unter Angabe des richtigen Sockets '''/dev/lircd''' funktioniert jedoch. {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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:Systemd-Unit] angelegt werden. {{{ mkdir -p /var/run/lirc/ && ln -s /dev/lircd /var/run/lirc/lircd }}} = Links = == intern == * [:ir-keytable:] - Alternative zu LIRC == extern == * [http://www.lirc.org/ Offizielle LIRC-Homepage] {en} * [http://www.lirc.org/faq.html LIRC FAQ und Links zu Hardware] {en} * [https://www.loggn.de/linux-xbmc-aus-bereitschaftsmodus-per-mce-fernbedienung-aufwecken/ Linux – XBMC aus Bereitschaftsmodus per MCE-Fernbedienung aufwecken] {de} * [https://stuff.nekhbet.ro/2006/07/10/make-an-infrared-remote-control-for-pc.html Bauen eines seriellen IR-Controllers] {en} * [https://www.loggn.de/htpc-media-center-logitech-harmony-reagiert-traege-unter-windows-und-linux/ HTPC – Media Center – Logitech Harmony reagiert träge unter Windows und Linux] {de} * [https://www.loggn.de/ubuntu-lirc-xbmc-mit-pc-funkfernbedienung-x10-steuern/ HowTo - Ubuntu – LIRC – XBMC mit PC-Funkfernbedienung X10 steuern] {de} * [https://www.loggn.de/ubuntu-lirc-konfiguration-mit-rc6-ir605q-147a-e03e-und-logitech-harmony/ HowTo - Ubuntu – LIRC Konfiguration mit MCE RC6 IR-Empfänger und einer Logitech Harmony] {de} # tag: Multimedia, Hardware, TV