nomodeset
bei den Linux-Kernelparametern in der start.conf notwendig.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.
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:
Ü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
Dank Linbo hat man innerhalb kürzester Zeit ein komplettes Vertretungsplan-Modul zusammengebaut. Dafür benötigt man:
Bisher getestete Hardware
Kernstück des Systems ist ein gebrauchsfertiges Cloop-Image:
Das Image ist derzeit gepackt ca. 650 MB groß (sicher noch optimierbar) und kann hier heruntergeladen werden. Dazu hier die passende start.conf.dsb.
Wie beim Linuxmuster-Client ist das Passwort auf lolo4711
gesetzt.
Auf dem Server (oder wie bei uns einem NAS) liegen die Verzeichnisse, in denen die anzuzeigenden Daten liegen:
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.
Anzupassen sind für den Benutzer lediglich
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