Lirc
Aus Ubuntu-Forum Wiki
Dieser Artikel bedarf einer Aktualisierung. |
Inhaltsverzeichnis |
1 Allgemeines
Mit Lirc (Linux Infrared Remote Control) ist es möglich das Linux System mit einer Fernbedienung zu steuern.
Dazu ist ein Infrarot-Empfänger am PC und eine handelsübliche Fernbedienung nötig.
Weitere Informationen zu Lirc sind auf der offiziellen Homepage und in den Ressourcen am Ende dieses Artikels zu finden.
Lirc besteht aus mehreren Komponenten:
- Fernbedienung
- Infrarot-Empfänger
- Lirc Kernel Module
- empfangen die Signale der Fernbedienung
- Lircd
- decodiert die Signale der Lirc Kernel Module (Konfiguration mit /etc/lirc/hardware.conf und /etc/lirc/lircd.conf)
- irexec
- Startet Programme und Aktionen, wenn der Lircd meldet, dass eine bestimmte Taste gedrückt wurde.(Konfiguration mit .lircrc im Homeverzeichnis)
- Alternativen zu irexec zum Beispiel kdelirc für KDE
- verschiedene Hilfsprogramme, wie zum Beispiel irw und irrecord.
Lirc ist in den universe Quellen in Dapper, Edgy und Feisty vorhanden.
Alle Befehle in diesem Artikel müssen in einem Terminal-Fenster eingegeben werden.
2 Installationsvorbereitung
Gearbeitet wird in dem Verzeichnis /usr/src/ und unter Benutzung von sudo.
2.1 Download der neusten Version von Lirc
cd /usr/src sudo wget http://lirc.sourceforge.net/software/snapshots/lirc-0.8.2pre1.tar.bz2
2.2 Entpacken des Archives
Das Archiv muss nun per sudo im Verzeichnis /usr/src/ entpackt werden.
sudo tar xvjf lirc-0.8.2pre1.tar.bz2
2.3 Installation benötigter Programme
Folgende Pakete müssen installiert werden:
Siehe hierzu Paketquellen und Programme installieren, für genauere Anweisung zum Freischalten der Paketquellen und zum Installieren von Paketen.
- linux-source (deiner Kernel)
- setserial
- gcc-3.4
- build-essential
Beispiel:
sudo -s apt-get install linux-source-2.6.20 setserial gcc-3.4 build-essential cd /usr/src/ tar -xvjf linux-source-2.6.17.tar.bz2 unlink linux ln -s linux-source-2.6.17 linux cd linux cp /boot/config-2.6.17-10-generic .config
2.3.1 Falls der X-Server nicht mehr startet
Wenn das der Fall ist, müssen eure Grafikkartentreiber neuinstalliert werden.
Dies gelingt durch eine manuelle Installation oder einer erneuten Installation über die Paketverwaltung.
Beispiel an den Nvidia Beta Treibern.
sh NVIDIA-Linux-x86-1.0-9755-pkg1.run
Eine genauere Vorgehensweise ist in den entsprechenden Artikeln zur Installation der Grafikkartentreiber beschrieben.
2.4 Konfigurationsdateien von Lirc erstellen
Um sich das zu erleichtern installiert man nun Lirc aus den Paketquellen.
sudo apt-get install lirc lirc-x
2.5 Lirc installieren
Nun installieren wir die neuste Version von Lirc, die wir an dieser Stelle heruntergeladen haben.
sudo -s cd /usr/src/lirc-0.8.1pre2/drivers ln -s /usr/src/linux/drivers drivers cd .. ./setup.sh make make install
Bei dem Setup ist alles einzurichten und danach Save configuration & run configure zu wählen.
2.6 Laden der Module
Nach der Installation müssen die Lirc-Module geladen werden. Welches Modul geladen werden muss, hängt von der verwendeten Hardware ab. Bsp. lirc_serial
sudo modprobe lirc_serial sudo lircd
Falls nun ein Fehler auftritt (gilt nur für lirc_serial), bitte folgendes durchführen:
sudo setserial /dev/ttyS0 uart none
2.7 Überprüfen ob die Module geladen worden sind
Falls nötig, kann man überprüfen ob die Module geladen worden sind.
irw
Danach müssen Tasten auf der Fernbedienung gedrückt werden, danach erfolgt eine Ausgabe im Terminal.
Beziehungsweise:
lsmod | grep lirc
Dann sollte eine ähnlich Ausgabe erfolgen:
lsmod | grep lirc lirc_serial 14592 1 lirc_dev 16484 1 lirc_serial
3 Einrichten von Lirc und der Fernbedienung
Sollten nun alle Module erfolgreich geladen sein und Signale von der Fernbedinung empfangen werden können, muss man Lirc einrichten.
3.1 Erstellen von lircd.conf
Nun erstellt man sich die lircd.conf die später in /etc/ und /etc/lirc/ abgelegt wid.
Man kann eine vorgefertigte lircd.conf für seine Fernbedinung von http://lirc.sourceforge.net/remotes/ herunterladen, die man dann nach /etc/ und /etc/lirc kopiert.
Falls keine passende vorhanden ist, erstellt man sich selber eine:
sudo irrecord -d /dev/lirc0 lircd.conf
Danach die Anweisungen befolgen.
Hier eine lircd.conf zur TS35 DVB-T Technisat Airstar 2
# # using lirc-0.8 on Wed May 19 00:28:01 2004 # tested with lirc-0.8.1pre2-1 # contributed by Felix Jordan # # brand: TechniSat # model no. of remote control: 100TS035 # devices being controlled by this remote: SkyStar 2 TV (DVB PCI card) # begin remote name 100TS035 bits 13 flags RC5|CONST_LENGTH eps 30 aeps 100 one 907 885 zero 907 885 plead 954 gap 113935 toggle_bit 2 begin codes MUTE 0x128D EXT 0x1AB8 A/B 0x12A3 POWER 0x1A8C TV/RADIO 0x0293 -/-- 0x1A8A 1 0x1A81 2 0x1A82 3 0x1A83 4 0x1A84 5 0x1A85 6 0x1A86 7 0x1A87 8 0x1288 9 0x1289 0 0x1A80 INFO 0x028F MENU 0x0292 EPG 0x1AAF BACK 0x1AA2 OK 0x0A97 UP 0x1AA0 DOWN 0x12A1 RIGHT 0x1A90 LEFT 0x1A91 RED 0x0AAB GREEN 0x0AAC YELLOW 0x02AD BLUE 0x02AE CHECK 0x0AB6 TXT 0x1ABC STOP 0x1AA9 HILFE 0x1A8F end codes end remote
3.2 Erstellen von .lircrc
.lircrc dient dazu die Verbindung zwischen Tasten und Befehlen herzustellen.
Die Datei wird im Homeverzeichnis abgelegt und das Programm irexec greift darauf zurück.
#Volumen begin prog = irexec button = MUTE config = amixer set Master 0 & config = amixer set Master 100 & end begin prog = irexec button = LEFT config = amixer set Master 5%- & repeat = 2 end #kaffeine begin prog = irexec button = POWER config = kaffeine & config = dcop kaffeine KaffeineIface quit & end begin button = UP prog = irexec repeat = 2 config = dcop kaffeine KaffeineIface next & end begin button = DOWN prog = irexec repeat = 2 config = dcop kaffeine KaffeineIface previous & end begin button = A/B prog = irexec config = dcop kaffeine kaffeine_mainwindow#1 hide & config = dcop kaffeine kaffeine_mainwindow#1 restore & end begin button = EPG prog = irexec config = dcop kaffeine KaffeineIface dvbOSD & repeat = 2 end begin button = BACK prog = irexec config = dcop kaffeine KaffeineIface fullscreen & config = dcop kaffeine KaffeineIface fullscreen & end begin button = 1 prog = irexec config = dcop kaffeine KaffeineIface setNumber 1 & end begin button = 2 prog = irexec config = dcop kaffeine KaffeineIface setNumber 2 & end begin button = 3 prog = irexec config = dcop kaffeine KaffeineIface setNumber 3 & end begin button = 4 prog = irexec config = dcop kaffeine KaffeineIface setNumber 4 & end begin button = 5 prog = irexec config = dcop kaffeine KaffeineIface setNumber 5 & end begin button = 6 prog = irexec config = dcop kaffeine KaffeineIface setNumber 6 & end begin button = 7 prog = irexec config = dcop kaffeine KaffeineIface setNumber 7 & end begin button = 8 prog = irexec config = dcop kaffeine KaffeineIface setNumber 8 & end begin button = 9 prog = irexec config = dcop kaffeine KaffeineIface setNumber 9 & end
Die Datei kann auch mit dem KDE Lirc-Server irkick realtiv einfach erstellt werden. Funktioniert aber nur unter X.
sudo apt-get install kdelirc
3.3 Einrichtung von irexec
irexec ist in den Lirc-Paketen enthalten.
irexec greift auf .lircrc im Home-Verzeichnis zurück.
Damit die Befehle umgesetzt werden, muss man irexec im Terminal als normaler Benutzer starten.
irexec
Damit irexec im Hintergrund läuft sollte man es mit dem Zusatz -d starten. Hierbei muss auch der Pfad zur Konfigurationsdatei angegeben werden, da irexec diese sonst nicht findet.
irexec -d /home/BENUTZER/.lircrc
Hier wäre BENUTZER mit dem verwendeten Benutzer zu ersetzen.
Nun werden die Befehle umgesetzt und nun ist es möglich z.B. in Kaffeine den TV-Sender umzuschalten.
3.3.1 Autostart von irexec
Nun wäre es auch toll, wenn irexec sich genauso wie Lirc beim Starten des Rechners automatisch läd.
3.3.1.1 Autostart von irexec via Startskript
Dies kann man über ein einfaches Startskript realisieren.
Dateiname irexec :
#! /bin/sh # /etc/rc2.d/S99irexec case "$1" in start) su BENUTZER --command='irexec -d' ;; stop) killall irexec ;; *) echo "Usage: `basename $0` {start|stop}" >&2 exit 64 ;; esac exit 0
Da ein Startskript von root gestartet wird, muss man im Skript den Befehl als normaler Benutzer ausführen.
Hier wäre BENUTZER mit dem verwendeten Benutzer zu ersetzen.
Nun kopiert man dieses Skript via sudo nach /etc/initrd/.
sudo cp irexec /etc/initrd/
und setzt Zugriffsrechte:
sudo chmod +x irexec
Zum Schluß erzeugt man einen Softlink in /etc/rc2.d/
ln -s ../initrd/irexec S99irexec
3.3.1.2 Autostart von irexec via Gnome-Startprogramme
Es ist auch möglich irexec bei den Gnome-Startprogrammen einzufügen.
Dazu geht man auf System > Einstellungen > Sitzungen > Neu
und gibt ein:
irexec -d
irexec kann natürlich auch im KDE Menü so eingetragen werden.
3.4 Autostart von Lirc
Um einen Autostart von Lirc zu realisieren, muss man die Datei hardware.conf in /etc/lirc/ editieren:
# /etc/lirc/hardware.conf # # Arguments which will be used when launching lircd LIRCD_ARGS="" #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 # Run "lircd --driver=help" for a list of supported drivers. DRIVER="" # If DEVICE is set to /dev/lirc and devfs is in use /dev/lirc/0 will be # automatically used instead DEVICE="/dev/lirc0" MODULES="lirc_serial" # Default configuration files for your hardware if any LIRCD_CONF="/etc/lircd.conf" LIRCMD_CONF=""
Hier gezeigt an dem Modul lirc_serial.
- Das verwendete Gerät (DEVICE) angeben, meist /dev/lirc0
- Das verwendete Module (MODULES) angeben, meist lirc_serial
- Die verwendeten Konfigurationsdateien (LIRCD_CONF und LIRCMD_CONF), wobei meist nur LIRCD_CONF verwendet wird
Nun wird das Modul lirc_serial automatisch beim Starten geladen.
Dies ist aber nur möglich, wenn der Serial-Port nicht belegt ist.
Da dies meist aber Standard ist muss man autoserial.conf in /var/lib/setserial/ editieren:
###PORT STATE GENERATED USING AUTOSAVE-ONCE### ###AUTOSAVE-ONCE### ###AUTOSAVE-ONCE### ###AUTOSAVE### # # If you want to configure this file by hand, use # dpkg-reconfigure setserial # and change the configuration mode of the file to MANUAL. # If you do not do this, this file may be overwritten automatically the next time you upgrade the # package. # /dev/ttyS0 uart none /dev/ttyS1 uart 16550A port 0x02f8 irq 3 baud_base 115200 spd_normal skip_test
Der verwendete Serial-Port muss mit uart none gekennzeichnet werden.
4 Problemlösungen
Bei der Installation sollte es nicht allzu große Probleme geben. Da jedoch die Einrichtung sehr komplex ist, werden hier Lösungsansätze für eventuell auftretende Probleme vorgestellt.
4.1 irw, mode2 geben keine Ausgabe
Falls irw und mode2 keine Ausgabe ergeben, folgendes probieren:
mode2 -d /dev/lirc0
Sollte es nun zu einer Ausgabe bei mode2 kommen, muss der lirc Dämon mit dem Zusatz -d /dev/lirc0 gestartet werden.
Jedoch lässt sich die verwendete Hardware in der hardware.conf festlegen.
4.2 ir_common Modul deaktivieren
Wenn gar kein Signal von der Fernbedienung zu empfangen ist, und der Empfänger z.B.:
vorher in Dapper einwandfrei funktionierte,
kann dies an dem ir_common Modul liegen, dass neu in Edgy ist.
Dieses Modul muss nun edititiert werden.
Die Datei ir-keymaps.c in /usr/src/linux-source-2.6.17/drivers/media/common/ muss folgendermaßen editiert werden:
Der Code zwischen den Klammern {} an der Stelle ir_codes_empty wird nun kopiert
und die entsprechenden Konfigurationen der verwendeten Hardware ersetzt.
Beispiel an DigitalNow DNTV Live DVB-T Remote
IR_KEYTAB_TYPE ir_codes_dntv_live_dvb_t[IR_KEYTAB_SIZE] = { [ 0x2a ] = KEY_COFFEE, };
Nun muss das Modul gebaut werden:
cd /usr/src/linux-source-2.6.20 make modules
Wenn dies abgeschloßen ist, wird der letzte Schritt ausgeführt:
cp /usr/src/linux-source-2.6.17/drivers/media/common/ir_common.ko /lib/modules/2.6.17-10-generic/kernel/drivers/media/common
Dann nur noch neustarten und das Empfangen der Signale sollte klappen.
4.3 Lircd setzt die Singale zu spät um
Es kommt vor, dass Lircd die Befehle zu spät verarbeitet.
Es hilft nach dem Hochfahren lircd zu beenden und zu starten. Danach läuft es flüssig.
Problem trat unter Kernel 2.6.18.3 nach Neuinstallation nicht mehr auf.