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 und den verbauten Lautstärkeregler an der Gehäusefront (Imon Device von Soundgraph 15c2:0038), 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
Installation
Diese Installationsanleitung ist geschrieben für Ubuntu Jaunty Jackalope (9.04) und das Imon Device von Soundgraph 15c2:0038.
Anmerkung: Die Anleitung funktioniert auch mit LIRC 0.8.5 und Kernel 2.6.29.4. Siehe dazu Anmerkungen im Text.
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.
Herunterladen der aktuellsten LIRC Version:
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.
Zuerst kompilieren wir Lirc für den externen Empfänger:
./configure --with-driver=serial make -j2 sudo make install ./configure --with-driver=imon
Anschließend müssen wir die Datei config.h manuell bearbeiten, damit hinterher auch das LCD funktioniert..
nano config.h
In der Datei suchen (mit STRG-W) nach der Zeile:
/* #undef LIRC_IMON_LCD */
Die Zeile einkommentieren und eine 1 dahinter schreiben, so dass Sie hinterher so aussieht:
#define LIRC_IMON_LCD 1
Anschließend kompilieren:
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: Bei (Kernel 2.6.29.4 ist das nicht notwendig)
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:
lirc_imon lirc_serial
Nun legen wir noch die Modul-Parameter fest:
sudo nano /etc/modprobe.conf
Folgende Zeilen einfügen:
alias char-major-61 lirc_serial options lirc_serial irq=4 io=0x3f8 options lirc_imon is_lcd=1
Wenn Lirc 0.8.5 verwendet wird, muss die letzte Zeile weggelassen werden.
Anschließend die Kernel Abhängigkeiten festlegen ausführen:
sudo depmod -ae
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-Fernbedienung 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
Lirc können wir nun mit dem folgenden Befehl starten bzw. stoppen:
sudo /etc/init.d/lircd start sudo /etc/init.d/lircd stop
Damit das Skript in die Bootreihenfolge eingegliedert wird setzen wir noch den folgenden Befehl ab:
sudo update-rc.d lircd defaults
Fernbedienung anlernen
Beim Anlernen der Fernbedienung ist grundsätzlich wie im LIRC-Artikel beschrieben zu Verfahren. Man muss allerdings den irrecord Befehlt für jedes Device einmal absetzen um die versch. Geräte anzulernen. Die Dateien kann man dann anschließend zusammenkopieren.
cd irrecord -d /dev/lirc1 frontpanel.lirc
Den Anweisungen am Bildschirm folgen...
irrecord -d /dev/lirc2 remote.lirc
Den Anweisungen am Bildschirm folgen...
cat frontpanel.lirc > lircd.conf cat remote.lirc >> lircd.conf rm frontpanel.lirc remote.lirc sudo /etc/init.d/lircd stop sudo mv lircd.conf /etc/ sudo /etc/init.d/lircd start
Das Device lirc0 liefert beim Antec Fusion Remote nur Werte vom MCE-IR-Empfänger. Da ich die MCE-Fernbedienung nicht nutze, habe ich hier nichts angelernt. Nun könnte man denken, dass man dann für das lirc0 Device keinen lircd starten müsste. Das sollte man aber trotzdem tun, da das Soundgraph Modul die Eigenheit hat sich aufzuhängen, sobald ein Empfänger etwas empfängt und kein passender lircd dazu gestartet ist.
Testen kann man im Anschluss mit:
irw
LCD
Installation
cd ~/src wget http://internap.dl.sourceforge.net/sourceforge/lcdproc/lcdproc-0.5.2.tar.gz wget http://codeka.com/blogs/imon/lcdproc-0.5.2-imonlcd-0.3.patch tar xvfz lcdproc-0.5.2.tar.gz rm lcdproc-0.5.2.tar.gz cd lcdproc-0.5.2/ patch -p1 < ../lcdproc-0.5.2-imonlcd-0.3.patch
Anschließend müssen wir noch eine Datei bearbeiten:
nano server/drivers/imonlcd.c
{ '|', { 0x0, 0x0, 0x0, 0xFE, 0x0, 0x0 } }, { '}', { 0x0, 0x82, 0x82, 0x6C, 0x10, 0x0 } }, { '~', { 0x0, 0x20, 0x40, 0x20, 0x10, 0x20 } }, /* { 'Ö', { 0x0, 0x1C, 0xA2, 0x22, 0xA2, 0x1C } }, { 'Ä', { 0x0, 0x04, 0xAA, 0x2A, 0xAA, 0x1E } }, { 'Ü', { 0x0, 0x3C, 0x82, 0x02, 0x84, 0x3E } }, { 'ö', { 0x0, 0x1C, 0xA2, 0x22, 0xA2, 0x1C } }, { 'ä', { 0x0, 0x04, 0xAA, 0x2A, 0xAA, 0x1E } }, { 'ü', { 0x0, 0x3C, 0x82, 0x02, 0x84, 0x3E } }, { 'ß', { 0x0, 0x7E, 0x80, 0xA8, 0xA8, 0x50 } }, */
Dort die Klammern /* und */ entfernen, sonst funktionieren später die Umlaute nicht.
Danach müssen wir noch die Render-Frequenz anpassen:
nano server/main.h
#define RENDER_FREQ 8
ändern auf
#define RENDER_FREQ 4
Anschließend können wir kompilieren:
aclocal && autoconf && automake ./configure --enable-drivers=imonlcd make sudo make install
Konfiguration
Im Anschluss müssen wir noch die Konfigurationsdateien anpassen:
sudo nano /usr/local/etc/LCDd.conf
Suchen:
Driver=curses
Ersetzen:
Driver=imonlcd
Suchen:
DriverPath=server/drivers/
Ersetzen:
DriverPath=/usr/local/lib/lcdproc/
Außerdem kann man wenn man möchte die Meldung ändern, die das Display anzeigt, wenn der LCDd heruntergefahren wurde. Da das Display beim Antec-Fusion leider nicht ausgeht wenn der PC aus ist habe ich folgende Nachricht eingefügt:
# GoodBye message: each entry represents a display line; default: builtin #GoodBye="Thanks for using" #GoodBye=" LCDproc!" GoodBye=" HTPC ist" GoodBye=" ausgeschaltet."
Am Ende anfügen:
[imonlcd] Device=/dev/lcd0 Contrast=100
Die Einstellung für den Kontrast ist Geschmackssache, für mich ist 100 am angenehmsten. Für dunkle Gehäuse kann man bspw. auch 500 verwenden.
Test
Folgender Befehl sollte eine Ausgabe auf dem LCD Display erzeugen:
sudo LCDd -f -r 4
Auto-Startskript
Auch hier müssen wir wieder ein Autostartskript anlegen:
sudo nano /etc/init.d/lcdd
Den Inhalt in die Datei kopieren:
#! /bin/sh ### BEGIN INIT INFO # Provides: lcdd # Required-Start: $etc-setserial # Required-Stop: $etc-setserial # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Starts the LCDd ### 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="Starts the LCDd" NAME=LCDd DAEMON=/usr/local/sbin/$NAME DAEMON_ARGS="-i 0 -s 1" PIDFILE=/var/run/$NAME.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 $PIDFILE --exec $DAEMON --test > /dev/null \ || return 1 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ $DAEMON_ARGS \ || return 2 } # 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=KILL/2 --pidfile $PIDFILE --name $NAME #RETVAL="$?" #[ "$RETVAL" = 2 ] && return 2 #start-stop-daemon --stop --quiet --oknodo --retry=KILL/5 --exec $DAEMON #[ "$?" = 2 ] && return 2 # Many daemons don't delete their pidfiles when they exit. killall $NAME RETVAL="$?" rm -f $PIDFILE return "$RETVAL" } # Function that sends a SIGHUP to the daemon/service do_reload() { start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --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) # # If the "reload" option is implemented then remove the # 'force-reload' alias # 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 speichern und schließen und die Rechte anpassen:
chmod 755 /etc/init.d/lcdd
Starten und stoppen können wir nun mit den folgenden Befehlen:
sudo /etc/init.d/lcdd start sudo /etc/init.d/lcdd stop
Damit das Skript in die Bootreihenfolge eingegliedert wird, setzen wir noch den folgenden Befehl ab:
sudo update-rc.d lcdd defaults
Nun sollte das LCD und LIRC funktionieren. :-)
Links
Hier sind ein paar Links auf Anleitungen aus denen ich einige Informationen übernommen habe: