Posts mit dem Label IT werden angezeigt. Alle Posts anzeigen
Posts mit dem Label IT werden angezeigt. Alle Posts anzeigen

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.

Mittwoch, 12. November 2014

Wie kommen die Bilder von der Speicherkarte auf den Rechner?

Zurzeit fotografiere ich mit einer Canon 20D, diese hat die Eigenschaft alle einhundert Fotos auf der Speicherkarte einen neuen Ordner anzulegen. Wenn die Bilder von der Speicherkarte, mit einem Kartenleser, auf meine lokale USB-Festplatte kopiert werden sollen, müsste ich jeden Ordner einzeln öffnen und die Fotos jeweils im Hunderterpack kopieren. Nach einem längeren Urlaub mit durchaus mehr als eintausend Bildern ist dieser Prozess etwas nervig. Daher habe ich mir ein Script geschrieben, dass das Suchen sowie Kopieren der Dateien für mich automatisiert übernimmt. Außerdem fragt die Scriptroutine verschiedene Parameter wie Bilder-Ordnername sowie Quell- und Zielverzeichnis ab. Der definierte Bilderordner wird dann automatisch im Zielverzeichnis erstellt.

Das Wir RawDroid während eines Urlaubs benutzen um am Tablet unserer Bilder mit Schlagworten Sternchen und/oder Farbcodes zu versehen hatte ich in einem letzten Beitrag schon erwähnt. RawDroid legt nun die sidecar Dateien in der folgenden Logik Name+Bildnummer.Bilddateiendung.xmp an. Anhand dieses Formats kann dartable keine Zuordnung zwischen Bild und sidecar Datei vornehmen, dies würde bedeuten, dass alle oben beschriebenen Definitionen nicht nutzbar wären.

Eine weitere Funktion des Scriptes ist, dass die angelegten RawDroid sidecar Dateien nach dem Kopiervorgang, in ein Format (Name+Bildnummer.xmp) umbenannt werden, mit dem es darktable gelingt die notwendige Zuordnung herzustellen.

Unter dem Text findet ihr vier Scripte die Ersten beiden inkludieren alle Funktionen wie Ordner erstellen, Kopieren und sidcar Dateien umbenennen. Die darauf folgenden haben nur die Funktion die sidcar Dateien in das richtige darktable lesbare Format zu bringen.

Um eine andere Vorgabe für das Quell/Zielverzeichnis zu definieren, müsst ihr in der Scriptvariable ( z.B. -i "/media/rs/EOS_DIGITAL/"), den Teil der in Anführungszeichen eingefasst ist, anpassen.

Damit ihr nun das ein oder andere Script auf eurem System implementieren könnt sind die gleichen Schritte wie im letzten Artikel detailliert beschrieben notwendig, nachfolgend noch mal eine kleine Zusammenfassung.
cd $HOME/scripts
nano copyPictures_from_CardReader_to_disk.sh
sudo chmod 760 copyPictures_from_CardReader_to_disk.sh
nano rename_only_XMP.sh
sudo chmod 760 rename_only_XMP.sh
#Scripttest
sudo ./copyPictures_from_CardReader_to_disk.sh
#oder
sudo ./rename_only_XMP.sh

Script mit allen Variablen, Beschreibungen und Abfragen in Englisch:
#!/bin/bash
#Define the working directory
read -e -p "Enter source path:" -i "/media/rs/EOS_DIGITAL/" SOURCE
read -e -p "Enter the path for the files:" -i "/media/rs/My\ Book/\!Picture_Backup/" FILEPATH
read -e -p "Enter the name of the new directory:" DIRECTORY
cd "$FILEPATH"

#Create a new directory for the pictures
#Neues Bilderverzeichnis erstellen
mkdir "$DIRECTORY"

#Copy only files no OS related files
#Nur Dateien keine Betriebssystemdateien kopieren
find $SOURCE -type f \( ! -iname "*.nomedia" ! -iname "*._*" \) -exec rsync -ah --progress {} "$FILEPATH/$DIRECTORY" \;

#Rename the XMP files to a darktable readable format
#Dateien in ein darktable kompatibles Format umbenennen
find "$FILEPATH/$DIRECTORY" -type f \( -iname "*.xmp" ! -iname "*CR2*" \) -print0 | xargs -0 rename 's/.xmp$/.CR2.xmp/'

Script mit allen Variablen, Beschreibungen und Abfragen in Deutsch:
#Arbeitsverzeichnisse definieren
read -e -p "Bitte Quellpfad eingeben oder mit Enter die Vorgabe bestätigen:" -i "/media/rs/EOS_DIGITAL/" QUELLE
read -e -p "Bitte Zielpfad eingeben oder mit Enter die Vorgabe bestätigen:" -i "/media/rs/My\ Book/\!Picture_Backup/" DATEIPFAD
read -e -p "Bitte neuen Verzeichnisnamen eingeben:" ORDNERNAME
cd "$DATEIPFAD"

#Neues Bilderverzeichnis erstellen
mkdir "$ORDNERNAME"

#Nur Dateien keine Betriebssystemdateien kopieren
find $QUELLE -type f \( ! -iname "*.nomedia" ! -iname "*._*" \) -exec rsync -ah --progress {} "$DATEIPFAD/$ORDNERNAME" \;

#Dateien in ein darktable kompatibles Format umbenennen
find "$DATEIPFAD/$ORDNERNAME" -type f \( -iname "*.xmp" ! -iname "*CR2*" \) -print0 | xargs -0 rename 's/.xmp$/.CR2.xmp/'

Script mit allen Variablen, Beschreibungen und Abfragen in Englisch:
#!/bin/bash
#Define the working directory
read -e -p "Enter the path to the files: " -i "/media/rs/EOS_DIGITAL/" FILEPATH

#Rename the XMP files to a darktable readable format
find $FILEPATH -type f \( -iname "*.xmp" ! -iname "*CR2*" \) -print0 | xargs -0 rename 's/.xmp$/.CR2.xmp/'

Script mit allen Variablen, Beschreibungen und Abfragen in Deutsch:
#!/bin/bash
#Arbeitsverzeichnisse definieren
read -e -p "Bitte Quellpfad eingeben oder mit Enter die Vorgabe bestätigen:" -i "/media/rs/EOS_DIGITAL/" FILEPATH

#Dateien in ein darktable kompatibles Format umbenennen
find $FILEPATH -type f \( -iname "*.xmp" ! -iname "*CR2*" \) -print0 | xargs -0 rename 's/.xmp$/.CR2.xmp/'

Wie immer stehe ich bei Fragen zu den Skripten oder bei Anregungen gerne zur Verfügung. 
Hinterlasst einfach einen Kommentar.