6.1 KiB
MYP im Kiosk-Modus
Diese Anleitung beschreibt, wie MYP (Manage Your Printer) auf einem Raspberry Pi 4 im Kiosk-Modus eingerichtet wird, sodass das System beim Booten automatisch startet.
Voraussetzungen
- Raspberry Pi 4 (oder kompatibel) mit Raspbian/Raspberry Pi OS
- Internetverbindung für die Installation (nach der Installation wird keine Verbindung mehr benötigt)
- Bildschirm, Tastatur und Maus für die Einrichtung
Komponenten des Kiosk-Modus
Die Kiosk-Einrichtung besteht aus mehreren Komponenten:
- Flask-Backend-Dienst: Systemd-Service zum Starten der MYP-Anwendung
- Chromium im Kiosk-Modus: Browserinstanz, die das Dashboard anzeigt
- Watchdog: Überwacht den Browser und das Backend, startet bei Bedarf neu
Automatische Installation
Für die automatische Installation kann das mitgelieferte Setup-Script verwendet werden:
chmod +x setup.sh
./setup.sh
Dieses Script führt alle notwendigen Schritte aus:
- Installation der benötigten Pakete
- Kopieren der MYP-Anwendung nach
/opt/myp
- Einrichtung der Python-Umgebung und Installation der Abhängigkeiten
- Konfiguration der Systemd-Dienste
- Einrichtung des Kiosk-Modus
- Einrichtung des Watchdogs
Nach der Ausführung des Scripts muss noch der automatische Login aktiviert werden:
sudo raspi-config
# 1 System Options → S5 Boot/Auto Login → B4 Desktop Autologin
Manuelle Installation
Falls eine manuelle Installation bevorzugt wird, können die folgenden Schritte ausgeführt werden:
1. Pakete installieren
sudo apt update
sudo apt install -y python3 python3-pip python3-venv chromium-browser \
unclutter xdotool xscreensaver git
2. MYP nach /opt/myp kopieren
sudo mkdir -p /opt/myp
sudo chown $USER:$USER /opt/myp
cp -r ./myp/* /opt/myp
cd /opt/myp
3. Python-Umgebung und Abhängigkeiten einrichten
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
4. Systemd-Dienst für das Flask-Backend
Datei erstellen: /etc/systemd/system/myp.service
[Unit]
Description=MYP Flask Backend
After=network-online.target
Wants=network-online.target
[Service]
User=pi
WorkingDirectory=/opt/myp
ExecStart=/opt/myp/.venv/bin/python /opt/myp/app.py
Restart=always
Environment=PYTHONUNBUFFERED=1
[Install]
WantedBy=multi-user.target
Dienst aktivieren:
sudo systemctl daemon-reload
sudo systemctl enable --now myp.service
5. Kiosk-Script einrichten
Datei erstellen: /home/pi/kiosk.sh
#!/usr/bin/env bash
# Bildschirm-Blanking verhindern
xset s off
xset s noblank
xset -dpms
# Mauszeiger ausblenden
unclutter -idle 0.5 -root &
# Chromium-Crash-Dialoge unterdrücken
sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' \
"$HOME/.config/chromium/Default/Preferences" 2>/dev/null || true
sed -i 's/"exit_type":"Crashed"/"exit_type":"Normal"/' \
"$HOME/.config/chromium/Default/Preferences" 2>/dev/null || true
# Browser starten
chromium-browser --kiosk --noerrdialogs --disable-infobars \
--window-position=0,0 --app=http://localhost:5000/ &
Ausführbar machen:
chmod +x /home/pi/kiosk.sh
6. Systemd-User-Dienst für den Browser
Verzeichnis erstellen:
mkdir -p /home/pi/.config/systemd/user
Datei erstellen: /home/pi/.config/systemd/user/kiosk.service
[Unit]
Description=Chromium Kiosk
PartOf=graphical-session.target
[Service]
Type=forking
ExecStart=/home/pi/kiosk.sh
Restart=on-abort
[Install]
WantedBy=xsession.target
Dienst aktivieren:
systemctl --user daemon-reload
systemctl --user enable kiosk.service
sudo loginctl enable-linger pi
7. Watchdog einrichten
Datei erstellen: /home/pi/watchdog.sh
#!/usr/bin/env bash
# MYP Watchdog für Chromium Browser
# Funktion zum Loggen von Nachrichten
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> /home/pi/myp-watchdog.log
}
# Prüfen, ob Chromium läuft
if ! pgrep -x "chromium-browse" > /dev/null; then
log "Chromium nicht gefunden - starte neu"
# Alle eventuell noch vorhandenen Chromium-Prozesse beenden
pkill -f chromium || true
# Warten bis alle Prozesse beendet sind
sleep 2
# Kiosk-Script neu starten
/home/pi/kiosk.sh
log "Chromium neugestartet"
fi
# Prüfen, ob MYP Flask-Dienst läuft
if ! systemctl is-active --quiet myp.service; then
log "MYP Flask-Dienst ist nicht aktiv - starte neu"
# Dienst neustarten
sudo systemctl restart myp.service
log "MYP Flask-Dienst neugestartet"
fi
exit 0
Ausführbar machen und Cron-Job einrichten:
chmod +x /home/pi/watchdog.sh
(crontab -l 2>/dev/null || echo "") | grep -v "watchdog.sh" | { cat; echo "*/5 * * * * /home/pi/watchdog.sh > /dev/null 2>&1"; } | crontab -
8. Automatischen Desktop-Login einschalten
sudo raspi-config
# 1 System Options → S5 Boot/Auto Login → B4 Desktop Autologin
9. Bildschirm nie ausschalten
sudo sed -i 's/#BLANK_TIME=.*/BLANK_TIME=0/' /etc/xdg/lxsession/LXDE-pi/autostart
Ablauf beim Booten
- Der Raspberry Pi startet und fährt bis zum Multi-User-Target hoch
myp.service
wird gestartet und das Flask-Backend sowie der Plug-Scheduler laufen- LightDM startet und meldet den Benutzer
pi
automatisch an - Nach dem Anmelden wird der User-Scope geladen und
kiosk.service
gestartet kiosk.sh
startet Chromium im Kiosk-Modus und öffnet die MYP-Oberfläche- Der Watchdog-Cron-Job überwacht alle 5 Minuten, ob alles läuft
Fehlerbehebung
- MYP startet nicht:
systemctl status myp.service
zeigt den Status des Dienstes - Browser startet nicht:
systemctl --user status kiosk.service
zeigt den Status des Kiosk-Dienstes - Watchdog-Logs: In
/home/pi/myp-watchdog.log
werden Probleme und Neustarts protokolliert
Anpassung für andere Benutzer
Falls ein anderer Benutzer als pi
verwendet wird, müssen folgende Anpassungen vorgenommen werden:
- In
myp.service
:User=
auf den entsprechenden Benutzer ändern - Pfade in
kiosk.sh
undkiosk.service
anpassen loginctl enable-linger
für den entsprechenden Benutzer aktivieren