Samstag, 22. November 2014

Slideshow mit dem RaspberryPI

Das wir einem Fotoclub beigetreten sind und auch Ausstellungen mit unseren Bildern bestückt haben hatte ich schon geschrieben, im Zuge dieser Veranstaltungen kam die Frage auf, ob nicht alle eingereichten Bilder während der Ausstellungsdauer auf einem Beamer gezeigt werden können.

Ansich kein Problem einfach einen Laptop an den Beamer anschließen und mit dem Tool seiner Wahl eine Slideshow ablaufen lassen. Nun sollte das Starten und Beenden der Bilderanzeige, zu den jeweiligen Öffnungszeiten, von einer nicht Technik versierten Person durchgeführt werden.

Um diese Problemstellung zu lösen, habe ich mich an den in der Schublade liegenden Raspberry PI erinnert, dieser soll bei uns in Zukunft die Hausautomatisierung übernehmen. Das Ziel war nun den Raspberry so zu installieren und zu konfigurieren, dass er automatisch nach dem Einstecken des Netzteils hochfährt und die Slideshow startet, in den nachfolgenden Schritten will ich euch die Vorgehensweise erklären.

Update:
Wer nun RASPBIAN JESSIE einsetzen möchte, muss den autostart etwas anders realisieren.

Erster Schritt - Installation des Betriebssystems (RASPBIAN) Als Erstes müsst ihr euch das Betriebssystem herunterladen (Download Link) ich habe mich für RASPBIAN entschieden da dies eine Debian Variante und daher auch verwandt mit Ubuntu ist, das heißt die Konsolenbefehle sind die gleichen.

Die folgende Installationsbeschreibung lässt sich auf einem Linux System umsetzen, wenn ihr Windows oder einen Mac nutzt verlinke ich euch hier eine Anleitung.

Mit dem folgenden Befehl findet ihr heraus, welche Bezeichnung eure SD-Karte bekommen hat, sobald ihr diese in den Kartenleser eingesteckt habt. (Befehl vor dem einstecken der Karte im Terminal aufrufen)
tail -f /var/log/messages

Um das Image auf die SD-Karte zuschreiben, reicht der folgende Befehl aus. Ihr müsst gegebenenfalls den Speicherort der .img Datei sowie die Bezeichnung, der SD-Karte anpassen.
sudo dd bs=4M if=/tmp/2014-09-09-wheezy-raspbian.img of=/dev/sdd

Ergebnis:
781+1 records in
781+1 records out
3276800000 bytes (3,3 GB) copied, 144,65 s, 22,7 MB/s

Sobald der Kopiervorgang abgeschlossen ist, könnt ihr die SD-Karte von eurem Rechner entfernen und in den Raspberry einstecken und diesen mittels anschließen an die Stromversorgung zum Leben erwecken. Nach einigen Sekunden sollte euch das Konfigurationsfenster erwarten.

Hier solltet ihr nun zumindest die folgenden Punkte durchgehen. 
  1. Expand Filesystem - Dies ist notwendig damit ihr die volle Kapazität der SD-Karte nutzen könnt 
  2. Change User Password - Aus Sicherheitsgründen solltet ihr für den Standardbenutzer “pi” ein neues Passwort vergeben 
  3. Abschließend auf “Finish” und den angefragten Neustart (reboot) mit “Yes” bestätigen 
Falls ihr das Passwort nicht geändert haben solltet, lautet der Standardlogin wie folgt. 
User: pi 
Passwort: raspberry

Der nächste Schritt ist nun einen Benutzer ohne besondere Rechte anzulegen der sich nach dem Starten des Raspberry automatisch einloggen kann.
pi@MihRos-pi ~ $ sudo adduser pictures
Adding user `pictures' ...
Adding new group `pictures' (1004) ...
Adding new user `pictures' (1001) with group `pictures' ...
Creating home directory `/home/pictures' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for pictures
Enter the new value, or press ENTER for the default
 Full Name []: 
 Room Number []: 
 Work Phone []: 
 Home Phone []: 
 Other []: 
Is the information correct? [Y/n] Y
pi@MihRos-pi ~ $

Der neu erstellte Benutzer soll später auch Zugriff auf den Videoausgang (/dev/fb0) haben daher müssen wir ihn noch zu der Gruppe “video” hinzufügen.
pi@MihRos-pi ~ $ sudo adduser pictures video
Adding user `pictures' to group `video' ...
Adding user pictures to group video
Done.


pi@MihRos-pi ~ $

Um die Bilder auch abspielen zu können brauchen wir noch das Tool “framebuffer imageviewer” oder kurz “fbi”.
pi@MihRos-pi ~ $ sudo apt-get install fbi
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Suggested packages:
  imagemagick
The following NEW packages will be installed:
  fbi
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 59,7 kB of archives.
After this operation, 157 kB of additional disk space will be used.
Get:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main fbi armhf 2.07-10 [59,7 kB]
Fetched 59,7 kB in 0s (160 kB/s)
Selecting previously unselected package fbi.
(Reading database ... 73325 files and directories currently installed.)
Unpacking fbi (from .../archives/fbi_2.07-10_armhf.deb) ...
Processing triggers for mime-support ...
Processing triggers for man-db ...
Setting up fbi (2.07-10) ...
pi@MihRos-pi ~ $

Die Grundinstallation ist jetzt abgeschlossen, als Nächstes brauchen wir einen Ordner in dem wir das Skript und die später automatisch erstellten Konfigurationsdateien ablegen können das beim Starten des Raspberry ausgeführt werden soll.
pi@MihRos-pi / $ cd /usr/
pi@MihRos-pi /usr $ sudo mkdir scripts
pi@MihRos-pi /usr $ sudo chown pictures scripts/
pi@MihRos-pi /usr $ cd scripts/
pi@MihRos-pi /usr/scripts $ sudo nano fbi_local.sh
pi@MihRos-pi /usr/scripts $ sudo chown pictures fbi_local.sh
pi@MihRos-pi /usr/scripts $ sudo chmod 711 fbi_local.sh
pi@MihRos-pi /usr/scripts $
  • sudo chown pictures scripts/ - Der Benutzer “pictures” wird zum Besitzer des Ordner gemacht 
  • sudo nano fbi_local.sh - Erstellen des Skripts (Inhalt steht unten) 
  • sudo chown pictures fbi_local.sh - Der Benutzer “pictures” wird zum Besitzer des Skripts gemacht 
  • sudo chmod 711 fbi_local.sh - Die Berechtigungen des Skripts werden so angepasst, dass nur der Besitzer das Skript ändern und ausführen kann, alle anderen Benutzer können sich das Skript nur lesend anschauen

fbi_local.sh - Skript
#!/bin/bash 
filelist="/usr/scripts/files.txt"
piclist="/usr/scripts/pics.txt"
delay="3"

rm $filelist
cd  /home/pictures/slideshow
find . -iname \*.jp* > $filelist
shuf -o $piclist $filelist
fbi -readahead -noverbose -a -t $delay -l $piclist --blend 1 -s 100000
  • delay="3" - Definiert die Anzeigedauer eines Bildes in Sekunden 
  • rm $filelist - Löscht die evtl. vorhandene Bilderliste 
  • cd /home/pictures/Slideshow - Wechselt in das Verzeichnis “Slideshow” in diesem Ordner müssen sich auch die Bilder, die abgespielt werden sollen befinden. Unterordner können ebenfalls erstellt werden diese sind mit berücksichtigt. 
  • find . -iname \*.jp* > $filelist - Sucht nach Dateien mit der Endung .jp* und schreibt diese in eine Dateiliste 
  • shuf -o $piclist $filelist - Der Befehl durchmischt alle Einträge aus der Dateiliste so dass eine relativ zufällige Bildreihenfolge erreicht wird. Falls eine Reihenfolge nach Dateinamen erfolgen soll diese Zeile mit “#” auskommentieren.

Als nächstes sorgen wir dafür, dass das Script bei jedem Login von pictures automatisch aufgerufen wird. Dafür öffnen wir die Datei .profile
pi@MihRos-pi /usr/scripts $ cd /home/pictures/
pi@MihRos-pi /home/pictures $ sudo nano .profile

An das Ende fügen wir noch die folgende Zeile ein
/usr/scripts/fbi_local.sh

Wenn sich der Benutzer pictures jetzt anmeldet, wird automatisch das Script aufgerufen. Jetzt sorgen wir für den automatischen Login von pictures. Zuerst die Datei /etc/inittab öffnen:
pi@raspberrypi /home/pictures $ sudo nano /etc/inittab
#STRG+W drücken um nach der folgenden Zeile zu suchen
1:2345:respawn:/sbin/getty --noclear 38400 tty1
#Die Zeile mit “#” auskommentieren und in die nächste Reihe folgendes einfügen
1:2345:respawn:/bin/login -f pictures tty1 /dev/tty1 2>&1

Der Block sollte jetzt folgendermaßen aussehen:
#1:2345:respawn:/sbin/getty –noclear 38400 tty1
1:2345:respawn:/bin/login -f pictures tty1 /dev/tty1 2>&1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6

Update für RASPBIAN JESSIE:
Mit Debian Jessie haben die Entwickler entschieden ein neues init System mit dem Namen "systemd" zu verwenden.
Daher hat sich die Autologin Methode etwas geändert.
sudo /etc/systemd/system/getty@tty1.service.d/autologin.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin "pictures" %I
Unter Umständen müsst ihr vorher den Ordner "getty@tty1.service.d" erstellen
cd /etc/systemd/system/
sudo mkdir getty@tty1.service.d

Damit haben wir erzielt, dass sich der Benutzer “pictures” automatisch einloggt. Falls der User sich ausloggt, oder seine Shell beendet wird, wird er ebenso automatisch wieder eingeloggt.
Damit wir jetzt unser Skript testen können, erstellen wir auf einem USB Stick (FAT32 oder ext3/4 formatiert) einen Ordner mit dem Namen “slideshow” und kopieren ein paar Bilder in diesen.
pi@MihRos-pi ~ $ sudo mkdir /media/usbstick
pi@MihRos-pi ~ $ tail -f /var/log/messages
#USB Stick in den Raspberry einstecken
Nov 22 15:30:01 MihRos-pi kernel: [  832.672527]  sda: sda1
pi@MihRos-pi ~ $ sudo mount /dev/sda1 /media/usbstick
pi@MihRos-pi ~ $ sudo cp -R /media/usbstick/slideshow /home/pictures/

Als letzten Installationsschritt bringen wir den Raspberry noch auf den letzten Stand. Voraussetzung dafür ist natürlich eine bestehende LAN/WLAN Verbindung zum Internet. Falls dies nicht vorhanden sein sollte könnt ihr diesen Schritt überspringen.
pi@MihRos-pi ~ $ sudo apt-get update
pi@MihRos-pi ~ $ sudo apt-get upgrade

Jetzt können wir den Raspberry mit dem folgenden Befehl neu starten und prüfen, ob die Slideshow startet.
pi@MihRos-pi ~ $ sudo shutdown -r now

Wenn alles richtig funktioniert sollte nach dem booten des Raspberry eine Slideshow mit den Bilder automatisch erscheinen.

Hardwareliste:
Bei Fragen könnt ihr euch wie immer über die Kommentare an uns wenden.

Kommentare:

  1. Hallo,

    großes Kompliment für die sehr anschaulich "Schritt-für-Schritt" Anleitung.
    Ich habe alles so erstellt, doch leider habe ich ein Rechteprroblem nach dem automatischen Login des Users pictures.
    Das System meldet:
    ioctl KDSETMODE: Operation not permitted
    ioctl KDSETMODE: Operation not permitted
    ioctl VT_SETMODE: Operation not permitted
    Dem User pictures habe das Recht "video", wie beschrieben, erteilt.
    Ich habe lange gesucht, doch keinen Hinweis in den einschlägigen Foren gefunden.
    Auch eine Installation der älteren Version von Raspian Wheezy vom 09.09.2014 (identisch zu Deiner) brachte keine Änderung.

    Wenn ich das automatische Login aus der inittab "herausnehme", funktioniert es nach dem manuellen Login tadellos.

    Was mache ich falsch?

    AntwortenLöschen
    Antworten
    1. Hallo Ulli,

      als Erstes danke ich dir für dein Kompliment und es freut mich, dass meine Anleitung so weit verständlich war.

      Zu deinem Problem, dies kann ich leider bei mir mit Wheezy nicht nachvollziehen und dir daher auch nicht weiterhelfen. Eine kurze Suche im Netz hat, bis auf deine Frage im Pi Forum auch keine verwendbaren Treffer ergeben.

      Ich habe meinen Pi dann mal auf Jessie aktualisiert und hatte ein Problem mit dem Autologin.
      Der Artikel ist jetzt dahin gehend angepasst, dass es jetzt auch mit Raspbian Jessie funktioniert.

      Vielleicht hast du ja Lust und Zeit es mit dem neuen Raspbian noch mal zu probieren.

      Falls du noch sonstige Fragen hast melde dich einfach, sobald ich Zeit habe versuche ich diese zu beantworten.


      Viele Grüße
      Robert

      Löschen
  2. Hallo Robert,

    auch von mir ein Riesenkompliment! Diese Anleitung ist die Beste, die ich gefunden habe und funktioniert super! Sehr sehr schön! Danke!

    Jens

    AntwortenLöschen
    Antworten
    1. Hallo Jens,

      freut mich dass die der Beitrag weitergeholfen hat!
      Darf ich fragen wo du den Pi+Slideshow einsetzt?!


      Viele Grüße
      Robert

      Löschen
  3. Hallo Robert! Vielen Dank für die super Anleitung! Hat nach dieser gleich auf Anhieb funktioniert- auch klasse das du es aktuell hälst (Update für RASPBIAN JESSIE, keine inittab).
    Danke! Gruß Martin

    AntwortenLöschen
  4. Hallo Robert,

    danke für die tolle Anleitung. Soweit hat nun auch alles geklappt.
    Ich habe nun folgedene Herausforderung. Das ganze läuft auf meiner Fotobox. Wie bekomme ich es hin, dass es immer mal wieder den Ordner neu lädt damit auch die neuen Bilder in der Diashow mit auftauchen?

    Viele Dank und Viele Grüße
    Marko

    AntwortenLöschen