Anleitung Lirc Installation für Antec Fusion mit Atric Empfänger
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 [...]
Automatisch starten
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