246 lines
6.1 KiB
Markdown
246 lines
6.1 KiB
Markdown
# 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:
|
|
|
|
```bash
|
|
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:
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
sudo apt update
|
|
sudo apt install -y python3 python3-pip python3-venv chromium-browser \
|
|
unclutter xdotool xscreensaver git
|
|
```
|
|
|
|
### 2. MYP nach /opt/myp kopieren
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
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`
|
|
|
|
```ini
|
|
[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:
|
|
|
|
```bash
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl enable --now myp.service
|
|
```
|
|
|
|
### 5. Kiosk-Script einrichten
|
|
|
|
Datei erstellen: `/home/pi/kiosk.sh`
|
|
|
|
```bash
|
|
#!/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:
|
|
|
|
```bash
|
|
chmod +x /home/pi/kiosk.sh
|
|
```
|
|
|
|
### 6. Systemd-User-Dienst für den Browser
|
|
|
|
Verzeichnis erstellen:
|
|
|
|
```bash
|
|
mkdir -p /home/pi/.config/systemd/user
|
|
```
|
|
|
|
Datei erstellen: `/home/pi/.config/systemd/user/kiosk.service`
|
|
|
|
```ini
|
|
[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:
|
|
|
|
```bash
|
|
systemctl --user daemon-reload
|
|
systemctl --user enable kiosk.service
|
|
sudo loginctl enable-linger pi
|
|
```
|
|
|
|
### 7. Watchdog einrichten
|
|
|
|
Datei erstellen: `/home/pi/watchdog.sh`
|
|
|
|
```bash
|
|
#!/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:
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
sudo raspi-config
|
|
# 1 System Options → S5 Boot/Auto Login → B4 Desktop Autologin
|
|
```
|
|
|
|
### 9. Bildschirm nie ausschalten
|
|
|
|
```bash
|
|
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 |