Anleitung Lirc Installation für Antec Fusion mit Atric Empfänger
Akku (Diskussion | Beiträge) (Startskript) |
Akku (Diskussion | Beiträge) |
||
Zeile 137: | Zeile 137: | ||
[...] | [...] | ||
− | === | + | ===Auto-Startskript=== |
Damit der lircd beim Booten automatisch gestartet wird legen wir ein init.d Skript an: | Damit der lircd beim Booten automatisch gestartet wird legen wir ein init.d Skript an: | ||
Version vom 26. April 2009, 11:30 Uhr
Diese Anleitung beschreibt, wie man LIRC und LCDProc auf Ubuntu 9.04 installiert um das im Antec Fusion eingebaute LCD sowie einen externen IR-Empfänger zu nutzen. Die Anleitung funktioniert möglicherweise auch mit anderen Gehäusen, die das gleiche Soundgraph LCD verbaut haben, sowie mit anderen IR-Empfängern.
Inhaltsverzeichnis |
Hintergrund
Das Gehäuse "Antec Fusion Remote" hat zwar einen IR-Empfänger eingebaut, dieser kann aber nur mit MCE Fernbedienungen umgehen. Ich habe deswegen in das Gehäuse einen Atric IR-Einschalter eingebaut. Damit man das verbaute LCD-Display, den Lautstärkeregler an der Front, sowie den zusätzlichen IR-Empfänger nutzen kann, muss man LIRC entsprechend installieren und konfigurieren. Den IR Empfänger des Atric Einschalter habe ich hinter dem Frontpanel platziert, wo standardmäßig der IR-Empfänger des integrierten Soundgraph Moduls verbaut ist.
LIRC
Vorbereitung
Diese Installationsanleitung ist geschrieben für Ubuntu Jaunty Jackalope (9.04) und das Imon Device von Soundgraph 15c2:0038.
Man kann mit lsub prüfen, ob man das richtige Modul installiert hat:
$ lsusb |grep -i sound Bus 003 Device 003: ID 15c2:0038 SoundGraph Inc.
mkdir src cd src wget http://prdownloads.sourceforge.net/lirc/lirc-0.8.4a.tar.bz2 tar xvfj lirc-0.8.4a.tar.bz2 rm -r lirc-0.8.4a.tar.bz2 cd lirc-0.8.4a/
Der Trick besteht darin, zuerst Lirc jeweils einmal separat für das Imom zu installieren und anschließend für den IR-Emfpänger. Danach kann man beide zusammenbringen, dazu später mehr.
Installation
./configure --with-driver=imon make -j2 sudo make install
./configure --with-driver=serial make -j2 sudo make install
Leider installiert der make install die Kernel-Module unter Ubuntu 9.04 an einen falschen Ort. Deswegen müssen wir diese noch manuell anpassen:
cd /lib/modules/2.6.28-11-generic/kernel/ubuntu/lirc/lirc_imon sudo mv lirc_imon.ko lirc_imon.ko.old sudo ln -s /lib/modules/2.6.28-11-generic/misc/lirc_imon.ko lirc_imon.ko
cd /lib/modules/2.6.28-11-generic/kernel/ubuntu/lirc/lirc_serial sudo mv lirc_serial.ko lirc_serial.ko.old sudo ln -s /lib/modules/2.6.28-11-generic/misc/lirc_serial.ko lirc_serial.ko
cd /lib/modules/2.6.28-11-generic/kernel/ubuntu/lirc/lirc_dev sudo mv lirc_dev.ko lirc_dev.ko.old sudo ln -s /lib/modules/2.6.28-11-generic/misc/lirc_dev.ko lirc_dev.ko
Jetzt laden wir die Module in den Kernel:
sudo setserial /dev/ttyS0 uart none sudo modprobe lirc_imon sudo modprobe lirc_serial sudo depmod -ae
Wenn alles gut geht, sollte es unter /dev mehrere lirc und lcd Devices geben:
$ ls /dev/li* /dev/lirc /dev/lirc0 /dev/lirc1 /dev/lirc2 /dev/lircd /dev/lircm
$ ls /dev/lc* /dev/lcd0 /dev/lcd1
Mit dem Befehl dmesg können wir nachsehen was passiert ist:
$ dmesg [ 1898.112683] lirc_dev: IR Remote Control driver registered, major 61 [ 1898.114662] lirc_imon: Driver for Soundgraph iMON MultiMedia IR/VFD, v0.3 [ 1898.114666] lirc_imon: Venky Raju <dev@venky.ws> [ 1898.114696] lirc_imon: imon_probe: found IMON device [ 1898.114702] lirc_dev: lirc_register_plugin: sample_rate: 0 [ 1898.114767] lirc_imon: imon_probe: Registered iMON plugin(minor:0) [ 1898.114806] lirc_imon: imon_probe: iMON device on usb<3:3> initialized [ 1898.114817] lirc_imon: imon_probe: found IMON device [ 1898.114822] lirc_dev: lirc_register_plugin: sample_rate: 0 [ 1898.114853] lirc_imon: imon_probe: Registered iMON plugin(minor:1) [ 1898.114890] lirc_imon: imon_probe: iMON device on usb<3:3> initialized [ 1898.114919] usbcore: registered new interface driver lirc_imon [ 1922.820064] lirc_serial: auto-detected active low receiver [ 1922.820071] lirc_dev: lirc_register_plugin: sample_rate: 0
Konfiguration
Damit wir den setserial nicht bei jedem Boot absetzen müssen, tragen wir ihn in die /etc/serial.conf ein.
sudo nano /etc/serial.conf
Folgende Zeile am Ende einfügen, falls bereits eine Zeile drin steht die mit /dev/ttyS0 beginnt, diese mit # auskommentieren.
/dev/ttyS0 uart none
In der autoserial.conf deaktivieren wir noch den letzten Eintrag mit #.
sudo nano /var/lib/setserial/autoserial.conf
Damit die Module beim Systemstart automatisch geladen werden editieren wir noch die /etc/modules:
sudo nano /etc/modules
Am Ende fügen wir folgende Zeilen ein:
alias char-major-61 lirc_serial options lirc_serial irq=4 io=0x3f8 lirc_imon is_lcd=1 lirc_serial
Jetzt müssen wir noch die Reihenfolge beim Boot anpassen, dass der setserial abgesetzt wird bevor die Kernel-Module geladen werden:
cd /etc/rcS.d/ sudo mv S30etc-setserial S05etc-setserial
So, jetzt können wir einmal rebooten um zu testen ob auch alles funktioniert. Nach dem Reboot sollte es folgendermaßen aussehen:
$ ls /dev/lirc* /dev/lirc0 /dev/lirc1 /dev/lirc2 $ ls /dev/lcd* /dev/lcd0 /dev/lcd1
Die Devices lirc0 und lirc1 sind die Geräte die vom Soundgraph Modul kommen, wobei der Volume-Regler an der Gehäusefront auf lirc1 liegen sollte. Das Device lirc2 ist der serielle Empfänger.
Test
Mit mode2 kann man die Geräte testen, hier habe ich am Regler gedreht:
$ sudo mode2 -r -d /dev/lirc1 code: 0x00010000 code: 0x01000000
Hier auf der RC5-Ferbedienung gedrückt:
$ sudo mode2 -d /dev/lirc2 pulse 33 space 9410461 pulse 880 space 778 pulse 1760 space 1591 [...]
Auto-Startskript
Damit der lircd beim Booten automatisch gestartet wird legen wir ein init.d Skript an:
sudo nano /etc/init.d/lircd
Folgenden Inhalt kopieren wir in das Skript:
#! /bin/sh ### BEGIN INIT INFO # Provides: lirc # Required-Start: $etc-setserial # Required-Stop: $etc-setserial # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Starts the lircd ### END INIT INFO # Author: Stephan Häuslschmid # Do NOT "set -e" # PATH should only include /usr/* if it runs after the mountnfs.sh script PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="LIRC" NAME=lircd DAEMON=/usr/local/sbin/$NAME DAEMON_ARGS0="--driver=default --pidfile=/var/run/lircd.0.pid --device=/dev/lirc0 --listen=8765" DAEMON_ARGS1="--driver=default --pidfile=/var/run/lircd.1.pid --device=/dev/lirc1 --listen=8766" DAEMON_ARGS2="--driver=default --pidfile=/var/run/lircd.2.pid --device=/dev/lirc2 --output=/dev/lircd --connect=localhost:8765 --connect=localhost:8766" PIDFILE0=/var/run/$NAME.0.pid PIDFILE1=/var/run/$NAME.1.pid PIDFILE2=/var/run/$NAME.2.pid SCRIPTNAME=/etc/init.d/$NAME # Exit if the package is not installed [ -x "$DAEMON" ] || exit 0 # Read configuration variable file if it is present [ -r /etc/default/$NAME ] && . /etc/default/$NAME # Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh # Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions # Function that starts the daemon/service do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started start-stop-daemon --start --quiet --pidfile $PIDFILE0 --exec $DAEMON -- $DAEMON_ARGS0 start-stop-daemon --start --quiet --pidfile $PIDFILE1 --exec $DAEMON -- $DAEMON_ARGS1 start-stop-daemon --start --quiet --pidfile $PIDFILE2 --exec $DAEMON -- $DAEMON_ARGS2 return 0 } # Function that stops the daemon/service do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE0 --name $NAME start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE1 --name $NAME start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE2 --name $NAME RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON [ "$?" = 2 ] && return 2 # Many daemons don't delete their pidfiles when they exit. rm -f $PIDFILE0 rm -f $PIDFILE1 rm -f $PIDFILE2 return "$RETVAL" } # Function that sends a SIGHUP to the daemon/service do_reload() { start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE0 --name $NAME start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE1 --name $NAME start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE2 --name $NAME return 0 } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; restart|force-reload) log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2 exit 3 ;; esac :
Anschließend das Skript speichern, schließen und ausführbar machen:
sudo chmod 755 /etc/init.d/lircd