{{tag> ubuntu lubuntu vertretungsplan pqiv firefox mplayer}}
====== Ein digitales Infobrett ======
===== Idee =====
Unsere Schule erstellt Vertretungspläne mit Untis. Da wir mehrere Gebäudeteile haben und unser Vertretungsplaner nicht mehr allmorgentlich rundlaufen möchte, habe ich damals ein System zusammengestrickt, diese Vertretungspläne möglichst ohne große Veränderungen für die Planer auf Monitoren darzustellen.
Ein erstes System hat die JPEG-Funktionalität des freien PDF-Creator genutzt, um automatisch neben der Papierausgabe auch eine JPEG-Datei zu erzeugen. Diese wurden automatisch auf einem eigenen Samba-Vertretungsplanverzeichnis gespeichert. Dieses ist auf allen Rechnern im Schulnetz als nur-lesbares Laufwerk eingebunden.
Auf vorhandenen leinen Rechnern haben wir ein Lubuntu installiert und den Ordner ebenfalls eingebunden. Nach der automatischen Anmeldung startet ein kleines Skript, welches in vordefinierten Zeitintervallen die JPEG-Dateien vom Server in ein lokales Verzeichnis auf eine Datei kopiert (und ggf. überschreibt). Der Bildbetrachter pqiv ist so eingestellt, dass er diese Datei im Vollbild darstellt. Schön dabei: ändert sich das Bild, aktualisiert pqiv die Anzeige automatisch.
===== Das derzeitige System =====
Irgendwann trat das Schülerfernsehen mit dem Wunsch an mich heran, ihre Filme über die Vertretungsbildschirme schauen zu können. Daraufhin habe ich mich noch einmal an das Skript gesetzt und es "verfeinert". Die Steuerung, was gerade auf dem vertretungsplan angezeigt wird, wird serverseitig über die Datei .job gesteuert. Derzeit mögliche Inhalte dieser Datei sind:
* jpeg - die bisherige Funktionalität. Das Skript spielt als Diashow alle Bilder ab, die im Unterordner jpeg des Vertretungsplanungs-Bildschirms liegen
* html - unter html wird die Datei heute.html aufgerufen. Die Erweiterung [[https://addons.mozilla.org/de/firefox/addon/scrollyfox/|ScrollyFox]] scrollt automatisch ab- und wieder aufwärts, die Erweiterung [[https://addons.mozilla.org/de/firefox/addon/default-fullzoom-level/|Default FullZoom Level]] vergrößert die Anzeige automatisch auf Bildschirmbreite. In der Datei steht, ob/wie oft die Seite aktualisiert wird bzw. wohin diese Seite weitergeleitet (redirect) wird.
* film - mit Hilfe des Abspielers mplayer wird der Film aktuell.flv im Unterverzeichnis film abgespielt (und ggf. wiederholt)
Über die Zahl in der Datei .wait wird die Zeit gesteuert, die die Wartezeit zwischen zwei JPEG-Bildern bzw. die Zeit, bis die HTML-Datei erneuert/weitergeleitet wird, eingestellt
==== Die Hardware ====
Dank Linbo hat man innerhalb kürzester Zeit ein komplettes Vertretungsplan-Modul zusammengebaut. Dafür benötigt man:
* einen kleinen Rechner, der im Schulnetz registriert und in die entsprechende Gruppe eingebunden ist
* einen Bildschirm, der idealerweise per kurzem DVI angeschlossen ist
* 2x Strom
* 1x Netzwerk
Bisher getestete Hardware
* Lenovo IdeaCentre Q150((Die Lenovo-Rechner laufen per HDMI-Kabel einwandfrei. Beim Anschluss über VGA war der Kernel-Parameter ''nomodeset'' bei den Linux-Kernelparametern in der start.conf notwendig.))
* Lenovo IdeaCentre Q180((Die Lenovo-Rechner laufen per HDMI-Kabel einwandfrei. Beim Anschluss über VGA war der Kernel-Parameter ''nomodeset'' bei den Linux-Kernelparametern in der start.conf notwendig.))
* Lenovo IdeaCentre Q190((Die Lenovo-Rechner laufen per HDMI-Kabel einwandfrei. Beim Anschluss über VGA war der Kernel-Parameter ''nomodeset'' bei den Linux-Kernelparametern in der start.conf notwendig.))
==== Das Cloop-Image ====
Kernstück des Systems ist ein gebrauchsfertiges Cloop-Image:
* Lubuntu 12.10
* Auto-Login als Benutzer dsb
* Energiesparen abgeschaltet
* SSH- und VNC-Zugang
* Firefox mit ScrollyFox und AutoZoom
* MPlayer samt Codecs (flv-Videos)
* pqiv als Bildbetrachter
Das Image ist derzeit gepackt ca. 650 MB groß (sicher noch optimierbar) und kann [[http://www.corvinianum.de/dsbcloop.tar.gz|hier]] heruntergeladen werden. Dazu [[http://www.corvinianum.de/dsbstart.tar.gz|hier]] die passende start.conf.dsb.
Wie beim Linuxmuster-Client ist das Passwort auf ''lolo4711'' gesetzt.
**Achtung: das Cloop ist auf genau einem Typ Rechner genau 2 Tage getestet worden. Ich nenne es deswegen mal "Beta".**
==== Serverseitige Anpassungen/Skripte ====
Auf dem Server (oder wie bei uns einem NAS) liegen die Verzeichnisse, in denen die anzuzeigenden Daten liegen:
* \\\vplans\.job
* \\\vplans\.wait
* \\\vplans\jpeg\*.jpeg
* \\\vplans\html\heute.html (und innerhalb dieser Datei verlinkte weitere Dateien)
* \\\vplans\film\aktuell.flv
//ToDo: Skript, welches die erzeugten Untis-HTML-Sätze in eine einigermaßen ansehnliche HTML-Datei für den aktuellen bzw. den Folgetag bringt und an die richtige Stelle kopiert.//
Ein "Umstellen" des Vertretungsplans erfolgt jetzt z.B. über ein
echo film > .job
Nach einem kurzen Moment beginnen alle Vertretungsplanbildschirme, den Film (in einer Schleife) abzuspielen. Ein
echo jpeg > .job
beendet den Film und schaltet zurück auf die Photo-Wiedergabe.
Ändert man durch ein
echo 14 > .wait
die Pause zwischen den Bildern, wird nach jedem Durchlauf die Wartezeit neu gesetzt, so dass man mit den Kollegen am Bildschirm eine angenehme Frequenz ausprobieren kann.
==== Clientseitige Anpassungen/Skripte ====
Anzupassen sind für den Benutzer lediglich
* die fstab (wo die Adressen und die Zugangsdaten für die Samba-Verzeichnisse liegen)
* ggf. die Passwörter des Benutzers dsb (und das Passwort des VNC-Servers unter ''vino-preferences'')
Auf dem Client laufen zwei Skripte. Das erste läuft im Hintergrund und überwacht im wesentlichen die Datei .job. Dieses Skript startet/beendet die jeweils (nicht) benötigten Programme. Es entscheidet anhand der IP, ob es sich um den Schüler- oder Lehrer-Vertretungsplan handelt.
#/bin/bash
# Aufräumen/(Offline-)Standardhintergrund
rm ~/Bilder/*
cp ~/standard.jpg ~/Bilder/0.jpg
# entscheiden, ob lehrer- oder schüler-vplan -> VZ
case $(hostname) in
dsb0[0-9])
# Schüler-Rechner
vz=/mnt/vplans
;;
dsb1[0-9])
# Lehrer-Rechner
vz=/mnt/vplanl
;;
*)
# unbekannte IP - das war wohl nix
exit 1
;;
esac
# starte "Dauerschleife" und prüfe .job
while true; do
# die Job-Datei wurde gefunden
if [ -e "$vz/.job" ]; then
# was machen wir heute?
case $(cat $vz/.job) in
"jpeg")
# andere Abspieler löschen
# andere Abspieler löschen
if [ $(pgrep -c -f 'firefox') -eq 1 ]; then pkill -f 'firefox'; fi
if [ $(pgrep -c -f 'mplayer') -eq 1 ]; then pkill -f 'mplayer'; fi
# starte JPEG-Skript
if [ $(pgrep -c -f 'sh vplan_jpeg') -eq 0 ]; then
sh vplan_jpeg $vz &
fi
;;
"html")
# andere Abspieler löschen
if [ $(pgrep -c -f 'mplayer') -eq 1 ]; then pkill -f 'mplayer'; fi
if [ $(pgrep -c -f 'sh vplan_jpeg') -eq 1 ]; then pkill -f 'sh vplan_jpeg'; fi
if [ $(pgrep -c -f 'pqiv') -eq 1 ]; then pkill -f 'pqiv'; fi
# HTML-Datei aufrufen
if [ $(pgrep -c -f 'firefox') -eq 0 ]; then
firefox $vz/html/heute.html &
fi
;;
"film")
# andere Abspieler löschen
if [ $(pgrep -c -f 'sh vplan_jpeg') -eq 1 ]; then pkill -f 'sh vplan_jpeg'; fi
if [ $(pgrep -c -f 'pqiv') -eq 1 ]; then pkill -f 'pqiv'; fi
if [ $(pgrep -c -f 'firefox') -eq 1 ]; then pkill -f 'firefox'; fi
# Film abspielen
if [ $(pgrep -c -f 'mplayer') -eq 0 ]; then
mplayer -volume 100 -loop 0 -fs $vz/film/aktuell.flv &
fi
;;
*)
# ALLE Abspieler löschen
if [ $(pgrep -c -f 'sh vplan_jpeg') -eq 1 ]; then pkill -f 'sh vplan_jpeg'; fi
if [ $(pgrep -c -f 'pqiv') -eq 1 ]; then pkill -f 'pqiv'; fi
if [ $(pgrep -c -f 'firefox') -eq 1 ]; then pkill -f 'firefox'; fi
if [ $(pgrep -c -f 'mplayer') -eq 1 ]; then pkill -f 'mplayer'; fi
;;
esac
fi
done
Das zweite Skript ist das "Diashow-Skript". Es kopiert die JPEGs vom Server in das lokale Verzeichnis Bilder und spielt diese ab. Der Übergabeparameter gibt das Grundverzeichnis an, welches angezeigt wird (wir unterscheiden hier die Mountpoints für das Lehrer- und Schülerverzeichnis).
#/bin/bash
vz=$1
# wandere durch die Bilder
while true; do
for i in $vz/jpeg/*.jpg; do
# ggf. JPEG-Skript (neu) starten
if [ $(pgrep -c -f 'pqiv') -eq 0 ]; then
pqiv -i -f -w ~/Bilder/0.jpg &
fi
cp "$i" ~/Bilder/0.jpg;
echo $i ;
# Wartezeit auslesen und warten
wartezeit=$(cat $vz/.wait)
sleep $wartezeit;
done;
done