Alles für die Couch
LIRC -- Die Hardware
Zunächst zum Infrarot-Empfänger, der nicht der im Web verbreitetsten Spezifikation, sondern der im c't-Artikel Ein Pinguin sieht (infra)rot (c't 18/2000) vorgestellten Schaltung entspricht. Der Empfänger wurde hinter einem (zugegeben: hässlichen...) selbst gebohrten Loch in der Frontplatte des Gehäuses installiert und über den internen seriellen Port (COM2) des Mainboards angeschlossen.
Hier mein Schaltungs-Layout für eine Standard-Lochrasterplatine (geht bestimmt noch kompakter):
LIRC -- Die Software
Die lirc-Treiber lassen sich inzwischen problemlos mittels des "module-assistant" aus den Quellen kompilieren; benötigt wird nur der Treiber "lirc_serial" (für COM2). (Die Verwendung des seriellen LIRC-Treibers ist übrigens der Grund dafür, dass der Kernel-Treiber für die serielle Schnittstelle als eine der wenigen Ausnahmen meines weitgehend monolithischen Kernels als Modul compiliert wird - nur so hat "lirc_serial" eine Chance, sich rechtzeitig einzunisten. Falls LIRC partout nicht funktionieren will, einfach mal ein wenig mit "setserial" herumspielen -- hätte ich das früher gewusst, hätte ich ca. 3 Nächte länger schlafen können...)
Fernbedienung
Zum Einsatz kommt das Modell URC 7730 der Marke "One For All", deren DVD-Typ auf 0490 engestellt wurde (TV wird -- ganz intuitiv -- für den Fernseher und VCR für den Videorecorder verwendet) und dessen "lircd.conf" wie folgt aussieht:
Die "lircrc" ist derzeit auf 3 Dateien verteilt, wobei "lircrc.ggames" noch keine wirkliche Funktion hat (s. Schlussbemerkungen). Für alle Dateien sind Links eingerichtet, so dass sie sowohl unter "/etc" als auch unter "/etc/lirc" zu finden sind:
Gestartet wird der Lirc-Daemon über ein start/stop-Srkript, das auf dem "/etc/init.d/skeleton"-Gerüst beruht; entsprechende Start-Links sind für die Runlevel 2 bis 5 als "S20lirc" angelegt.
Das in "lircrc" aufgerufene Skript "toggleMythFrontend" sieht wie folgt aus:
/usr/local/bin/toggleMythFrontend
#!/bin/sh # toggleMythFrontend -- launch mythfrontend if not # running; kill it otherwise # # This script is called by lirc in order to switch # the frontend on or off on pressing the power # button on remote control # Check whether mythfrontend is running or not if [ `ps -e | grep mythfrontend | wc -w` -gt 0 ]; then # Mythfrontend is running, hence kill it /usr/bin/sudo killall mythfrontend else # Mythfrontend is not running # # Check whether mythbackend is running (should # be running before launching mythfrontend) if [ `ps -e | grep mythbackend | wc -w` -eq 0 ]; then # If mythbackend is not running, launch it now /usr/bin/sudo /etc/init.d/mythtv-backend start sleep 5 fi # Launch mythfrontend /bin/su - mythtv -c "export DISPLAY=:0; /usr/bin/mythfrontend --logfile /var/log/mythtv/mythfrontend.log" & echo "`date`: renicing myth and mysql" >> $LOG mythRenice fi
Dieses Skrpt erlaubt es, das MythTV-Frontend mit dem Power-Knopf der Fernbedienung abwechselnd ein- und auszuschalten. Damit kann dem Backend die Möglichkeit eingeräumt werden, den Rechner (sofern keine Aufnahme läuft oder in Kürze ansteht) herunter zu fahren und man kann das Frontend bei Bedarf nachstarten, falls der Rechner für eine Aufnahme selbstätig hochgefahren ist (s. auch Suspend & Wakeup).
Nett sein
Auch bei 1 GHz Taktfrequenz ist ein Via C3-Prozessor nicht gerade ein Kraftprotz -- und wenn dann der MySQL-Dämon meint, er müsse gerade jetzt total dringend mal ein paar Datensätze aktualisieren, kommt die Video-Wiedergabe doch etwas ins Stocken... Um dem Frontend höchste Priorität einzuräumen, werden folgende beiden Skripte verwendet. Die eigentlich wichtigste Aufgabe von MythTV, nämlich die Aufnahme von Fernsehsendungen, wird nach bisherigen Erfahrungen davon nicht beeinträchtigt, benötigt das Weiterleiten der empfangenen MPEG2-Ströme zur Festplatte doch nur in paar Prozent Prozessorzeit.
/us/local/bin/mythRenice
#!/bin/sh # mythrenice -- renice some myth-related # processes according to the # priorities they *really* need # Initialize some variables source initSleepVars # Backend: moderate priority sudo reniceByName 9 mythbackend # MySQL: moderate priority sudo reniceByName 9 mysql # Frontend: high priority sudo reniceByName 0 mythfrontend
/usr/local/sbin/reniceByName
#!/bin/sh # reniceByName -- renice all processes whose names # comply to a regular expression # Usage: reniceByName nice_value process_name_regex NICE=$1; NAME=$2; # For all processes compliant with regex, find pid... for PID in $( ps -e | grep $NAME | awk '/.*/ {print $1}' ); do # ...and renice respective process renice $NICE $PID; done