Contact us
Leave a message

Bitte benutzen:

Mein öffentlicher Kryptographie-Schlüssel


Mitglied bei

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