Kategorien
Allgemein Basteln Systemadministration

Raspberry Pi als Slideshow / Digital Signage Server

Der Raspberry Pi eignet sich durch seine kleinen Ausmaße und dem lüfterlosen Design hervorragend als einfacher „Slideshow Server“ bzw. sogenannter Digital Signage Server (DSS) um z.B. einen LCD Fernseher als Werbefläche oder für aktuelle Angebote zu betreiben. Dazu ist er deutlich günstiger als kommerzielle Geräte für diesen Zweck.

Einleitung

Welche Variante des Raspberry Pi wir verwenden ist egal. Zunächst Installieren wir Raspbian auf dem Pi. Ob über das Raspbian Image oder die NOOB SD-Karte ist jedem freigestellt. Entsprechende Images finden sich unter https://www.raspberrypi.org/downloads/

Dazu schließen wir den Pi an einen Monitor an, verbinden Tastatur und Maus und stecken die SD-Karte mit dem Installer ein, um dann den Raspberry Pi mit den Netzteil zu verbinden.

Installation

Wärend der Installation lassen wir den Rechner weiterhin in die Konsole starten und halten uns sonst an die Voreinstellung. Netzwerkeinstellungen wählen wir also passend zu unserer lokalen Umgebung. Nachdem der Raspberry Raspbian neu gebootet hat, loggen wir uns mit dem Pi Benutzer ein und aktivieren über raspi-config gleich noch SSH Server.

Wir installieren nun noch einige Pakete die wir gleich benötigen werden. Darunter x11-xserver-utils und feh unser gewähltes Slideshow Programm.

apt-get install x11-xserver-utils feh

Energiesparmodus deaktivieren

Damit der Bildschirm nicht nach einiger Zeit abdunkelt, deaktivieren wir den Energiesparmodus. Dazu fügen direkt in der zweiten Zeile der /etc/X11/xinit/xinitrx folgendes ein:

xset s off
xset -dpms
xset s noblank

Neuer Benutzer

Nun erstellen wir einen neuen Benutzer der dann später automatisch eingeloggt wird und mit dessen Rechten die Bilder angezeigt werden. Wie verwenden beispielhaft den Namen neuerbenutzer. Mit diesem Benutzer ändern wir auch später per SSH/SCP die Bilder die Angezeigt werden.

adduser neuerbenutzer

Das Passwort notieren wir uns für den spätern Zugriffe von Aussen. Alternativ lässt sich natürlich auch ein public key hinterlegen.

Autologin

Damit auch nach einem Reboot automatisch die Slideshow ohne Passworteingabe startet aktivieren wir nun die automatische Anmeldung für unseren neuen Benutzer.

Wir editieren per SSH oder Konsole die Datei /etc/inittab und suchen folgende Zeile.

1:2345:respawn:/sbin/getty 115200 tty1

Diese ändern wir wie folgt:

/etc/inittab
#1:2345:respawn:/sbin/getty 115200 tty1 
1:2345:respawn:/bin/login -f neuerbenutzer tty1 /dev/tty1 2>&1

Dabei natürlich neuerbenutzer entsprechend dem gewählten Benutzername ersetzen.

Jetzt editieren wir noch die /etc/rc.local und fügen ganz unten vor exit 0 noch eine Zeile ein.

su -l neuerbenutzer -c startx
exit 0

Damit wird der XServer mit dem neuen Benutzer gestartet.

Jetzt ist es Zeit für einen Reboot. Der Raspberry Pi sollte nun in der Oberfläche mit dem gewünschten Benutzer starten.

Slideshow Script

Wir erstellen im Home-Verzeichniss des neuen Benutzers folgendes Script:

#!/bin/bash 
FOLDER="Desktop/Bilder/"
TEMPF="/tmp/slideshow";
export DISPLAY=":0"

if [ -d $FOLDER ]
then
MD5C=$(ls -al $FOLDER | md5sum | awk '{ print $1 }');
else
echo "Error: Folder does not exist";
fi;

case $1 in
start)
feh --quiet -Z -F -Y --slideshow-delay 12 $FOLDER &
echo $MD5C > $TEMPF
;;
stop)
pgrep -f "feh" > /dev/null && kill `pgrep -f "feh"` && rm $TEMPF
;;
restart)
$0 stop && $0 start
;;
status)
if [ $(pgrep -f "feh") ]
then
echo "Slideshow running";
exit 0;
else
echo "Slideshow not running";
exit $?
fi
;;
cron)

if [ -e $TEMPF ]
then
MD5O=$(cat $TEMPF)
if [ $(pgrep -f "feh") ]
then
# Passt            
true
else
$0 start;
fi
else
echo "Slide show not started or $TEMPF vanished"
exit 0
fi

# Changes made = restart       
if [[ $MD5O != $MD5C ]]
then
echo $MD5C > $TEMPF
$0 stop
$0 start
exit 0
fi
;;
*)
echo "Usage: $0 {start|stop|reload|cron}";
exit 2
;;

esac

Es gibt verschiedene parameter wie start, stop, restart und cron. Start und Stop können wir gleich ausprobieren. Der Pfad für die Bilder muss ggf. angepasst werden bzw der Ordner erzeugt werden. Ausserdem müssten bei Bedarf die Parameter des Bildbetrachters feh angepasst werden. So zum Beispiel die Zeit zwischen den Bildern.

Sobald gestartet, kann man die Slideshow dazu veranlassen mittels cron zu prüfen ob sich die Dateien geändert haben. Der Check ist ziemlich rudimentär sollte aber robust genug sein. Werden neue Bilder gefunden startet sich die Slideshow neu und Zeigt diese an.

Damit die Slideshow direkt startet erzeugen wir noch eine Autostart Datei für unseren Fenstermanager LXDE.

[Desktop Entry]
Name=Slideshow
Exec=/home/benutzername/slideshow.sh start
Terminal=false
Type=Application

Nach einem Reboot müsste nun die Slideshow direkt starten. Für den Check editieren wir noch die cronjobs des benutzers crontab -e

* * * * * /home/benutzername/slideshow.sh cron

Damit wird jede Minute überprüft ob sich etwas geändert hat.

Nun kann man entweder direkt oder per Portforward auf den Raspberry Pi zugreifen und neue Dateien hochladen und der Monitor zeigt diese dann automatisch an. Schön wäre später auch noch Videos anzeigen zu können dies ist mit feh aber nicht möglich.

Von Christian Stengel

Geek, PHP Entwickler, Linux Admin

15 Antworten auf „Raspberry Pi als Slideshow / Digital Signage Server“

Danke für die Anleitung! Ich musste noch ein paar Zeile anpassen, aber es funktioniert. Ich hätte noch zwei Fragen dazu: kann ich als Ordner auf meinem NAS verweisen? Kann ich die Wiedergabe-Reihenfolge der Bilder auf zufällig umstellen?

LG

Hallo!
Das freut mich zu hören.

Bezüglich NAS: Du kannst den smbclient auf dem Raspberry installieren und mit etwas wie „sudo mount -t cifs -o user=changeme,password=changeme //192.168.1x.x/sharedfolder /home/username/sambashare/“ einen Ordner mounten. Dafür gibts aber auch Tutorials.

Wegen Zufall: Versuche bitte mal bei feh -z oder –randomize in die Parameter mit auf zu nehmen. Das müsste Zeile 13 im Startscript sein.

Hallo nochmal Christian,

also zufällige Wiedergabe funktioniert so wie Sie beschrieben haben, Zeile 13 wie folgt beschreiben:

feh –quiet -Z -F -Y –randomize –slideshow-delay 12 $FOLDER &

Danke für den Tipp mit dem NAS, ich habe es zwar noch nicht ausprobiert aber es klappt bestimmt auch.

Ich habe tatsächlich 32.164 Bilder mit der Auflösung 1024×768 auf einem USB-Stick gespeichert (Format FAT32, ergibt ca. 4,5 GB) und nutze diese für den Slideshow. Es funktioniert sogar auch mit so vielen Bildern! Es lädt ungefähr 10 Minuten bis der Slideshow startet (RPI B+) aber sobald es läuft, läuft es flüssig.

LG
Russell

ein kleines Update: es funktioniert auch mit einem NAS. Ein Ordner vom NAS wird, wie Christian oben beschrieben hat, montiert. Fehs greift dann auf diese Bilder zu. Ich habe z.B. Dropbox mit meinem NAS gekoppelt und habe somit immer die neusten Bilder vom Handy& co. im Slideshow drin.

Hallo Christian

in deinem Script ~/slideshow.sh sind mir zwei Dinge aufgefallen

1. in deinem Script definierst du in der dritten Zeile TEMPF=“/tmp/slideshow“;. Später im Listing verwendest du aber in Zeile 34,36, und 50 den direkten Pfad.
2. in Zeile 39 hast du zwischen then und else nur einen Kommentar stehen, der eine Fehlermedung über ein unerwartetes else verursacht.

LG

Jens

Danke Jens für die Hinweise.

In Zeile 39 hätte das „true“ eigentlich in die nächste Zeile gehört. Keine Ahnung wo der Zeilenumbruch hin ist. Den Rest habe ich soweit angepasst.
Mich würde immernoch eine Variante mit Videos interessieren aber irgendwie komme ich nicht dazu :)))

Christian

hallo Chriastian

ich habe mal dein Skript ausprobiert, leider gescheite ich ab dem Punkt mit initab
„/etc/inittab“
Ich habe Raspbian version 6 benutzt und die Datei Iniitab gibt es leider nicht. Könntest Du mir da behilflich sein. Ich bin leider blütiger Anfänger
Danke für deine Hilfe

Sorry wegen der späten Antwort. Tatsächlich gibt es in den neuen Raspbians keine inittab mehr da hier systemd als Startdienst zum Einsatz kommt.

Lösung 1:
Du könntest einmal nachschauen ob es bei dir in der GUI unter Menu>Preferences>Raspberry Pi Configuration bei System Optionen gibt wie Boot: To Desktop bzw Auto Login:

Beschreibung: Englische Anleitung – Auto Login für Rapsbian Jessie

Lösung 2:


sudo -i
mkdir -pv /etc/systemd/system/getty@tty1.service.d
nano /etc/systemd/system/getty@tty1.service.d/autologin.conf

Dann folgenden Text einfügen:


[Service]
ExecStart=-/sbin/agetty --autologin $username --noclear I 38400 linux

Habs aber nicht getestet bis jetzt.

LG,
Christian

Hallo zusammen.
Ein tolles Script und tausend Dank somit habe ich eine tolle Show zum laufen bekommen.

Aber eine Frage habe ich noch, gibt es irgendeine Möglichkeit Überblendungen einzubauen?
Ich hab gesucht wie blöd, aber es scheint nichts zu geben was aus der Kommandozeile eine Show
mit Überblendungen abspielt.

MfG

Thomas

Hallo Thomas,

freut mich das ich helfen konnte. So ganz glücklich bin ich mit feh als Slideshow Tool auch nicht. Die fehlende Videounterstützung und keine Überblendungen sind echt schade.

Aktuell schwebt mir eine Browser Lösung vor, bei der per JavaScript die Bilder geladen werden und damit auch Effekte und Videos möglich werden. Ich vermute aber dass die Stabilität darunter leiden würde. Auch könnten kleine Raspberry Pis für Videos per Browser zu langsam sein.

Gruß,
Christian

Schreibe eine Antwort zu Russell Glenn Post Antwort abbrechen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.