USB-Export-Tool für Photobooth-Projekt

Wichtiger Hinweis:

Dieses Tool ist speziell erstellt für das Photobooth-Projekt: https://photoboothproject.github.io/ 

getestet auf

Raspi 5 mit Raspberry PiOS

Da die integrierte automatische Funktion zum Synchronisieren des "data"-Ordners oft nicht funktioniert, habe ich mit Hilfe von ChatGPT ein Python-Skript erstellt, mit dem man einen Sync-Lauf manuell anstoßen kann.

Beschreibung

Python Skript mit TKINTER zur manuellen Übertragung der Fotos auf einen beliebigen USB-Stick

Ziel:

Photobooth wird mit Alt-F4 beendet, Tool kann per Desktopverknüpfung gestartet werden.

Funktion:

Das Tool findet den erstbesten USB-Stick und zeigt Name und Größe an. Das Tool ermittelt die in /data vorhandenen Ordner und zeigt sie mit Auswahlkästchen an. Man wählt die Ordner aus, die kopiert werden sollen. Spracheinstellung und Ordnerauswahl werden in der usb-sync.cfg gespeichert.

Klick auf START löst den Kopierprozess aus. Das Logfenster zeigt den Fortschritt.

Auf dem Ziel-USB-Stick werden Unterordner mit Datum-Angabe erzeugt, in denen die Dateien (mit ihren Unterordnern) landen.

Nach Ende des Kopiervorganges kann der Stick per AUSWERFEN de-mounted werden. Erst im Anschluss wird der Button SHUTDOWN aktiv. Dieser fährt den Raspi ohne Rückfrage herunter.

Besonderheiten:

1) Bei der Zuordnung der Bilder vom Tageswechsel nicht um 0:00 Uhr sondern von 10:00 Uhr aus. Das heißt, alle Fotos, die bis 10 Uhr entstanden sind (nach Mitternacht), werden dem Vortag zugeordnet. Systemdatum des Raspi sollte dann stimmen.... (Internetzugang??)

2) Startet man den Sicherungslauf mehrmals am selben Tag, werden keine Fotos überschrieben, sondern ein neuer Tagesordner mit ...(1) angelegt.


Download

Einrichtung

Das Skript samt dateien muss in den Ordner:

/var/www/html/private/usb-sync-tool

darunter liegen: 

../app.py
../run.sh
../usb-sync.cfg
../lang/de.json
../lang/en.json
../lang/es.json
../lang/fr.json

Desktop-Verknüpfung anlegen - user (hier pi5) anpassen

sudo nano /home/pi5/Desktop/usb-sync-tool.desktop

Inhalt der **usb-sync-tool.desktop**

[Desktop Entry]
Version=1.0
Type=Application
Name=USB Sync Tool
Comment=Photobooth USB Export Tool starten
Exec=/var/www/html/private/usb-sync-tool/run.sh
Path=/var/www/html/private/usb-sync-tool
Icon=drive-removable-media
Terminal=false
StartupNotify=true
Categories=Utility;

Die o.g. Verknüpfung startet die run.sh, über die die app.py aufgerufen wird. Soll die app.py direkt gestartet werden, dann wäre der Inhalt so:

[Desktop Entry]
Version=1.0
Type=Application
Name=USB Sync Tool
Comment=Photobooth USB Export Tool starten
Exec=python3 /var/www/html/private/usb-sync-tool/app.py
Path=/var/www/html/private/usb-sync-tool
Icon=drive-removable-media
Terminal=false
StartupNotify=true
Categories=Utility;

Skripte müssen ausführbar gemacht werden:

chmod +x /var/www/html/private/usb-sync-tool/run.sh
chmod +x /var/www/html/private/usb-sync-tool/app.py

Die .desktop Datei muss ebenfalls ausführbar gemacht werden, hier wieder den Benutzer (pi5) anpassen

sudo chmod +x /home/pi5/Desktop/usb-sync-tool.desktop


Hinweis zur Bedienung ohne Tastatur

Da ich keine Tastatur angeschlossen habe, musste ich eine Lösung finden, wie ich den Chromium-Browser im Kiosk-Mode über das Adminpanel beenden kann.

Ich dachte mir, der Befehl für "SHUTDOWN" im Adminpanel wäre dafür ideal. Allerdings ist das nicht ganz trivial.

Ich gebe hier mal meine Vorgehenmsweise weiter - ohne Anspruch auf Funktion.

Ziel:

  • Der Browser startet im Kiosk-Modus automatisch
  • der Befehl pb-kiosk-stop soll den Browser-Prozess als root sauber beenden
  • sudo-befehl muss ohne passwort starten
  • der Desktop liegt frei, so das das Kopiertool gestartet werden kann

1.) Anlegen des Beendigungsskriptes:

sudo nano /usr/local/bin/pb-kiosk-stop

Inhalt:

#!/bin/bash
sudo -u pi5 /usr/bin/pkill -f 'chromium'

2.) Ausführbar machen:

sudo chmod 755 /usr/local/bin/pb-kiosk-stop

3.) im Adminpanel bei Befehle für Shutdown eintragen:

/usr/local/bin/pb-kiosk-stop

4.) Damit das Adminpanel (als user www-data) den Befehl im Namen des user (hier pi5) ausführen kann, muss sudo ohne passwortabfrage funktionieren. Dafür folgendes in die sudoers-Liste eintragen:

sudo visudo

Folgende Zeile am Ende anfügen:

www-data ALL=(root) NOPASSWD: /usr/local/bin/pb-kiosk-stop

5.) Befehl per SSH testen - bei laufendem Browser am Raspi:

sudo -u www-data sudo /usr/local/bin/pb-kiosk-stop
echo $?

Browser sollte am Raspi-Display direkt geschlossen werden.

Hinweis

Ganz offensichtlich funktioniert dieser Trick nur, wenn photobooth im Browser auch "authorisiert" ist. Das klappte bei mir also nur nach Aktivierung des Login (mit PIN). Danach konnte ich mit mit der PIN im Admin-Panel anmelden und ganz unten mit SHUTDOWN den Browser beenden.

Ohne Login kommt im Debug-Panel folgende Fehlermeldung:

[2026-03-04 19:48:41][main][DEBUG] shellCommand.php []
[2026-03-04 19:48:41][main][DEBUG] message {"success":"false","mode":"Unauthorized"}

Nach Login und erfolgreichem Beenden des Browsers über Adminpanel - shutdown - steht bei mir im Debug-Panel:

[2026-03-04 19:45:44][main][DEBUG] data {"success":"false","command":"sudo /usr/local/bin/pb-kiosk-stop"}

und der Browser schließt sofort. Anschließend kann ich das Kopiertool über den Shortcut aufrufen.