# Raspberry Pi Kiosk-Optimierungen

## Übersicht

Das MYP Installationsskript wurde mit umfassenden Raspberry Pi spezifischen Optimierungen erweitert, basierend auf bewährten Praktiken aus der Community.

## Quellen und Referenzen

- [Marco Pascucci - rPI Kiosk Tutorial](https://mpascucci.github.io/tutorial/rpi/)
- [Thomas Krampe - Raspberry Pi Web-Kiosk](https://blog.kngstn.eu/article/2023-09-22-raspberrypi-als-web-kiosk/)
- Raspberry Pi Foundation Best Practices
- Community-erprobte Kiosk-Konfigurationen

## Implementierte Optimierungen

### 1. Boot-Konfiguration (`/boot/config.txt`)

```bash
# GPU Memory Split für bessere Browser-Performance
gpu_mem=128

# Disable Rainbow Splash für professionelles Erscheinungsbild
disable_splash=1

# HDMI Force Hotplug für bessere Display-Kompatibilität
hdmi_force_hotplug=1

# Disable Overscan für Kiosk-Displays
disable_overscan=1

# Audio über HDMI aktivieren
hdmi_drive=2
```

**Vorteile:**
- ✅ Bessere Chromium-Performance durch mehr GPU-Speicher
- ✅ Professioneller Boot ohne Raspberry Pi Logo
- ✅ Zuverlässige HDMI-Erkennung
- ✅ Vollbild-Nutzung ohne schwarze Ränder

### 2. Kernel-Parameter (`/boot/cmdline.txt`)

```bash
# Console Blanking deaktivieren
consoleblank=0

# Logo deaktivieren für schnelleren Boot
logo.nologo

# Quiet Boot für saubere Kiosk-Erfahrung
quiet
```

**Vorteile:**
- ✅ Bildschirm bleibt immer aktiv
- ✅ Schnellerer Boot-Prozess
- ✅ Keine störenden Boot-Meldungen

### 3. WLAN Power Management

#### Systemd-Service
```bash
# Automatische Deaktivierung bei jedem Boot
systemctl enable disable-wifi-power-management.service
```

#### NetworkManager-Konfiguration
```bash
# Globale WLAN Power Save Deaktivierung
wifi.powersave = 2
```

**Problem gelöst:**
- ❌ `wlan0: carrier lost` Fehler
- ❌ Intermittierende Netzwerkverbindung
- ❌ Kiosk-Unterbrechungen durch WLAN-Standby

### 4. Erweiterte Chromium-Optimierungen

#### Raspberry Pi spezifische Flags
```bash
--disable-gpu-compositing
--enable-gpu-rasterization
--disable-smooth-scrolling
--disable-2d-canvas-image-chromium
--disable-accelerated-2d-canvas
--num-raster-threads=2
--enable-zero-copy
--force-device-scale-factor=1.0
--disable-pinch
--overscroll-history-navigation=0
```

#### Chromium-Richtlinien (`/etc/chromium-browser/policies/managed/`)
```json
{
  "DefaultBrowserSettingEnabled": false,
  "BackgroundModeEnabled": false,
  "BookmarkBarEnabled": false,
  "BrowserSignin": 0,
  "DefaultNotificationsSetting": 2,
  "PasswordManagerEnabled": false,
  "TranslateEnabled": false,
  "MetricsReportingEnabled": false
}
```

**Vorteile:**
- ✅ Optimierte Performance auf ARM-Hardware
- ✅ Reduzierte CPU/GPU-Last
- ✅ Deaktivierte störende Browser-Features
- ✅ Kiosk-optimierte Benutzeroberfläche

### 5. Crash-Recovery-System

#### Chromium Restart-Loop
```bash
while true; do
    chromium-browser [flags] "$KIOSK_URL"
    EXIT_CODE=$?
    
    # Bei normalem Exit nicht neustarten
    if [ $EXIT_CODE -eq 0 ] || [ $EXIT_CODE -eq 15 ]; then
        break
    fi
    
    # Bei Crash: Neustart nach 3 Sekunden
    sleep 3
    pkill -f chromium
done
```

#### Chromium Preferences Bereinigung
```bash
# Crash-Flags vor jedem Start bereinigen
sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' Preferences
sed -i 's/"exit_type":"Crashed"/"exit_type":"Normal"/' Preferences
```

**Vorteile:**
- ✅ Automatischer Neustart bei Browser-Crashes
- ✅ Keine "Chromium didn't shut down correctly" Meldungen
- ✅ Unterbrechungsfreier Kiosk-Betrieb

### 6. Temperatur-Monitoring

#### Automatisches Monitoring
```bash
# Alle 5 Minuten Temperatur-Check
*/5 * * * * root /usr/local/bin/pi-temp-check
```

#### Warnungen und Logging
- **70°C+**: Warnung in Logs
- **80°C+**: Kritische Warnung + Syslog
- Kontinuierliche Aufzeichnung in `/var/log/pi-temperature.log`

**Vorteile:**
- ✅ Frühwarnung bei Überhitzung
- ✅ Präventive Wartung möglich
- ✅ Langzeit-Temperaturverlauf

### 7. Performance-Optimierungen

#### Kernel-Parameter
```bash
# Swappiness reduzieren
vm.swappiness=10

# Dirty Ratio optimieren
vm.dirty_ratio=15
vm.dirty_background_ratio=5
```

#### Hardware-Erkennung
```bash
# Automatische Pi-Erkennung
if grep -q "Raspberry Pi" /proc/cpuinfo; then
    # Pi-spezifische Optimierungen aktivieren
fi
```

**Vorteile:**
- ✅ Bessere I/O-Performance
- ✅ Reduzierte SD-Karten-Belastung
- ✅ Optimierte Speicherverwaltung

### 8. Multiple Autostart-Methoden

#### 1. LXDE Autostart (Klassisch)
```bash
# ~/.config/lxsession/LXDE-pi/autostart
@bash /home/kiosk/start-kiosk.sh
```

#### 2. Desktop Autostart (Modern)
```bash
# ~/.config/autostart/myp-kiosk.desktop
[Desktop Entry]
Type=Application
Exec=/bin/bash /home/kiosk/start-kiosk.sh
```

#### 3. Systemd Service (Robust)
```bash
# /lib/systemd/system/kiosk.service
[Service]
ExecStart=/bin/bash /home/kiosk/start-kiosk.sh
```

**Vorteile:**
- ✅ Mehrfache Absicherung
- ✅ Kompatibilität mit verschiedenen Desktop-Umgebungen
- ✅ Fallback-Mechanismen

### 9. Energiesparmodus-Deaktivierung

#### X-Server Level
```bash
# LightDM Konfiguration
xserver-command=X -s 0 -dpms
```

#### systemd-logind Level
```bash
# Alle Power-Events ignorieren
HandlePowerKey=ignore
HandleSuspendKey=ignore
HandleLidSwitch=ignore
IdleAction=ignore
```

#### Application Level
```bash
# In Kiosk-Skript
xset s off
xset s noblank
xset -dpms
```

**Vorteile:**
- ✅ Bildschirm bleibt permanent aktiv
- ✅ Keine ungewollten Standby-Modi
- ✅ 24/7 Kiosk-Betrieb möglich

## Wartung und Monitoring

### Neue Wartungstools

```bash
# Raspberry Pi spezifische Checks
myp-maintenance check-health

# Temperatur-Monitoring
tail -f /var/log/pi-temperature.log

# WLAN Power Management Status
iwconfig wlan0 | grep "Power Management"
```

### Troubleshooting

#### WLAN-Probleme
```bash
# WLAN Power Save manuell deaktivieren
sudo iwconfig wlan0 power off

# NetworkManager neu starten
sudo systemctl restart NetworkManager
```

#### Performance-Probleme
```bash
# GPU Memory Check
vcgencmd get_mem gpu

# Temperatur Check
vcgencmd measure_temp

# Chromium-Prozesse prüfen
ps aux | grep chromium
```

#### Display-Probleme
```bash
# HDMI-Status prüfen
tvservice -s

# X-Server neu starten
sudo systemctl restart lightdm
```

## Kompatibilität

### Getestete Raspberry Pi Modelle
- ✅ Raspberry Pi 4 (empfohlen)
- ✅ Raspberry Pi 3B+
- ✅ Raspberry Pi 3B
- ⚠️ Raspberry Pi 2 (eingeschränkt)
- ❌ Raspberry Pi 1/Zero (nicht empfohlen)

### Getestete Betriebssysteme
- ✅ Raspberry Pi OS (Debian Bullseye/Bookworm)
- ✅ Ubuntu Server 20.04+ für ARM
- ✅ Debian 11+ ARM64

## Best Practices

### Hardware-Empfehlungen
- **RAM**: Mindestens 2GB (4GB empfohlen)
- **SD-Karte**: Class 10, mindestens 16GB
- **Kühlung**: Aktive Kühlung bei Dauerbetrieb
- **Netzteil**: Offizielles Pi-Netzteil verwenden

### Konfiguration-Tipps
- GPU Memory auf 128MB+ setzen
- Hochwertige SD-Karte verwenden
- Regelmäßige Temperatur-Überwachung
- Backup der Boot-Konfiguration

### Wartung
- Monatliche Temperatur-Log-Auswertung
- Quartalsweise SD-Karten-Gesundheitscheck
- Jährliche Neuinstallation bei Dauerbetrieb

---

**Status**: ✅ Produktionsreif  
**Letzte Aktualisierung**: $(date +%Y-%m-%d)  
**Version**: 3.0 (Raspberry Pi Optimiert)

## Referenzen

- [Marco Pascucci Tutorial](https://mpascucci.github.io/tutorial/rpi/)
- [Thomas Krampe Blog](https://blog.kngstn.eu/article/2023-09-22-raspberrypi-als-web-kiosk/)
- [Raspberry Pi Documentation](https://www.raspberrypi.org/documentation/)
- [Chromium Command Line Switches](https://peter.sh/experiments/chromium-command-line-switches/) 