LPD als Jukebox
LPD war gestern, CUPS ist heute, so wird behauptet - doch LPD erlebt heute sein großes Revival als geekige, netzwerkfähige Jukebox.
Alles was man dazu braucht, ist ein Computer mit Soundkarte, MP3/Ogg/WAV-Player, den LPD (Line Printing Daemon) und das »richtige« Betriebssystem.
Nach der Installation des LPD muss die Datenbank-Datei »printcap«, welche sich üblicherweise in /etc/printcap befindet, um den Eintrag unserer Jukebox bereichert werden.
jukebox: :lp=/dev/null:\ :sd=/var/spool/lpd/audio:\ :if=/usr/bin/audiofilter:\ :af=/var/log/audio-acct:\ :lf=/var/log/audio-errs:\ :sh
Was in der »Printcap« geschieht, möchte ich hier zum allgemeinen Verständnis kurz auflisten.
jukebox:
- Der Druckername der Jukebox.:lp=/dev/null:
- In diesem Fall steuern wir kein physikalisches Gerät an und setzen den Wert daher ins Nirvana.:if=/usr/local/bin/audiofilter:
- Der Eingangsfilter zur Wiedergabe des Sounds.:af=/var/log/audio-acct:
- Hier wird mitprotokolliert wer wann was durch die Lautsprecher jagt. Somit könnten lustige Statistiken erstellt werden.:lf=/var/log/audio-errs:
- Hier landen Fehlermeldungen. Zumindest manche. Der Rest landet in /var/spool/lpd/audio/status.pr.:sh
- Dadurch werden Header Informationen abgestellt, die normalerweise mitgesendet werden. Das ist wichtig, da sonst »Mist« vor den Songs gesendet wird, der den »Audiofilter« verwirren könnte.
Die oben genannten Protokoll-Dateien müssen jetzt noch erzeugt (touch /var/log/audio-acct /var/log/audio-errs
) und mit den richtigen Rechten (chown lp /var/log/audio-acct /var/log/audio-errs
) versehen werden.
Nun kommen wir aber zum wichtigsten Teil unserer Jukebox: Dem »Audiofilter«, der dafür verantwortlich ist, dass die Musik an diverse Audioprogramme weitergereicht wird. Der folgende Code sollte unter /usr/bin/audiofilter abgelegt und mit chmod a+x /usr/bin/audiofilter
für jeden ausführbar gemacht werden.
#!/bin/bash # # This script was originally made by Teddy Hogeborn. # Small alterations was made by: # Peter Lundqvist # Patrick Wagstrom # Daniel K. Gebhart # # This is a "printer filter" for playing audio files for arg in "$@"; do case "$arg" in -d*) dir="${arg#-d}" ;; -e*) basefile="${arg#-e}" ;; -f*.*) ext="${arg##*.}" ;; esac done mp3player="mpg123 -q"; modplayer="mikmod --quiet --playmode 0 --noloops --norc" oggplayer="ogg123 --quiet" file="${dir}/${basefile}" type="$(file "${file}"| sed -e 's/^[^:]*: *//')" case "$type" in MP3*) $mp3player - ;; Ogg*Vorbis*) $oggplayer - ;; RIFF*\ WAVE\ audio*) play --type=wav --silent /dev/stdin ;; *Extended\ Module\ sound\ data*|*Protracker\ module\ sound\ data*) $modplayer $file ;; data|*audio*) if ogginfo "$file" 2>/dev/null | grep --quiet -e '^header_integrity=pass' >/dev/null; then $oggplayer - elif mp3info -x "$file" 2>/dev/null | grep --quiet -e '^File:' > /dev/null; then $mp3player - else play --type=auto --silent "$file" || play --type="$ext" --silent "$file" fi ;; *) echo "$type" >&2 ;; esac
Somit ist unsere Jukebox fertig und wartet auf heiße Rythmen. Gefüttert wird sie dann mit lpr -P jukebox <track.ogg>
. Der Status kann via lpq -P jukebox
abgerufen werden.