Projektarbeit-MYP/docs/KIOSK-SETUP.md
2025-06-01 02:00:30 +02:00

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:

  1. Flask-Backend-Dienst: Systemd-Service zum Starten der MYP-Anwendung
  2. Chromium im Kiosk-Modus: Browserinstanz, die das Dashboard anzeigt
  3. 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

  1. Der Raspberry Pi startet und fährt bis zum Multi-User-Target hoch
  2. myp.service wird gestartet und das Flask-Backend sowie der Plug-Scheduler laufen
  3. LightDM startet und meldet den Benutzer pi automatisch an
  4. Nach dem Anmelden wird der User-Scope geladen und kiosk.service gestartet
  5. kiosk.sh startet Chromium im Kiosk-Modus und öffnet die MYP-Oberfläche
  6. 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:

  1. In myp.service: User= auf den entsprechenden Benutzer ändern
  2. Pfade in kiosk.sh und kiosk.service anpassen
  3. loginctl enable-linger für den entsprechenden Benutzer aktivieren