LIRC - Infrarot Empfänger
![]() |
Mittlerweile wird beinahe jedes technische Gerät mit einer eigenen Infrarot-Fernbedienung
ausgestattet. Vom CD-Player über Fernseher, Videorecorder bis hin zum Garagentor. Da will der Computer natürlich in nichts nachstehen ... |
Geld Sparen
Auch der PC versteht mittlerweile Infrarot-Signale. So besitzen viele neuere Laptops
einen Infrarot-Port über den mit anderen Geräten oder auch anderen Laptops Daten
ausgetauscht werden können.
Auch TV-Karten werden teilweise mit einer eigenen Fernbedienung geliefert, zumeist aber nur gegen
einen saftigen Aufpreis gegenüber der Version ohne Fernbedienung.
Aber der typische Linux-Benutzer ist bekanntlich sparsam und handwerklich geschickt, also ist
es nicht verwunderlich, daß sich im Internet Soft- und Hardwarelösungen für dieses Problem
zum Selberbasteln finden lassen.
Fernbedienungen hat man sowieso viel zu viele zuhause rumliegen und zusammen mit einem
PC kann man nun auch die Funktionstasten frei Programmieren.
Schnell per Knopfdruck zur nächsten MP3 wechseln, Ton lauter stellen, oder einfach nur das
TV-Programm in kwintv wechseln? Kein Problem! Den Einsatzmöglichkeiten sind mal wieder keine
Grenzen gesetzt. Neben dem simplen Starten von Programmen, sind sogar Maus-Events per
Fernbedienung simulierbar, also könnte man auch den Web-Browser per Tastendruck steuern.
Mehr Sinn macht dann schon eher der Einsatz bei einer Fernbedienung bei Präsentationen.
Mittels Fernbedienung kann man dann zur nächsten Folie wechseln, die der an den
Projektor angeschlossene Laptop an die Wand projiziert. Das Podium wird staunen...
Die Treiber zu Benutzung einer Fernbedienung für den Linux-PC existiert schon seit längerer Zeit, so daß es kaum erstaunt, daß viele Multimedia-Anwendungen bereits spezielle Unterstützungen für die Fernbedienungssoftware bieten. Die Programme bieten dann spezielle Befehle, die direkt interpretiert und ausgeführt werden können, ohne daß sich der Anwender mit Details herumschlagen muß.
Hardware basteln
Vor dem Einsatz der Fernbedienung steht erstmal das Beschaffen des Infrarotempfängers.
Im Handel erhältliche Infrarotempfänger, welche an den seriellen Port angeschlossen
werden, kosten häufig über 70 DM und funktionieren auch nicht besser als die selbstgebaute
Variante, die schon für knappe 15 DM zu beschaffen ist.
Außerdem wird derartigen Produkten (wenn überhaupt) nur Windows-Software beigelegt, und warum sollten wir für so etwas mitbezahlen ?
Die benötigten Bauteile sind weder exotisch noch teuer und sollten in jedem noch so unaufgeräumten Elektronik-Handel erhältlich sein. Notfalls bekommt man die Bauteile auch bei "Conrad Elektronik", für den die entsprechenden Bestell-Nummern angegeben sind.
| Produkt | Bestell-Nummer |
| Widerstand 4,7 kOhm | z.B. 41 83 31 |
| Kondensator 10 µF | z.B. 46 82 31 |
| Kondensator 100nF | z.B. 45 33 58 |
| IR-Empfänger Modul 78L05 | 17 10 77 |
| Diode 78L05 | 16 22 80 |
| Spannungswandler 78L05 | 18 30 24 |
| 9-polige serielle Buchse (evtl. mit Kabel) | |
| Lötplatine |
Mit etwas Geschick sollte es auch für den unerfahrenen Elektronikbaster möglich sein, die
Bauteile auf einer Platine entsprechend dem Schaltplan anzulöten.
Vom seriellen Kabel werden nur 3 Pins benötigt. Trotzdem ist es praktisch, sich ein serielles
Verlängerungskabel (9-Pin) zu kaufen, und das Kabel in der Mitte zu durchtrennen, und z.B. per
Widerstandsmeßgerät die zu den Pins gehörenden Kabel ausfindig zu machen.
Die Pins sind zumeist auf dem Stecker durchnummeriert.
Die benutzten Verbindungen des Infrarotempfängers mit dem seriellen Stecker sind
| 9-Pin (Sub-D Stecker) |
|
RTS 7 Request To Send (Spannungsversorgung) GND 5 Ground (Erdung) DCD 1 Data Carrier Detect (IR-Signal) |
Die entsprechende Schaltung des Empfängers ergibt sich aus folgendem Schaltplan:

( download EPS-File )
Im fertigen Zustand könnte das dann folgendermaßen aussehen:

Die resultierende Schaltung kann sehr kompakt ausfallen, je nach technischem Geschick des Bastlers. Es empfiehlt sich, die Lötplatine in ein kleines Gehäuse einzubauen. Man kann u.U. den Infrarot-Empfänger auch direkt am Gehäuse der PCs anbringen.
Besonders platzsparend ist ein Empfänger, den man auf der Homepage der LIRC-Projektes zu sehen bekommt. Der eigentliche Empfänger findet hier sogar Platz im seriellen Stecker.

Software Installation
Sobald man seinen Empfänger fertig gebaut hat, möchte man natürlich dringend wissen, ob er denn auch funktioniert. Dafür muß man zunächst einmal die benötigte Software installieren. Diese findet man auf der Homepage des LIRC Projektes (Linux Infrared Remote Control) unter http://www.lirc.org. Die aktuelle Version der Software ist 0.6.3, man sollte bei Problemen mit der Software aber durchaus in Betracht ziehen, die neueste CVS-Version zu holen oder zumindest (wer sich mit CVS nicht auskennt) den letzten Snapshot der Software (unter http://www.lirc.org/software/snapshots/).
Nach dem Entpacken der Software ins /tmp-Verzeichnis
>> tar zxvf lirc-0.6.3.tar.gz -C /tmpmuß die Software kompiliert werden:
>> cd /tmp/lirc-0.6.3 >> ./configureNun erscheint ein Konfigurationsfenster, in dem einige Einstellungen gemacht werden müssen:

Unter dem Menüpunkt "driver configuration" wird eingestellt, um was für einen Typ von Infrarot-Empfänger es sich handelt. Bei unserer selbstgebauten Variante ist der erste Menüpunkt "Home-brew ..." auszuwählen. Daraufhin ist einzustellen, an welchen seriellen Port, und unter welchem Interrupt der Empfänger angesprochen wird. Als nächstes will LIRC noch wissen, ob wir auch Infrarotsignale senden wollen. Da wir aber keine Transmitterdiode eingebaut haben, sollte der Menüpunkt "With transmitter diode" leer bleiben. Der Punkt 2 "Software generated carrier" kann durchaus aktiviert bleiben.
Daraufhin landen wir wieder im Hauptmenü und sollten uns nun um den dortigen 2. Menüpunkt "Software Configuration" kümmern. Da wir später auch X-Applikationen mit der Fernbedienung steuern möchten, muß der erste Menüpunkt "Compile tools for X-Windows" aktiviert werden. Der Rest sollte deaktiviert bleiben.

Nun landet man wieder im Hauptmenü. Hier können wir nun den 3. Menüpunkt auswählen: "Save configuration & run configure".
Ist das configure-Skript ohne Fehlermeldung durchgelaufen (eventuell gibt es eine Warnung aus, daß der serielle Port nicht als Modul im Kernel implementiert ist, sondern fest einkompiliert wurde), kann man beginnen, das Softwarepaket zu kompilieren:
>> makeAbschließend, wenn das Kompilieren ohne Fehler durchgalaufen ist, kann man als user "root" die Programme installieren:
>> su [passwort] >> make installDa LIRC ein Kernelmodul benutzt und auch ansonsten sehr hardwarenah arbeitet, kann es bei gepatchten Kernelversionen beim Kompilieren der Software zu Problemen führen. So funktioniert lirc z.B. nicht zusammen mit dem der SuSE 7.0 beiliegenden Kernel 2.2.16, bei dem es sich auch um eine gepatchte Version handelt.
Lirc benutzt ein eigenes Device, um mit der angeschlossenen Hardware zu kommunizieren. Unter Umständen (distributionsabhängig) existiert dieses Device mit dem Namen /dev/lirc schon, ansonsten muß man es (als root) selbst erzeugen
>> mknod /dev/lirc c 61 0Dabei gibt das "c" an, daß es sich um ein Charakter-Device handelt (diese Einstellung betrifft die Art der Kommunikation mit der Hardware) und die beiden Zahlen bestimmen die Major und Minor-Nummer unter der das Device Kernel-intern angesprochen wird.
Nach all diesem Aufwand können wir endlich den selbstgebauten Empfänger testen. Am einfachsten funktioniert dies unter X mit dem Programm xmode2, welches auch im Unterverzeichnis tools von lirc liegen sollte.
>> xmode2Auf dem X-Server erscheint nun ein Fenster, in dem das von dem Infrarotempfänger ausgelesene Signal aufgezeichnet wird. Richten Sie Ihre Fernbedienung auf den Empfänger, und sie sollten die ausgelesenen Pulse erkennen können:

Sollten Sie einzelne Peaks in dem Fenster sehen, die nicht von Ihrer Fernbedienung stammen, handelt es sich zumeist um Signale die vom äußeren Lichteinfall stammen.
Kleiner Tip: Testen Sie mal alle in ihrem Haus befindlichen Fernbedienungen aus, und Sie werden feststellen, wie viele verschiedene Sorten von Signalarten (korrekter: Protokolltypen) existieren.
Nachhilfestunden
Es gibt eine darart große Fülle an Fernbedienungen, daß wohl keine Software alle Modelle kennen
könnte. Zwar gibt es bereits eine Reihe an Konfigurationsdateien für verschiedene Fernbedienungen
auf der Web-Seite von LIRC http://www.lirc.org/remotes/,
aber es ist Glückssache, ob Ihr Modell auch in dieser Liste vorhanden ist.
Deshalb kommt LIRC mit einem eigenen Lern-Programm, mit dessen Hilfe man die Fähigkeiten
seiner eigenen Fernbedienung der Software beibringen kann. Das benötigte Programm hat den Namen
irrecord und befindet sich im daemons-Unterverzeichnis von lirc.
Für jede Fernbedienung, die man zusammen mit lirc einsetzen möchte, kann man nun eine eigene
Konfigurationsdatei erstellen. Die Lizenz des Programms verpflichtet jeden Benutzer, die
entstandene Konfigurationsdatei an den Autor des Programms zu schicken. So kann der Autor
den Pool an unterstützten Fernbedienungen ständig vergrößern.
Damit beim Lernen der Fernbedienung keine Fehler durch Störsignale auftreten, sollte der Emfpänger möglichst gut vor ungewolltem Lichteinfall geschützt werden. Der Autor empfiehlt sogar, das Erlernen der Fernbedienung in einem dunklen Raum auszuführen.
Das Programm ruft man nun auf mittels:
>> irrecord /tmp/remote1.configNach einigen Informationstexten für den User, muß die Software ersteinmal herausbekommen, um was für einen Typ von Fernbedienung es sich handelt (es wird versucht, den benutzten Protokolltyp zu erkennen). Dafür muß man möglichst alle Knöpfe mal drücken (weitere Informationen entnimmt man der Ausgabe des Programms).
Im nächsten Schritt müssen die einzelnen Tasten der Fernbedienung benannt werden (keine Leerzeichen benutzen). Über diese Namen können später die Tasten in der Konfiguratonsdatei angesprochen werden. Nach der Benennung der Tasten, muß jeweils die zugehörige Taste einige Male gedrückt werden.
Sind alle Tasten benannt, kann man das Programm mit Drücken der Enter-Taste ohne Eingabe
eines Namens beenden.
Die erstellte Konfigurationsdatei befindet sich nun unter /tmp/remote1.config und
sollte nach /usr/local/etc/lircd.conf kopiert werden.
Möchte man mehrere Fernbedienungen benutzen, muß man für jede Fernbedienung eine eigene Konfigurationsdatei erstellen und diese abschließend zu einer Datei zusammenfügen:
>> cat config1 config2 >config
In der erstellten Konfiguration /usr/local/etc/lircd.conf befinden sich nun neben einigen Informationen über den Typ der Fernbedienung auch die sog. Codecs der einzelnen Tasten. Hier kann man immer dann nachschauen, wenn man die Namen der Tasten, die man unter irrecord eingegeben hat, vergessen hat:
| /usr/local/etc/lircd.conf |
[...]
begin codes
Volume_down 0x000000000000601F
Volume_up 0x000000000000205F
Audio_Mute 0x000000000000502F
Class 0x0000000000002956
Tuner_Next 0x000000000000007F
Tuner_Prev 0x000000000000403F
CD_Next 0x0000000000005C23
CD_Prev 0x0000000000003C43
CD_Stop 0x0000000000001C63
CD_Disc 0x0000000000001D62
CD_Pause 0x0000000000007C03
CD_Play 0x0000000000006C13
DeckA_Rew 0x000000000000255A
DeckA_Forw 0x000000000000453A
DeckA_Stop 0x0000000000005926
DeckA_Rec 0x000000000000057A
DeckA_Play 0x0000000000003946
DeckA_PlayRev 0x0000000000007906
DeckB_Play 0x000000000000542B
DeckB_PlayRev 0x000000000000344B
DeckB_Stop 0x000000000000641B
DeckB_Rec 0x0000000000000C73
DeckB_Forw 0x0000000000004C33
DeckB_Rev 0x0000000000002C53
Phono 0x0000000000002857
CD 0x0000000000004837
Tuner 0x0000000000006817
Tape1 0x0000000000000877
Tape2 0x000000000000700F
Sleep 0x0000000000005D22
Power 0x000000000000106F
end codes
end remote
|
Konfiguration
Das Bekanntmachen einer (oder mehrerer) Fernbedienungen erfolgt systemweit über die soeben erstellte /usr/local/etc/lircd.conf. Die eigentliche Konfiguration, welcher Befehl bei welcher Taste ausgeführt werden soll, kann jeder User für sich selbst vornehmen. Dafür erstellt er in seinem Home-Verzeichnis eine Datei namens .lircrc. In dieser wird unter anderem festgelegt, welcher Befehl bei welcher Taste ausgeführt werden soll. Als erstes Beispiel sollte man eine Konfigurationsdatei der folgenden Art verwerden (Die Namen der Buttons können bei Ihnen natürlich anders sein):
| ~/.lircrc |
begin
prog = irexec
button = CD
config = xmms &
mode = xmms
end
begin
prog = irexec
button = Sleep
config = xterm &
end
|
Zum Abschluß müssen nun noch einige Programme gestartet werden wie etwa der Daemon lircd (befindet sich im Unterverzeichnis lirc-0.6.3/daemons/lircd). Dieser muß vom User root gestartet werden.
Es kann sogar der IR-Empfänger an einem anderen PC angeschlossen werden, als denjenigen, wo später die Programme laufen. Die Kommunikation zwischen Hardware und den Programmen ist nämlich auch übers Netzwerk möglich.
Die Software zum Auslesen der Konfigurationsdatei und zum späteren Ausführen der den Buttons zugeordneten Befehle findet man unter lirc-0.6.3/contrib. Dort führt man als normaler User (derjenige, in dessen Home-Verzeichnis sich die Konfigurationsdatei .lircrc befindet) das Skript
>> ./lircs -caus. Von nun an laufen alle Programm wie gewünscht, und das Drücken der Taste "CD" auf der Fernbedienung startet nun xmms, die Taste "Sleep" öffnet ein Terminalfenster.
Fine-Tuning
Die wohl wichtigsten Programme, die man mit der Fernbedienung steuern möchte, sind
MP3-Player und TV-Applikationen.
Für xmms gibt es mittlerweile ein Plugin, welches die Benutzung einer Fernbedienung
ermöglicht. Das Plugin findet man unter http://sourceforge.net/project/showfiles.php?group_id=5444"
Nach dem Kompilieren der Software muß man die erzeugten Libraries, die sich im .libs-Unterverzeichnis befinden, entweder ins globale Pluginverzeichnis von xmms kopieren oder in das lokale Pluginverzeichnis (~/.xmms/Plugins). Nach einem Neustart von xmms kann man dann im Preferences-Menü das neue Plugin aktivieren:

Die von XMMS nun verstandenen Befehle, die man direkt in der LIRC-Konfigurationsdatei benutzen kann, lauten nun
| LIRC-XMMS Plugin Befehle |
PLAY ONE
STOP TWO
PAUSE THREE
PLAYPAUSE FOUR
NEXT [<tracks>] FIVE
PREV [<tracks>] SIX
SHUFFLE SEVEN
REPEAT EIGHT
FWD [<sec>] NINE
BWD [<sec>] ZERO
VOL_UP [<percent>] SETPOS
VOL_DOWN [<percent] QUIT
BAL_LEFT [<percent>] LIST
BAL_RIGHT [<percent>] SELECT <chars>
BAL_CENTER PLAYLIST_CLEAR
PLAYLIST_ADD <file>
|
Xawtv unterstützt (zumindestens in neueren Versionen) standardmäßig LIRC und benötigt
kein zusätzliches Plugin. Die neuste Version von xawtv findet man unter
http://bytesex.org/xawtv/.
Die Befehle, die von xawtv verstanden werden, sind dabei exakt dieselben, die auch mittels des
beiliegenden Programms xawtv-remote an ein laufendes xawtv-Programm übergeben
werden können. Die für eine Fernbedienung interessanten Befehle sind hierbei:
| xawtv-Befehle |
setstation [ <name> | <nr> | next | prev | back ] setchannel [ <name> | next | prev ] setinput [ <input> | next ] capture [ on | off | overlay | grabdisplay ] volume [ inc | dec | mute | <n> ] snap [ jpeg | ppm ] [ full | win | widthxheight ] <file-name> ] movie file <filename> | start | stop fullscreen msg text quit keypad n |
Nähere Informationen zu den einzelnen Befehlen findet man in der Manpage zu xawtv-remote.
Auszüge aus eine Beispielkonfiguration könnten dann folgendermaßen aussehen:
| ~/.lircrc |
begin
prog = irexec
button = CD
config = xmms &
mode = xmms
flags = once
end
begin
prog = irexec
button = Tuner
config = xawtv &
mode = xawtv
flags = once
end
begin
prog = irexec
button = Sleep
config = xlock &
end
begin xmms
begin
prog = xmms
button = CD_Play
config = PLAY
end
begin
prog = xmms
button = CD_Pause
config = PAUSE
end
begin
prog = xmms
button = CD_Stop
config = STOP
end
[...]
end xmms
begin xawtv
begin
prog = xawtv
button = DeckA_Play
config = setstation next
end
begin
prog = xawtv
button = DeckA_PlayRev
config = setstation prev
end
begin
prog = xawtv
button = DeckA_Rec
config = fullscreen toggle
end
[..]
end xawtv
|
Da Fernbedienungen notorisch zu wenige Knöpfe besitzen, unterstützt LIRC eine Mehrfachbelegung der einzelnen Tasten. Der Eintrag
mode = xmms
bewirkt, daß LIRC beim Drücken der CD-Taste in den xmms-Modus geht, und nun diejenigen Befehle
ausführt, die in dem Bereich
begin xmms [... hier die Tastenbelegungen ...] end xmmsdefiniert wurden.
Dieselben Tasten könnten auch unter einem anderen Mode definiert sein, dann alledings mit einem anderen Funktionsaufruf. Dazu muß man zuerst die zum Mode gehörige Taste drücken, und die Funktionstasten werden entsprechend neu von LIRC interpretiert.
automatisch starten
Zum automatischen Starten des Daemons empfiehlt sich, wie immer, die Benutzung eines Init-Skriptes. Zwar liegen im LIRC-Unterverzeichnis contrib schon einige Beispiel-Init-Skripte, allerdings empfiehlt es sich, wegen dem nicht nur distributionsabhängigen, sondern sogar versionsnummernabhängigen Aufbau dieser Dateien ein bestehendes Init-Skript der eigenen Distribution zu kopieren und an eigene Bedürfnisse anzupassen, anstatt ein vorgefertigtes zu benutzen.
Das Init-Skript sorgt dann dafür, daß nach jedem Booten der lirc-Daemon gestartet wird. Zusätzlich müssen noch von entsprechenden Usern die Programme irxevent und irexec --daemon gestartet werden, welche die den Tasten zugeordneten Befehle ausführen. Dies übernimmt normalerweise das Skript lircs, welches sich im Unterverzeichnis contrib befindet.
Dieses Skript sollte nicht als root gestartet werden, sondern als User, der auch die
entsprechende .lircrc-Konfigurationsdatei in seinem Home-Verzeichnis besitzt.
Ob der Befehl
lircs -cnun schon beim Booten, oder erst beim Starten des X-Servers aufgerufen werden soll, ist abhängig von den Einsatzgebieten der Fernbedienung, und davon, ob der Rechner ein Mehrbenutzersystem ist oder nur von einer einzelnen Person in Anspruch genommen wird.
Platziert man den Befehl mit im Init-Skript, so erzwingt man die Ausführung des Befehls mit den entsprechenden User-Rechten durch
su Nichtrootuser -c "umask 022; /pfad/zu/lircs -c"Ansonsten muß der Befehl lircs -c einfach der ~/.xinitrc des jeweiligen Users hinzugefügt werden, damit das Programm beim Starten der grafischen Oberfläche automatisch mitgestartet wird.
Die Erzeugung von X-Ereignissen (Events) wie das simulierte Drücken einesMausknopfes
mittels LIRC ist recht umständlich.
Deshalb verschieben wir dies auf einen Nachfolgeartikel, der dann in der
siebenten Ausgabe des Linux NetMag erscheinen wird.
Links
Homepage von LIRC: http://www.lirc.org
Ein Artikel über LIRC im c't Magazin: http://www.heise.de/ct/00/18/208/
Anmerkungen zu diesem Artikel
Eigene Anmerkung eintragen
