LIRC

Aus Linupedia.org
Wechseln zu: Navigation, Suche
LIRC Linux - Infrared Remote Control

Ein Programm zur Benutzung von IR-Fernbedinungen
Basisdaten
Entwickler: Karsten Scheibler & Christoph Bartelmus
Aktuelle Version: 0.8.1
letzte Veröffentlichung: 7. Januar 2007
Betriebssystem: Linux
Kategorie: Fernbedienung
Lizenz: GPL
Deutschsprachig: Nein
Webseite: http://www.lirc.org

Author: PrinzEisenherz1
Autor von Punkt 2 und 4: CowClaw

LIRC bedeutet für Linux Infrared Remote Control, und ist für den Einsatz einer Fernbedienung am PC unter Linux gedacht.

Dieses Howto behandelt die Installation und Konfiguration von Lirc unter SUSE.
Es wurde erfolgreich unter SuSE 10.0 - 10.2 getestet und dürfte auch bei den 9er-Versionen funktionieren.
Dieses Howto beinhaltet folgende Fernbedienungsvarianten:

  • MEDION X10 Funkfernbedienung (USB)
  • IR-Empfänger über serielle Schnittstelle (COM)

wobei der Schwerpunkt hier bei MEDION X10 liegt.

Vorbereitende Maßnahmen

Als erstes muß man mit YAST, Smart oder vergleichbaren Paketmanager folgende Pakete installieren:

  • lirc
  • lirc-kmp-<Kerneltyp>

Bei lirc-kmp-<Kerneltyp> handelt es sich um ein Paket mit zusätzlichen Treibermodulen. Hier ist es wichtig das es zum installierten Kernel passt.
Sollte man nicht wissen welcher Kernel installiert ist, dann kann man dies auf der Konsole mit uname -r herausfinden.
z.B.

2.6.18.2-34-default

Bei diesem Beispiel handelt es sich um einen default-Kernel. Also muß man in diesem Fall das Paket lirc-kmp-default auswählen.

Lirc Kernel-Module selbst bauen

Solltet ihr kein zu eurem installierten Kernel passendes Paket mit Kernel-Modulen finden, müsst ihr es euch selbst bauen.


Hier eine Step-By-Step Anleitung:


Voraussetzungen: Die Pakete kernel-source, lirc, automake, autoconf und libtool müssen installiert sein.


1. Zunächst stellen wir sicher, dass der Link /usr/src/linux auf den richtigen Kernel zeigt. das machen wir folgendermaßen:

In der Konsole geben wir den folgenden Befehl ein:

# uname -r

dort kommt dann soetwas raus:

2.6.21.4-default

Nun vergleichen wir. Bitte folgendes in der Konsole eingeben:

#cd /usr/src
#ls -l | grep linux

dort steht dann hoffentlich etwas wie:

linux -> linux-2.6.21.4-default

sehr gut, der Link zeigt also auf den richtigen Kernel!


2. Nun loggen wir uns am CVS-Server des Lirc Projektes ein, und laden die Quellen herunter.
Dazu geben wir als root folgendes in der Konsole ein.

#cd /usr/local/src
#cvs -d:pserver:anonymous@lirc.cvs.sourceforge.net:/cvsroot/lirc login
#cvs -z8 -d:pserver:anonymous@lirc.cvs.sourceforge.net:/cvsroot/lirc co lirc

Sehr schön, weiter mit Schritt 3


3. Nun kompilieren wir die Quellen, die wir gerade heruntergeladen haben.

Dazu geben wir folgendes als root in der Konsole ein.

#cd lirc
#./autogen.sh
#./setup.sh

Hier müssen wir nun den Treiber für unsere Empfänger angeben. Haben wir das gemacht, speichern wir das ganze mit einem Klick auf save & run configure. Configure sollte nun durchlaufen, wenn alle Tools die es dazu braucht installiert sind.

also weiter..

#make

Wenn make ohne Fehler durchläuft ist schon fast alles geschafft.

Nun bauen wir mit checkinstall ein rpm Paket.

#checkinstall

Wir müssen lediglich noch den Namen des Paketes von lirc, nach lirc-kmp ändern.

Dieses können wir nun mit yast oder einem anderen Paketmanager wie smart installieren.

Dann wünsche ich euch mal gutes Gelingen.
CowClaw

Installation MEDION X10

USB-Funkempfanger anschließen und mit lsmod prüfen welche Module vom System automatisch geladen werden.
z.B

# lsmod
snd_seq_device          	7948	2 snd_seq,snd_rawmidi
snd                    		50692	12 snd_pcm_oss,snd_mixer_oss,snd_seq,snd_via82xx,snd_ac97_codec, ...                                                                         
soundcore            	         8672	1 snd
uhci_hcd            		27280	0
usbcore              		108804  5 ati_remote,hci_usb,ehci_hcd,uhci_hcd
ide_cd                		35360  	0
cdrom                  		32288  	1 ide_cd      

Wie man hier erkennen kann wird automatisch das Treibermodul ati_remote geladen. Dies ist aber nicht das passende für den MEDION X10.
Um das Modul zu entladen gibt man als Root in der Konsole folgendes ein:

rmmod ati_remote

Damit das Modul ati_remote beim nächsten Neustart bzw. beim erneuten anstecken des USB-Empfängers nicht wieder automatisch geladen wird, setzt man es in die Blacklist.
Die Blacklist befindet sich um Unterordner

/etc/modprobe.d/

Dazu mit einem Editor die Datei blacklist editieren.

# mcedit /etc/modprobe.d/blacklist

Dort folgenden Eintrag hinzufügen

blacklist ati_remote

Als nächstes läd man die benötigten Module für MEDION X10:

modprobe lirc_dev
modprobe lirc_atiusb

Überprüfen ob die Module geladen wurden:

# lsmod | grep lirc | grep -v
lirc_atiusb	            16160	0
lirc_dev            	    13284	1 lirc_atiusb
usbcore        	            108804	5 lirc_atiusb,hci_usb,ehci_hcd,uhci_hcd

Wie man erkennen kann wurden beide Module erfolgreich geladen.
Als nächstes muss man die Config-Datei von Lirc anpassen. Diese befindet sich bei SuSE im Verzeichnis /etc/sysconfig/
Dazu einfach mit einem Editor z.B. MCEdit die Datei als root editieren.

# mcedit /etc/sysconfig/lirc

Dort muss man dann folgende Änderungen durchführen:

LIRCD_DEVICE=""

ändern auf

LIRCD_DEVICE="/dev/lirc0"

und dann noch

LIRC_MODULE=""

ändern auf

LIRC_MODULE="lirc_atiusb"

Dadurch wird beim starten des Runlevels lirc auch gleich das Modul lirc_atiusb mitgeladen.

Installation eines Empfängers einer Hauppauge TV Karte

Dieser Abschnitt behandelt die Konfiguration von lirc um einen Hauppauge TV Karten IR Empfänger benutzen zu können.

Voraussetzungen: lirc ist installiert, lirc kernelmodule sind installiert (Vorgehensweise oben beschrieben).

Zunächst muss man ein Paar Änderungen an der Konfigurationsdatei vornehmen. Dazu einfach mit einem Editor z.B. MCEdit die Datei als root editieren.

# mcedit /etc/sysconfig/lirc

Dort muss man dann folgende Änderungen durchführen:

LIRCD_DEVICE=""

ändern zu

LIRCD_DEVICE="/dev/lirc0"
LIRC_MODULE=""

ändern zu

LIRC_MODULE="lirc_i2c"

Nun brauchen wir eine lircd.conf die zu Hauppauge TV-Karten passt. Wir nehmen die folgenden Zeilen und speichern sie in Datei dieser Datei.

/etc/lircd.conf


begin remote
 name  hauppauge_pvr
 bits           13
 flags RC5|CONST_LENGTH
 eps            30
 aeps          100
 one           969   811
 zero          969   811
 plead        1097
 gap          114605
 toggle_bit      2


     begin codes
         Power                    0x00000000000017FD
         Go                       0x00000000000017FB
         1                        0x00000000000017C1
         2                        0x00000000000017C2
         3                        0x00000000000017C3
         4                        0x00000000000017C4
         5                        0x00000000000017C5
         6                        0x00000000000017C6
         7                        0x00000000000017C7
         8                        0x00000000000017C8
         9                        0x00000000000017C9
         Back/Exit                0x00000000000017DF
         0                        0x00000000000017C0
         Menu                     0x00000000000017CD
         Red                      0x00000000000017CB
         Green                    0x00000000000017EE
         Yellow                   0x00000000000017F8
         Blue                     0x00000000000017E9
         Ch+                      0x00000000000017E0
         Ch-                      0x00000000000017E1
         Vol-                     0x00000000000017D1
         Vol+                     0x00000000000017D0
         Ok                       0x00000000000017E5
         Mute                     0x00000000000017CF
         Blank                    0x00000000000017CC
         Full                     0x00000000000017FC
         Rewind                   0x00000000000017F2
         Play                     0x00000000000017F5
         Forward                  0x00000000000017F4
         Record                   0x00000000000017F7
         Stop                     0x00000000000017F6
         Pause                    0x00000000000017F0
         Replay                   0x00000000000017E4
         Skip                     0x00000000000017DE
     end codes
end remote

Nun laden wir testweise das Kernelmodul. Als root in einer Konsole geben wir folgendes ein.

#modprobe lirc_i2c

Nun können wir lirc mit folgendem befehl starten.

#lircd

Nun testen wir einmal ob ein Signal ankommt

#irw

und tippen ein bischen auf der Fernbedienung rum.
CowClaw

Installation IR-Empfänger über serielle Schnittstelle (COM)

Dieser Abschnitt behandelt die Installation eines IR-Empfängers über serielle Schnittstelle (COM).
Solch ein Empfänger kann mit etwas Geschick und geringen Kosten selbst gebaut werden.
Eine gute Anleitung findest sich auf folgender Website:
Bauanleitung IR-Empfänger

Um den IR-Empfänger mit lirc verwenden zu können, muss man die COM-Schnittstelle noch anpassen.
Dazu muss man als erstes das Programm setserial installieren. Dies ist bei SuSE mit dabei. Man kanns auch mit Smart, opt, oder ähnlichem
installieren. Dann gibt man als root in der Konsole folgenden Befehl ein:

# setserial /dev/ttyS0 uart none

/dev/ttyS0 steht hierbei für die COM1-Schnittstelle.
Damit dies auch bei einem Neustart geschieht, fügt man diesen Befehl am besten in folgende Datei ein:

/etc/init.d/boot.local

Somit wird es bei jedem Neustart automatisch durchgeführt.

Als nächstes läd man als root das Modul für den seriellen IR-Empfänger:

# modprobe lirc_serial

Überprüfen ob die Module geladen wurden:

# lsmod | grep lirc | grep -v

Hier sollte dann eine Ausgabe erscheinen wo lirc_dev und lirc_serial erscheinen.
Als nächstes muss man die Config-Datei von Lirc anpassen. Diese befindet sich bei SuSE im Verzeichnis /etc/sysconfig/
Dazu einfach mit einem Editor z.B. MCEdit die Datei als root editieren.

# mcedit /etc/sysconfig/lirc

Dort muss man dann folgende Änderungen durchführen:

LIRCD_DEVICE=""

ändern auf

LIRCD_DEVICE="/dev/lirc0"

Gegebenenfalls muss hier /dev/lirc verwendet werden. Am besten ausprobieren.
und dann noch

LIRC_MODULE=""

ändern auf

LIRC_MODULE="lirc_serial"

Dadurch wird beim starten des Runlevels lirc auch gleich das Modul lirc_serial mitgeladen.

Die lircd.conf Konfiguration

Damit lirc die eingehenden Signale der Fernbedienung auch den passenden Tasten zuordnen kann, benötigt man noch eine passende lircd.conf.
Diese kann man für die gebräuchlichsten Fernbedienungen von der lirc-Website runterladen. http://lirc.sourceforge.net/remotes/

Beispiel lircd.conf MEDION X10:

# Please make this file available to others
# by sending it to <lirc@bartelmus.de>
#
# this config file was automatically generated
# using lirc-0.7.0(atiusb) on Fri Feb 18 01:53:46 2005
#
# contributed by FUX 2005-02-17
#
# brand: Medion
# model no. of remote control: RF Remote Control
#                              FCC ID: B4S20016398
# devices being controlled by this remote:
#
  begin remote
  name  Medion_X10
  bits           16
  eps            30
  aeps          100
  one             0     0
  zero            0     0
  pre_data_bits   8
  pre_data       0x14
  post_data_bits  16
  post_data      0x0
  gap          227928
  toggle_bit      0
begin codes
3                        0x000000000000E40F
2                        0x000000000000E30E
1                        0x000000000000E20D
4                        0x000000000000E510
5                        0x000000000000E611
6                        0x000000000000E712
7                        0x000000000000E813
8                        0x000000000000E914
9                        0x000000000000EA15
0                        0x000000000000EC17
ok                       0x000000000000F31E
up                       0x000000000000EF1A
down                     0x000000000000F722
right                    0x000000000000F41F
left                     0x000000000000F21D
del                      0x000000000000F520
ren                      0x0000000000000B36
red                      0x0000000000000732
green                    0x0000000000000833
yellow                   0x0000000000000934
blue                     0x0000000000000A35
txt                      0x000000000000EB16
ch-                      0x000000000000E10C
ch+                      0x000000000000E00B
vol+                     0x000000000000DE09
vol-                     0x000000000000DD08
mute                     0x000000000000D500
tv                       0x000000000000012C
vcr                      0x000000000000022D
dvd                      0x000000000000D904
music                    0x000000000000DB06
radio                    0x000000000000032E
photo                    0x000000000000DA05
preview                  0x000000000000042F
list                     0x0000000000000530
desktop                  0x0000000000000631
setup                    0x000000000000F01B
snapshot                 0x000000000000ED18
acquire                  0x0000000000000C37
play                     0x000000000000FA25
reward                   0x000000000000F924
forward                  0x000000000000FB26
stop                     0x000000000000FD28
rec                      0x000000000000FC27
pause                    0x000000000000FE29
skipr                    0x000000000000F621
skipf                    0x000000000000F823
dvdmenu                  0x000000000000EE19
dvdaudio                 0x0000000000000F3A
off                      0x000000000000D702
chsearch                 0x000000000000F11C
fullscreen               0x0000000000000E39
editimage                0x0000000000000D38
end codes
end remote


Jetzt startet man lirc

Zum starten des Runlevels lirc als root folgenden Befehl ausführen:

# rclirc start

mit

# rclirc status

überprüfen ob lirc gestartet wurde.
Damit der Runlevel lirc bei jedem Systemstart automatisch gestartet wird führt man als root folgendes aus:

# chkconfig lirc on

Es werden durch lirc jetzt im Verzeichnis /dev folgende Major-Dateien angelegt:

lirc
lirc0

Diese muss man noch mit den passenden Rechten versehen damit auch ein normaler Nutzer lirc nutzen kann. Dieses erziehlt man als root in der Konsole mit folgenden Befehlen:

# chmod 666 /dev/lirc
# chmod 666 /dev/lirc0


Um jetzt die Fernbedienung zu testen, startet man das Hilfsprogramm irw

# cd /usr/bin
# ./irw

Wenn jetzt eine Taste auf der Fernbedienung gedrückt wird, dann gibt irw die Bezeichnung und den Tastencode aus! Dann weiß man das die lirc-Konfiguration läuft.


Steuern von Anwendungsprogramen mit lircrc

Um mit lirc auch Anwendungsprogramme (z.B. XMMS, Kaffeine, Amarok, MythTV usw.) steuern zu können benötigt man, zwei im Hintergrund laufende, deamons.
Diese müssen in der Konsole als normaler Nutzer aufgerufen werden.
Bevor diese aber gestartet werden muss man im Verzeichnis /etc noch die Datei lircrc anlegen. Diese befüllt man mit den Steuerbefehlen für z.B XMMS.
Um XMMS mit lirc steuern zu können muss noch zusätzlich das Paket xmms-plugins installiert werden und in XMMS unter Optionen -> Plugins -> Allgemeine Plugins das Lircplugin aktiviert werden.

Beispiel lircrc:

begin irexec
begin
prog   = irexec
button = music
config = xmms &
mode   = xmms
repeat = 0
end
begin
prog   = irexec
button = radio
config = amarok &
mode   = amarok
repeat = 0
end
end irexec
begin xmms
begin
button = play
prog = xmms
config = play
end
begin
prog = xmms
button = pause
config = pause
end
begin
prog = xmms
button = stop
config = stop
end
begin
prog = xmms
button = skipf
config = next
end
begin
prog = xmms
button = skipr
config = prev
end
begin
prog = xmms
button = forward
config = FWD 3
repeat = 2
end
begin
prog = xmms
button = reward
config = BWD 3
repeat = 2
end
begin
prog = xmms
button = off
config = QUIT
mode = irexec
repeat = 0
end
end xmms
begin amarok
begin
prog   = irexec
button = play
config = dcop amarok player playPause
end
....
begin
prog   = irexec
button = off
config = dcop amarok MainApplication-Interface quit
mode   = irexec
repeat = 0
end
end amarok


Mit folgenden Befehlen werden jetzt die beiden Daemons als normaler Nutzer gestartet:

/usr/bin/irexec -d /etc/lircrc
/usr/bin/irxevent &

um diese automatisch bei jedem Neustart zu laden schreibt man am besten ein bash-Script und legt dieses in

/home/<Nutzername>/.kde/Autostart/

Beispiel bash-Script lircstart.sh:

#!/bin/bash
sleep 2
/usr/bin/irexec -d /etc/lircrc
/usr/bin/irxevent &
kdialog --passivepopup "IREXEC und IRXEVENT wurden gestartet" 3

Diese muss dann noch ausführbar gemacht werden:

# chmod +x /home/<Nutzername>/.kde/Autostart/lircstart.sh

Probleme mit Lirc

Wenn man bei laufendem Lirc den USB-Funkempfänger entfernt dann wird innerhalb ganz kurzer Zeit das Logfile lircd unter /var/log/ mit Fehlermeldungen überflutet. Bei einer Größe von über 2GB wird dann der Runlevel lirc abgeschossen und kann nicht mehr gestartet werden.
Um dies zu vermeiden sollte man lirc nicht als Runlevel starten. Also nicht mit chkconfig lirc on auf Autostart setzten, sondern mit folgendem Script nur auf Bedarf starten bzw beenden:

Lirc_StartStop.sh

#!/bin/bash
#
# Lirc starting script writen by Schneider Johnny 06112006
# Dieses Schript prüft wie groß das Log-File von Lirc ist und löscht es gegebenenfalls.
# Dann wird geprüft ob sich der Funkempfänger am USB-Slot befinden und startet dann Lirc.
# Wenn der Empfänger entfernt wird dann lässt sich der Lirc-deamon beenden.
# Variablen erstellen
GEFUNDEN=
FS=                 # Leere Variable für die Dateigrösse (FileSize)
DATEI=20000000     # Variable für den Vergleich erzeugen und mit Wert belegen
# 1. Abschnitt
# prüfen ob Log-Datei lircd vorhanden ist
if (test -f /var/log/lircd);
then
#echo "Datei gefunden!"
# Dateigrösse von /var/log/lircd ermitteln und mit Hilfe
# der Kommandosubstitution in eine Variable schreiben.
FS=$(ls -l /var/log/lircd | tr -s " " | cut -d " " -f 5)
# Bildschirmausgabe über Dateigröße
#echo "Die Log-Datei Lircd ist $FS Byte groß."
fi
if (test $FS -gt $DATEI);then
#echo "Die Datei ist zu groß und wird jetzt gelöscht ..."
kdesu rm /var/log/lircd
#else
#echo "Die Dateigröße ist ok"
fi
# Es wird geprüft ob der Funkempfänger Medion X10 angeschlossen ist
if ( ps x | grep lirc | grep -v grep );then
kdesu killall lircd
kdialog --passivepopup "Der Lirc-Deamon wurde beendet !!!!" 4 
elif ( lsusb | grep X10 | grep -v grep );then
kdesu rclirc start
/usr/bin/irexec -d /etc/lircrc
/usr/bin/irxevent &
kdialog --passivepopup "IREXEC und IRXEVENT wurden gestartet" 3
#echo "Lirc-deamon wird gestartet ..."
else
exit
fi


Jetzt kann man bequem vom Sofa aus seine Programme steuern.
Viel Glück und viel Spass bei der Umsetzung!

Quellen und weiterführende Links


Zurück zu Hardware