diff --git a/backend/app/app.py b/backend/app/app.py index 319aa7e4..be5e807a 100644 --- a/backend/app/app.py +++ b/backend/app/app.py @@ -72,7 +72,7 @@ except ImportError: # Datenbank-Monitor und Backup-Manager importieren falls verfügbar try: - from utils.database_monitor import DatabaseMonitor + from utils.database_utils import DatabaseMonitor database_monitor = DatabaseMonitor() except ImportError: database_monitor = None diff --git a/backend/app/docs/AUTOMATISCHER_START_OHNE_ANMELDUNG.md b/backend/app/docs/AUTOMATISCHER_START_OHNE_ANMELDUNG.md new file mode 100644 index 00000000..3ef12e88 --- /dev/null +++ b/backend/app/docs/AUTOMATISCHER_START_OHNE_ANMELDUNG.md @@ -0,0 +1,424 @@ +# Automatischer Start ohne Benutzeranmeldung + +## Übersicht + +Das MYP Druckerverwaltungssystem ist so konfiguriert, dass der Raspberry Pi automatisch ohne Benutzeranmeldung startet und direkt in den Kiosk-Modus wechselt. Diese Dokumentation beschreibt die implementierten Mechanismen und Troubleshooting-Optionen. + +## Implementierte Auto-Login-Mechanismen + +### 1. LightDM Display Manager + +**Konfigurationsdatei:** `/etc/lightdm/lightdm.conf` + +```ini +[Seat:*] +# Automatischer Login für Kiosk-Benutzer +autologin-user=kiosk +autologin-user-timeout=0 +autologin-session=openbox +user-session=openbox +session-wrapper=/etc/X11/Xsession +greeter-session=lightdm-gtk-greeter +allow-guest=false +# Kein Benutzer-Wechsel möglich +greeter-hide-users=true +greeter-show-manual-login=false +# Automatischer Start ohne Verzögerung +autologin-in-background=false +# Session-Setup +session-setup-script=/usr/share/lightdm/setup-kiosk-session.sh + +[SeatDefaults] +# Zusätzliche Sicherheitseinstellungen +autologin-user=kiosk +autologin-user-timeout=0 +autologin-session=openbox +greeter-hide-users=true +greeter-show-manual-login=false +allow-user-switching=false +``` + +**Systemd-Override:** `/etc/systemd/system/lightdm.service.d/autologin-override.conf` + +```ini +[Unit] +After=multi-user.target network.target myp-druckerverwaltung.service +Wants=myp-druckerverwaltung.service + +[Service] +# Automatischer Restart bei Fehlern +Restart=always +RestartSec=3 +# Umgebungsvariablen für Kiosk +Environment=DISPLAY=:0 +Environment=KIOSK_MODE=1 +# Verzögerung für Backend-Start +ExecStartPre=/bin/bash -c 'for i in {1..30}; do if curl -s http://localhost:5000 >/dev/null 2>&1; then break; fi; sleep 2; done' +``` + +### 2. Getty Auto-Login (Fallback) + +**Konfigurationsdatei:** `/etc/systemd/system/getty@tty1.service.d/autologin.conf` + +```ini +[Service] +ExecStart= +ExecStart=-/sbin/agetty --autologin kiosk --noclear %I $TERM +Type=simple +Restart=always +RestartSec=3 +``` + +### 3. Benutzer-Profile Auto-Start + +**Bashrc-Autostart:** `/home/kiosk/.bashrc` + +```bash +# ===== VERSTÄRKTER KIOSK AUTOSTART ===== +if [ -z "$SSH_CLIENT" ] && [ -z "$SSH_TTY" ] && [ -z "$KIOSK_STARTED" ]; then + export KIOSK_STARTED=1 + + # Logge Autostart-Versuch + echo "$(date): Bashrc Autostart-Versuch auf $(tty)" >> /var/log/kiosk-autostart.log + + # Prüfe ob wir auf tty1 sind und X noch nicht läuft + if [ "$(tty)" = "/dev/tty1" ] && [ -z "$DISPLAY" ]; then + echo "$(date): Starte X-Session automatisch via bashrc" >> /var/log/kiosk-autostart.log + exec startx + fi + + # Falls X läuft aber Kiosk-App nicht, starte sie + if [ -n "$DISPLAY" ] && ! pgrep -f "chromium.*kiosk" > /dev/null; then + echo "$(date): Starte Kiosk-Anwendung via bashrc" >> /var/log/kiosk-autostart.log + exec $HOME/start-kiosk.sh + fi +fi +``` + +**Profile-Autostart:** `/home/kiosk/.profile` + +```bash +# ===== VERSTÄRKTER KIOSK AUTOSTART (PROFILE) ===== +if [ -z "$SSH_CLIENT" ] && [ -z "$SSH_TTY" ] && [ -z "$KIOSK_STARTED" ]; then + export KIOSK_STARTED=1 + + # Logge Profile-Autostart + echo "$(date): Profile Autostart-Versuch auf $(tty)" >> /var/log/kiosk-autostart.log + + # Starte X-Session falls nicht vorhanden + if [ -z "$DISPLAY" ] && [ -z "$WAYLAND_DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then + echo "$(date): Starte X-Session via profile" >> /var/log/kiosk-autostart.log + exec startx + fi +fi +``` + +### 4. Desktop Autostart + +**XDG Autostart:** `/home/kiosk/.config/autostart/kiosk-app.desktop` + +```ini +[Desktop Entry] +Type=Application +Name=MYP Kiosk Application +Comment=Startet die MYP Kiosk-Anwendung automatisch +Exec=/home/kiosk/start-kiosk.sh +Hidden=false +NoDisplay=false +X-GNOME-Autostart-enabled=true +StartupNotify=false +Terminal=false +``` + +### 5. Systemd-Watchdog Services + +**Enhanced Watchdog:** `/etc/systemd/system/kiosk-watchdog-enhanced.service` + +Überwacht kontinuierlich: +- Backend-Service Status +- Backend-Erreichbarkeit (HTTP) +- LightDM Status +- Kiosk-Benutzer Session +- Chromium Kiosk-Prozess +- X-Server Status + +### 6. Cron-Überwachung + +**Cron-Watchdog:** `/etc/cron.d/kiosk-watchdog-enhanced` + +```bash +# Verstärkter Kiosk-Watchdog: Prüft alle 2 Minuten +*/2 * * * * kiosk /bin/bash -c 'if ! pgrep -f "chromium.*kiosk" > /dev/null; then echo "$(date): Cron-Watchdog startet Kiosk neu" >> /var/log/kiosk-cron-watchdog.log; DISPLAY=:0 $HOME/start-kiosk.sh & fi' + +# System-Watchdog: Prüft Services alle 5 Minuten +*/5 * * * * root /bin/bash -c 'if ! systemctl is-active --quiet lightdm; then echo "$(date): Cron startet LightDM neu" >> /var/log/system-cron-watchdog.log; systemctl start lightdm; fi' +``` + +### 7. RC.Local Fallback + +**Boot-Fallback:** `/etc/rc.local` + +```bash +#!/bin/bash +# Verstärkter rc.local - Kiosk-Fallback + +# Logge Start +echo "$(date): rc.local gestartet" >> /var/log/kiosk-fallback.log + +# Warte auf System-Initialisierung +sleep 20 + +# Starte Backend-Service falls nicht läuft +if ! systemctl is-active --quiet myp-druckerverwaltung; then + echo "$(date): Starte Backend-Service" >> /var/log/kiosk-fallback.log + systemctl start myp-druckerverwaltung + sleep 10 +fi + +# Warte auf Backend-Verfügbarkeit +for i in {1..30}; do + if curl -s http://localhost:5000 >/dev/null 2>&1; then + echo "$(date): Backend verfügbar nach $i Versuchen" >> /var/log/kiosk-fallback.log + break + fi + sleep 2 +done + +# Starte LightDM falls nicht läuft +if ! systemctl is-active --quiet lightdm; then + echo "$(date): Starte LightDM" >> /var/log/kiosk-fallback.log + systemctl start lightdm + sleep 5 +fi + +# Prüfe nach 30 Sekunden ob Kiosk-Benutzer angemeldet ist +sleep 30 +if ! pgrep -u kiosk > /dev/null; then + echo "$(date): Kiosk-Benutzer nicht angemeldet - starte LightDM neu" >> /var/log/kiosk-fallback.log + systemctl restart lightdm +fi + +echo "$(date): rc.local Kiosk-Fallback abgeschlossen" >> /var/log/kiosk-fallback.log + +exit 0 +``` + +## Boot-Optimierungen + +### Raspberry Pi Boot-Konfiguration + +**Boot-Config:** `/boot/config.txt` + +```ini +# GPU Memory für bessere Performance +gpu_mem=128 + +# Disable Boot-Splash für schnelleren Start +disable_splash=1 + +# Boot-Delay reduzieren +boot_delay=0 + +# HDMI-Hotplug für bessere Display-Erkennung +hdmi_force_hotplug=1 + +# Disable Rainbow-Splash +disable_overscan=1 +``` + +**Kernel-Parameter:** `/boot/cmdline.txt` + +``` +# Zusätzliche Parameter für schnelleren Boot +quiet loglevel=3 logo.nologo vt.global_cursor_default=0 +``` + +### Systemd-Konfiguration + +**Standard-Target:** `graphical.target` + +```bash +systemctl set-default graphical.target +``` + +**Logind-Konfiguration:** `/etc/systemd/logind.conf.d/kiosk.conf` + +```ini +[Login] +# Verhindere dass System bei Inaktivität heruntergefahren wird +IdleAction=ignore +IdleActionSec=infinity + +# Verhindere Suspend/Hibernate +HandlePowerKey=ignore +HandleSuspendKey=ignore +HandleHibernateKey=ignore +HandleLidSwitch=ignore + +# Session-Einstellungen für Kiosk +KillUserProcesses=no +UserStopDelaySec=10 + +# Automatic VT allocation +ReserveVT=1 +``` + +## Troubleshooting + +### 1. System startet nicht automatisch + +**Diagnose:** +```bash +# Prüfe systemd default target +systemctl get-default + +# Prüfe LightDM Status +systemctl status lightdm + +# Prüfe Getty Service +systemctl status getty@tty1 +``` + +**Lösung:** +```bash +# Setze graphical target +sudo systemctl set-default graphical.target + +# Aktiviere Services +sudo systemctl enable lightdm +sudo systemctl enable getty@tty1 +``` + +### 2. Kiosk-Benutzer meldet sich nicht automatisch an + +**Diagnose:** +```bash +# Prüfe LightDM Konfiguration +cat /etc/lightdm/lightdm.conf | grep autologin + +# Prüfe PAM Konfiguration +cat /etc/pam.d/lightdm-autologin + +# Prüfe Benutzer-Sessions +who +``` + +**Lösung:** +```bash +# LightDM neu konfigurieren +sudo dpkg-reconfigure lightdm + +# Service neustarten +sudo systemctl restart lightdm +``` + +### 3. X-Session startet nicht + +**Diagnose:** +```bash +# Prüfe X-Server Logs +cat /var/log/Xorg.0.log + +# Prüfe Session-Logs +cat /var/log/kiosk-session.log + +# Prüfe Autostart-Logs +cat /var/log/kiosk-autostart.log +``` + +**Lösung:** +```bash +# X-Server manuell starten +sudo -u kiosk DISPLAY=:0 startx + +# Openbox neu installieren +sudo apt-get install --reinstall openbox +``` + +### 4. Kiosk-Anwendung startet nicht + +**Diagnose:** +```bash +# Prüfe Backend-Service +systemctl status myp-druckerverwaltung + +# Prüfe Backend-Erreichbarkeit +curl -s http://localhost:5000 + +# Prüfe Chromium-Prozesse +pgrep -f chromium +``` + +**Lösung:** +```bash +# Backend neustarten +sudo systemctl restart myp-druckerverwaltung + +# Kiosk-Anwendung manuell starten +sudo -u kiosk DISPLAY=:0 /home/kiosk/start-kiosk.sh +``` + +## Wartungskommandos + +### System-Status prüfen +```bash +sudo myp-maintenance status +``` + +### Services neustarten +```bash +sudo myp-maintenance restart +``` + +### Logs anzeigen +```bash +sudo myp-maintenance logs +sudo myp-maintenance kiosk-logs +``` + +### Kiosk-Modus beenden (für Wartung) +```bash +sudo myp-maintenance exit-kiosk +``` + +### SSH für Remote-Wartung aktivieren +```bash +sudo myp-maintenance enable-ssh +``` + +## Log-Dateien + +### Wichtige Log-Dateien für Diagnose + +- `/var/log/kiosk-autostart.log` - Autostart-Versuche +- `/var/log/kiosk-session.log` - X-Session Events +- `/var/log/kiosk-fallback.log` - RC.Local Fallback +- `/var/log/kiosk-watchdog-enhanced.log` - Watchdog-Service +- `/var/log/kiosk-cron-watchdog.log` - Cron-Watchdog +- `/var/log/system-cron-watchdog.log` - System-Cron-Watchdog +- `/var/log/Xorg.0.log` - X-Server Logs +- `journalctl -u lightdm` - LightDM Service Logs +- `journalctl -u myp-druckerverwaltung` - Backend Service Logs + +## Optimierung nach Installation + +Für bereits installierte Systeme kann die Schnellstart-Optimierung ausgeführt werden: + +```bash +sudo ./schnellstart_raspberry_pi.sh +sudo reboot +``` + +Dieses Skript verstärkt alle Auto-Login-Mechanismen und optimiert die Boot-Performance. + +## Sicherheitshinweise + +- SSH ist standardmäßig deaktiviert für bessere Sicherheit +- Console-Zugang über Strg+Alt+F1 bis F6 möglich +- Root-Passwort: `744563017196A` (für Notfall-Wartung) +- Kiosk-Benutzer hat keine sudo-Berechtigung +- Automatische Updates sind konfiguriert + +## Fazit + +Das System ist mit mehrfachen redundanten Mechanismen ausgestattet, um einen zuverlässigen automatischen Start ohne Benutzeranmeldung zu gewährleisten. Bei Problemen stehen umfangreiche Diagnose- und Wartungstools zur Verfügung. \ No newline at end of file diff --git a/backend/app/schnellstart_raspberry_pi.sh b/backend/app/schnellstart_raspberry_pi.sh index 02504ebd..4796b533 100644 --- a/backend/app/schnellstart_raspberry_pi.sh +++ b/backend/app/schnellstart_raspberry_pi.sh @@ -1,13 +1,19 @@ #!/bin/bash # =================================================================== -# MYP Druckerverwaltung - Raspberry Pi Schnellstart -# Vereinfachte Installation für sofortigen Kiosk-Modus -# Ruft das Haupt-Installationsskript auf +# MYP Druckerverwaltung - Raspberry Pi Schnellstart Optimierung +# Optimiert automatischen Start ohne Benutzeranmeldung +# Für bereits installierte Systeme # =================================================================== set -e +# =========================== KONFIGURATION =========================== +KIOSK_USER="kiosk" +APP_USER="myp" +APP_DIR="/opt/myp-druckerverwaltung" +INSTALL_LOG="/var/log/myp-schnellstart.log" + # Farben für Ausgabe RED='\033[0;31m' GREEN='\033[0;32m' @@ -16,121 +22,627 @@ BLUE='\033[0;34m' PURPLE='\033[0;35m' NC='\033[0m' -# Logging-Funktionen -log() { echo -e "${GREEN}[SCHNELLSTART] $1${NC}"; } -error() { echo -e "${RED}[FEHLER] $1${NC}"; exit 1; } -warning() { echo -e "${YELLOW}[WARNUNG] $1${NC}"; } -info() { echo -e "${BLUE}[INFO] $1${NC}"; } +# ========================== LOGGING-SYSTEM ========================== +log() { + echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')] $1${NC}" | tee -a "$INSTALL_LOG" +} -# ASCII Art Banner -cat << 'EOF' -╔═══════════════════════════════════════════════════════════╗ -║ MYP DRUCKERVERWALTUNG ║ -║ Raspberry Pi Kiosk Schnellstart ║ -║ ║ -║ 🖨️ Vollautomatische Kiosk-Installation ║ -║ 🔒 Maximale Sicherheit ohne Escape-Möglichkeiten ║ -║ 🚀 Ein Klick - Fertig! ║ -╚═══════════════════════════════════════════════════════════╝ -EOF - -echo -log "Willkommen zum MYP Druckerverwaltung Kiosk-Schnellstart!" -echo - -# Root-Berechtigung prüfen -if [ "$EUID" -ne 0 ]; then - error "Dieses Skript muss als Root ausgeführt werden: sudo $0" -fi - -# PATH für System-Tools setzen -export PATH="/usr/sbin:/sbin:/usr/bin:/bin:/usr/local/bin:$PATH" - -# Aktuelles Verzeichnis ermitteln -CURRENT_DIR="$(pwd)" -log "Arbeitsverzeichnis: $CURRENT_DIR" - -# Prüfe ob install_raspberry_pi.sh existiert -if [ ! -f "$CURRENT_DIR/install_raspberry_pi.sh" ]; then - error "install_raspberry_pi.sh nicht gefunden! Führe dieses Skript im MYP-Projektverzeichnis aus." -fi - -# Prüfe ob app.py existiert (MYP-Projekt-Validierung) -if [ ! -f "$CURRENT_DIR/app.py" ]; then - error "app.py nicht gefunden! Bitte im MYP-Projektverzeichnis ausführen." -fi - -# Mache Installationsskript ausführbar -chmod +x "$CURRENT_DIR/install_raspberry_pi.sh" - -echo -info "📋 Was passiert bei der Installation:" -info " • System-Grundkonfiguration: Hostname 'raspberrypi', Root-Passwort, Zeitzone" -info " • System-Update: Vollständiges System-Upgrade mit neuen Zertifikaten" -info " • System-Bereinigung: Entfernt alle Desktop-Umgebungen" -info " • Chromium-Installation: Mehrere Fallback-Methoden" -info " • Verzeichnisstruktur: Upload-Ordner, Logs, Config mit korrekten Berechtigungen" -info " • Python-Installation: Direkt ins System ohne Virtual Environment" -info " • Sicherheits-Kiosk: Ohne Escape-Möglichkeiten" -info " • Autostart: Vollautomatischer Boot-to-Kiosk" -info " • Wartungstools: Remote-Management-System" -echo -info "🛡️ Sicherheits-Features:" -info " • SSH automatisch deaktiviert" -info " • Root-Zugang: 744563017196A (für Wartung)" -info " • Firewall mit Fail2Ban" -info " • Kein Desktop-Zugang" -info " • Passwort-geschützter Notfall-Modus" -echo - -# Bestätigung einholen -warning "⚠️ ACHTUNG: Diese Installation erstellt einen VOLLAUTOMATISCHEN KIOSK!" -warning " • Das System bootet direkt in Kiosk-Modus (kein Desktop)" -warning " • SSH wird für Sicherheit deaktiviert" -warning " • Alle Desktop-Umgebungen werden entfernt" -warning " • Nur über Console oder myp-emergency-reset zugänglich" -echo -read -p "🚀 Vollautomatische Kiosk-Installation starten? (j/N): " confirm -if [[ ! "$confirm" =~ ^[jJ]$ ]]; then - error "Installation abgebrochen" -fi - -echo -log "=== STARTE HAUPTINSTALLATION ===" -info "Dies kann 15-30 Minuten dauern..." -info "Überwachung möglich mit: tail -f /var/log/myp-kiosk-install.log" -echo - -# Führe Hauptinstallation aus -if "$CURRENT_DIR/install_raspberry_pi.sh"; then - echo - log "🎉 === INSTALLATION ERFOLGREICH ABGESCHLOSSEN! ===" - echo - info "🔧 WICHTIGE WARTUNGSKOMMANDOS für nach dem Neustart:" - info " • Status prüfen: myp-maintenance status" - info " • Services steuern: myp-maintenance {start|stop|restart}" - info " • Kiosk beenden: myp-maintenance exit-kiosk" - info " • SSH aktivieren: myp-maintenance enable-ssh" - info " • Backup erstellen: myp-backup" - info " • Notfall-Reset: myp-emergency-reset" - echo - info "📱 ZUGRIFF NACH INSTALLATION:" - info " • Kiosk-Anwendung: Automatisch nach Neustart" - info " • Console-Zugang: Strg+Alt+F1 bis F6" - info " • Remote-Wartung: myp-maintenance enable-ssh" - echo - warning "⚠️ Das System startet nach dem Neustart automatisch im Kiosk-Modus!" - warning " Für Wartungszugang: Console verwenden oder SSH aktivieren" - echo - log "Schnellstart erfolgreich! 🚀" -else - echo - error "❌ Fehler bei der Hauptinstallation!" - echo - info "🔧 FEHLERBEHEBUNG:" - info " • Logfile prüfen: /var/log/myp-kiosk-install.log" - info " • Manuelle Installation: sudo ./install_raspberry_pi.sh" - info " • Bei Problemen: Überprüfe Internetverbindung und Berechtigungen" - echo +error() { + echo -e "${RED}[FEHLER] $1${NC}" | tee -a "$INSTALL_LOG" exit 1 -fi \ No newline at end of file +} + +warning() { + echo -e "${YELLOW}[WARNUNG] $1${NC}" | tee -a "$INSTALL_LOG" +} + +info() { + echo -e "${BLUE}[INFO] $1${NC}" | tee -a "$INSTALL_LOG" +} + +progress() { + echo -e "${PURPLE}[FORTSCHRITT] $1${NC}" | tee -a "$INSTALL_LOG" +} + +# ========================== SYSTEM-CHECKS ========================== +check_root() { + if [ "$EUID" -ne 0 ]; then + error "Dieses Skript muss als Root ausgeführt werden: sudo $0" + fi +} + +check_system() { + log "=== RASPBERRY PI SCHNELLSTART-OPTIMIERUNG ===" + + # Prüfe ob Kiosk-Benutzer existiert + if ! id "$KIOSK_USER" &>/dev/null; then + # Kiosk-Benutzer erstellen falls nicht vorhanden + progress "Erstelle Kiosk-Benutzer: $KIOSK_USER" + if ! useradd -m -s /bin/bash "$KIOSK_USER" 2>/dev/null; then + adduser --disabled-password --gecos "" "$KIOSK_USER" || error "Kann Kiosk-Benutzer nicht erstellen" + fi + # Kiosk-Benutzer zu Audio/Video-Gruppen hinzufügen + usermod -aG audio,video,input "$KIOSK_USER" 2>/dev/null || true + info "Kiosk-Benutzer erstellt" + else + info "Kiosk-Benutzer existiert bereits" + fi + + # Prüfe ob App-Verzeichnis existiert + if [ ! -d "$APP_DIR" ]; then + # App-Verzeichnis erstellen falls nicht vorhanden + progress "Erstelle App-Verzeichnis: $APP_DIR" + mkdir -p "$APP_DIR" + chown -R "$APP_USER:$APP_USER" "$APP_DIR" 2>/dev/null || true + info "App-Verzeichnis erstellt" + else + info "App-Verzeichnis existiert bereits" + fi + + # Prüfe ob App-Benutzer existiert + if ! id "$APP_USER" &>/dev/null; then + # App-Benutzer erstellen falls nicht vorhanden + progress "Erstelle App-Benutzer: $APP_USER" + if ! useradd -m -s /bin/bash "$APP_USER" 2>/dev/null; then + adduser --disabled-password --gecos "" "$APP_USER" || error "Kann App-Benutzer nicht erstellen" + fi + usermod -aG sudo "$APP_USER" 2>/dev/null || true + info "App-Benutzer erstellt" + else + info "App-Benutzer existiert bereits" + fi + + info "System-Checks erfolgreich" +} + +# ========================== ESSENZIELLE PAKETE INSTALLIEREN ========================== +install_essential_packages() { + log "=== ESSENZIELLE PAKETE INSTALLIEREN ===" + + progress "Aktualisiere Paketlisten..." + apt-get update -y || warning "APT Update teilweise fehlgeschlagen" + + progress "Installiere essenzielle Pakete..." + apt-get install -y \ + curl wget git unzip \ + python3 python3-pip python3-dev \ + build-essential libssl-dev libffi-dev \ + sqlite3 nginx supervisor \ + xorg xinit openbox \ + xserver-xorg-video-all \ + x11-xserver-utils xdotool unclutter \ + lightdm lightdm-gtk-greeter \ + pulseaudio alsa-utils \ + fonts-liberation fonts-dejavu \ + ca-certificates apt-transport-https \ + || warning "Paket-Installation teilweise fehlgeschlagen" + + log "✅ Essenzielle Pakete installiert" +} + +# ========================== BOOT-OPTIMIERUNG ========================== +optimize_boot() { + log "=== BOOT-OPTIMIERUNG ===" + + progress "Optimiere Raspberry Pi Boot-Parameter..." + + # Raspberry Pi Boot-Konfiguration + if [ -f "/boot/config.txt" ]; then + # GPU Memory für bessere Performance + if ! grep -q "gpu_mem=" /boot/config.txt; then + echo "gpu_mem=128" >> /boot/config.txt + info "GPU Memory auf 128MB gesetzt" + fi + + # Disable Boot-Splash für schnelleren Start + if ! grep -q "disable_splash=" /boot/config.txt; then + echo "disable_splash=1" >> /boot/config.txt + info "Boot-Splash deaktiviert" + fi + + # Boot-Delay reduzieren + if ! grep -q "boot_delay=" /boot/config.txt; then + echo "boot_delay=0" >> /boot/config.txt + info "Boot-Delay auf 0 gesetzt" + fi + + # HDMI-Hotplug für bessere Display-Erkennung + if ! grep -q "hdmi_force_hotplug=" /boot/config.txt; then + echo "hdmi_force_hotplug=1" >> /boot/config.txt + info "HDMI-Hotplug aktiviert" + fi + + # Disable Rainbow-Splash + if ! grep -q "disable_overscan=" /boot/config.txt; then + echo "disable_overscan=1" >> /boot/config.txt + info "Overscan deaktiviert" + fi + fi + + # Kernel-Parameter optimieren + if [ -f "/boot/cmdline.txt" ]; then + # Backup erstellen + cp /boot/cmdline.txt /boot/cmdline.txt.backup + + # Entferne Boot-Splash und optimiere + sed -i 's/splash//g' /boot/cmdline.txt + + # Füge Performance-Parameter hinzu + if ! grep -q "quiet" /boot/cmdline.txt; then + sed -i 's/$/ quiet/' /boot/cmdline.txt + fi + if ! grep -q "loglevel=3" /boot/cmdline.txt; then + sed -i 's/$/ loglevel=3/' /boot/cmdline.txt + fi + if ! grep -q "logo.nologo" /boot/cmdline.txt; then + sed -i 's/$/ logo.nologo/' /boot/cmdline.txt + fi + if ! grep -q "vt.global_cursor_default=0" /boot/cmdline.txt; then + sed -i 's/$/ vt.global_cursor_default=0/' /boot/cmdline.txt + fi + + info "Kernel-Parameter optimiert" + fi + + log "✅ Boot-Optimierung abgeschlossen" +} + +# ========================== AUTOLOGIN VERSTÄRKEN ========================== +strengthen_autologin() { + log "=== AUTOLOGIN-VERSTÄRKUNG ===" + + progress "Verstärke automatischen Login..." + + # Sicherstellen dass graphical.target Standard ist + systemctl set-default graphical.target + info "Graphical.target als Standard gesetzt" + + # Getty Auto-Login verstärken + mkdir -p "/etc/systemd/system/getty@tty1.service.d" + cat > "/etc/systemd/system/getty@tty1.service.d/autologin.conf" << EOF +[Service] +ExecStart= +ExecStart=-/sbin/agetty --autologin $KIOSK_USER --noclear %I \$TERM +Type=simple +Restart=always +RestartSec=3 +EOF + + # Getty Service aktivieren + systemctl enable getty@tty1.service + info "Getty Auto-Login konfiguriert" + + # LightDM Auto-Login verstärken + if [ -f "/etc/lightdm/lightdm.conf" ]; then + # Backup erstellen + cp /etc/lightdm/lightdm.conf /etc/lightdm/lightdm.conf.backup + + # Neue Konfiguration + cat > "/etc/lightdm/lightdm.conf" << EOF +[Seat:*] +# Automatischer Login für Kiosk-Benutzer +autologin-user=$KIOSK_USER +autologin-user-timeout=0 +autologin-session=openbox +user-session=openbox +session-wrapper=/etc/X11/Xsession +greeter-session=lightdm-gtk-greeter +allow-guest=false +# Kein Benutzer-Wechsel möglich +greeter-hide-users=true +greeter-show-manual-login=false +# Automatischer Start ohne Verzögerung +autologin-in-background=false +# Session-Setup +session-setup-script=/usr/share/lightdm/setup-kiosk-session.sh + +[SeatDefaults] +# Zusätzliche Sicherheitseinstellungen +autologin-user=$KIOSK_USER +autologin-user-timeout=0 +autologin-session=openbox +greeter-hide-users=true +greeter-show-manual-login=false +allow-user-switching=false +EOF + info "LightDM Auto-Login verstärkt" + fi + + # LightDM Service-Override + mkdir -p "/etc/systemd/system/lightdm.service.d" + cat > "/etc/systemd/system/lightdm.service.d/autologin-override.conf" << EOF +[Unit] +After=multi-user.target network.target myp-druckerverwaltung.service +Wants=myp-druckerverwaltung.service + +[Service] +# Automatischer Restart bei Fehlern +Restart=always +RestartSec=3 +# Umgebungsvariablen für Kiosk +Environment=DISPLAY=:0 +Environment=KIOSK_MODE=1 +# Verzögerung für Backend-Start +ExecStartPre=/bin/bash -c 'for i in {1..30}; do if curl -s http://localhost:5000 >/dev/null 2>&1; then break; fi; sleep 2; done' +EOF + + systemctl enable lightdm.service + info "LightDM Service-Override konfiguriert" + + log "✅ Autologin-Verstärkung abgeschlossen" +} + +# ========================== KIOSK-BENUTZER OPTIMIERUNG ========================== +optimize_kiosk_user() { + log "=== KIOSK-BENUTZER OPTIMIERUNG ===" + + KIOSK_HOME="/home/$KIOSK_USER" + + progress "Optimiere Kiosk-Benutzer Autostart..." + + # Verstärkte .bashrc + cat >> "$KIOSK_HOME/.bashrc" << 'EOF' + +# ===== VERSTÄRKTER KIOSK AUTOSTART ===== +if [ -z "$SSH_CLIENT" ] && [ -z "$SSH_TTY" ] && [ -z "$KIOSK_STARTED" ]; then + export KIOSK_STARTED=1 + + # Logge Autostart-Versuch + echo "$(date): Bashrc Autostart-Versuch auf $(tty)" >> /var/log/kiosk-autostart.log + + # Prüfe ob wir auf tty1 sind und X noch nicht läuft + if [ "$(tty)" = "/dev/tty1" ] && [ -z "$DISPLAY" ]; then + echo "$(date): Starte X-Session automatisch via bashrc" >> /var/log/kiosk-autostart.log + exec startx + fi + + # Falls X läuft aber Kiosk-App nicht, starte sie + if [ -n "$DISPLAY" ] && ! pgrep -f "chromium.*kiosk" > /dev/null; then + echo "$(date): Starte Kiosk-Anwendung via bashrc" >> /var/log/kiosk-autostart.log + exec $HOME/start-kiosk.sh + fi +fi +EOF + + # Verstärkte .profile + cat >> "$KIOSK_HOME/.profile" << 'EOF' + +# ===== VERSTÄRKTER KIOSK AUTOSTART (PROFILE) ===== +if [ -z "$SSH_CLIENT" ] && [ -z "$SSH_TTY" ] && [ -z "$KIOSK_STARTED" ]; then + export KIOSK_STARTED=1 + + # Logge Profile-Autostart + echo "$(date): Profile Autostart-Versuch auf $(tty)" >> /var/log/kiosk-autostart.log + + # Starte X-Session falls nicht vorhanden + if [ -z "$DISPLAY" ] && [ -z "$WAYLAND_DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then + echo "$(date): Starte X-Session via profile" >> /var/log/kiosk-autostart.log + exec startx + fi +fi +EOF + + # Optimierte .xinitrc + cat > "$KIOSK_HOME/.xinitrc" << EOF +#!/bin/bash +# Optimierte Xinit-Konfiguration für Kiosk-Modus + +# Logge X-Start +echo "\$(date): X-Session gestartet via xinitrc" >> /var/log/kiosk-autostart.log + +# Export Display +export DISPLAY=:0 + +# Session-Setup +xset s off +xset s noblank +xset s noexpose +xset -dpms + +# Verstecke Mauszeiger +unclutter -idle 0.5 -root & + +# Warte kurz auf System-Stabilisierung +sleep 3 + +# Starte Openbox +exec openbox-session +EOF + + chmod +x "$KIOSK_HOME/.xinitrc" + + # Desktop Autostart verstärken + mkdir -p "$KIOSK_HOME/.config/autostart" + cat > "$KIOSK_HOME/.config/autostart/kiosk-app.desktop" << EOF +[Desktop Entry] +Type=Application +Name=MYP Kiosk Application +Comment=Startet die MYP Kiosk-Anwendung automatisch +Exec=$KIOSK_HOME/start-kiosk.sh +Hidden=false +NoDisplay=false +X-GNOME-Autostart-enabled=true +StartupNotify=false +Terminal=false +EOF + + # Berechtigungen setzen + chown -R "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME/.config" + chown "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME/.bashrc" + chown "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME/.profile" + chown "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME/.xinitrc" + + info "Kiosk-Benutzer Autostart optimiert" + + log "✅ Kiosk-Benutzer Optimierung abgeschlossen" +} + +# ========================== WATCHDOG VERSTÄRKEN ========================== +strengthen_watchdog() { + log "=== WATCHDOG-VERSTÄRKUNG ===" + + progress "Verstärke Kiosk-Überwachung..." + + # Verstärkter Kiosk-Watchdog Service + cat > "/etc/systemd/system/kiosk-watchdog-enhanced.service" << EOF +[Unit] +Description=Enhanced Kiosk Watchdog Service +After=multi-user.target lightdm.service +Wants=lightdm.service myp-druckerverwaltung.service + +[Service] +Type=simple +User=root +ExecStart=/bin/bash -c ' + while true; do + # Prüfe Backend-Service + if ! systemctl is-active --quiet myp-druckerverwaltung; then + echo "\$(date): Backend-Service nicht aktiv - starte neu" >> /var/log/kiosk-watchdog-enhanced.log + systemctl start myp-druckerverwaltung + sleep 5 + fi + + # Prüfe Backend-Erreichbarkeit + if ! curl -s http://localhost:5000 >/dev/null 2>&1; then + echo "\$(date): Backend nicht erreichbar - starte Service neu" >> /var/log/kiosk-watchdog-enhanced.log + systemctl restart myp-druckerverwaltung + sleep 10 + fi + + # Prüfe LightDM + if ! systemctl is-active --quiet lightdm; then + echo "\$(date): LightDM nicht aktiv - starte neu" >> /var/log/kiosk-watchdog-enhanced.log + systemctl start lightdm + sleep 5 + fi + + # Prüfe Kiosk-Benutzer Session + if ! pgrep -u $KIOSK_USER > /dev/null; then + echo "\$(date): Kiosk-Benutzer nicht angemeldet - starte LightDM neu" >> /var/log/kiosk-watchdog-enhanced.log + systemctl restart lightdm + sleep 10 + fi + + # Prüfe Chromium Kiosk-Prozess + if ! pgrep -u $KIOSK_USER -f "chromium.*kiosk" > /dev/null; then + echo "\$(date): Chromium-Kiosk nicht gefunden - starte Kiosk-Session neu" >> /var/log/kiosk-watchdog-enhanced.log + # Versuche Kiosk-Neustart als Kiosk-Benutzer + sudo -u $KIOSK_USER DISPLAY=:0 /home/$KIOSK_USER/start-kiosk.sh & + sleep 5 + fi + + # Prüfe X-Server + if ! pgrep -f "X.*:0" > /dev/null; then + echo "\$(date): X-Server nicht gefunden - starte LightDM neu" >> /var/log/kiosk-watchdog-enhanced.log + systemctl restart lightdm + sleep 10 + fi + + sleep 20 + done +' +Restart=always +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + + # Alten Watchdog deaktivieren und neuen aktivieren + systemctl disable kiosk-watchdog.service 2>/dev/null || true + systemctl enable kiosk-watchdog-enhanced.service + + # Cron-Watchdog verstärken + cat > "/etc/cron.d/kiosk-watchdog-enhanced" << EOF +# Verstärkter Kiosk-Watchdog: Prüft alle 2 Minuten +*/2 * * * * $KIOSK_USER /bin/bash -c 'if ! pgrep -f "chromium.*kiosk" > /dev/null; then echo "\$(date): Cron-Watchdog startet Kiosk neu" >> /var/log/kiosk-cron-watchdog.log; DISPLAY=:0 $HOME/start-kiosk.sh & fi' + +# System-Watchdog: Prüft Services alle 5 Minuten +*/5 * * * * root /bin/bash -c 'if ! systemctl is-active --quiet lightdm; then echo "\$(date): Cron startet LightDM neu" >> /var/log/system-cron-watchdog.log; systemctl start lightdm; fi' +EOF + + # RC.Local verstärken + cat > "/etc/rc.local" << EOF +#!/bin/bash +# Verstärkter rc.local - Kiosk-Fallback + +# Logge Start +echo "\$(date): rc.local gestartet" >> /var/log/kiosk-fallback.log + +# Warte auf System-Initialisierung +sleep 20 + +# Starte Backend-Service falls nicht läuft +if ! systemctl is-active --quiet myp-druckerverwaltung; then + echo "\$(date): Starte Backend-Service" >> /var/log/kiosk-fallback.log + systemctl start myp-druckerverwaltung + sleep 10 +fi + +# Warte auf Backend-Verfügbarkeit +for i in {1..30}; do + if curl -s http://localhost:5000 >/dev/null 2>&1; then + echo "\$(date): Backend verfügbar nach \$i Versuchen" >> /var/log/kiosk-fallback.log + break + fi + sleep 2 +done + +# Starte LightDM falls nicht läuft +if ! systemctl is-active --quiet lightdm; then + echo "\$(date): Starte LightDM" >> /var/log/kiosk-fallback.log + systemctl start lightdm + sleep 5 +fi + +# Prüfe nach 30 Sekunden ob Kiosk-Benutzer angemeldet ist +sleep 30 +if ! pgrep -u $KIOSK_USER > /dev/null; then + echo "\$(date): Kiosk-Benutzer nicht angemeldet - starte LightDM neu" >> /var/log/kiosk-fallback.log + systemctl restart lightdm +fi + +echo "\$(date): rc.local Kiosk-Fallback abgeschlossen" >> /var/log/kiosk-fallback.log + +exit 0 +EOF + + chmod +x "/etc/rc.local" + + info "Watchdog-Services verstärkt" + + log "✅ Watchdog-Verstärkung abgeschlossen" +} + +# ========================== SYSTEM-SERVICES OPTIMIEREN ========================== +optimize_services() { + log "=== SERVICE-OPTIMIERUNG ===" + + progress "Optimiere System-Services für schnelleren Start..." + + # Deaktiviere unnötige Services + DISABLE_SERVICES=( + "bluetooth" + "hciuart" + "triggerhappy" + "avahi-daemon" + "cups" + "cups-browsed" + "ModemManager" + "wpa_supplicant" + ) + + for service in "${DISABLE_SERVICES[@]}"; do + if systemctl is-enabled --quiet "$service" 2>/dev/null; then + systemctl disable "$service" 2>/dev/null || true + info "Service '$service' deaktiviert" + fi + done + + # Optimiere wichtige Services + systemctl enable myp-druckerverwaltung + systemctl enable lightdm + systemctl enable kiosk-watchdog-enhanced + + # Systemd-Daemon neu laden + systemctl daemon-reload + + info "Services optimiert" + + log "✅ Service-Optimierung abgeschlossen" +} + +# ========================== SYSTEM-PARAMETER OPTIMIEREN ========================== +optimize_system_parameters() { + log "=== SYSTEM-PARAMETER OPTIMIERUNG ===" + + progress "Optimiere System-Parameter..." + + # Systemd-Logind für Kiosk optimieren + mkdir -p "/etc/systemd/logind.conf.d" + cat > "/etc/systemd/logind.conf.d/kiosk.conf" << EOF +[Login] +# Verhindere dass System bei Inaktivität heruntergefahren wird +IdleAction=ignore +IdleActionSec=infinity + +# Verhindere Suspend/Hibernate +HandlePowerKey=ignore +HandleSuspendKey=ignore +HandleHibernateKey=ignore +HandleLidSwitch=ignore + +# Session-Einstellungen für Kiosk +KillUserProcesses=no +UserStopDelaySec=10 + +# Automatic VT allocation +ReserveVT=1 +EOF + + # Kernel-Parameter für bessere Performance + cat > "/etc/sysctl.d/99-kiosk-performance.conf" << EOF +# Kiosk-Performance Optimierungen +vm.swappiness=10 +vm.dirty_ratio=15 +vm.dirty_background_ratio=5 +kernel.sched_autogroup_enabled=0 +EOF + + # Tmpfs für bessere Performance + if ! grep -q "tmpfs.*tmp" /etc/fstab; then + echo "tmpfs /tmp tmpfs defaults,noatime,nosuid,size=100m 0 0" >> /etc/fstab + info "Tmpfs für /tmp konfiguriert" + fi + + info "System-Parameter optimiert" + + log "✅ System-Parameter Optimierung abgeschlossen" +} + +# ========================== HAUPTFUNKTION ========================== +main() { + log "=== RASPBERRY PI SCHNELLSTART-OPTIMIERUNG GESTARTET ===" + + check_root + check_system + install_essential_packages + optimize_boot + strengthen_autologin + optimize_kiosk_user + strengthen_watchdog + optimize_services + optimize_system_parameters + + log "=== OPTIMIERUNG ABGESCHLOSSEN ===" + log "" + log "🎉 RASPBERRY PI SCHNELLSTART-OPTIMIERUNG ERFOLGREICH!" + log "" + log "📋 ZUSAMMENFASSUNG:" + log " ✅ Boot-Parameter optimiert" + log " ✅ Autologin verstärkt" + log " ✅ Kiosk-Benutzer optimiert" + log " ✅ Watchdog-Services verstärkt" + log " ✅ System-Services optimiert" + log " ✅ System-Parameter optimiert" + log "" + log "🔄 NEUSTART ERFORDERLICH:" + log " sudo reboot" + log "" + log "📊 NACH DEM NEUSTART:" + log " - System startet automatisch ohne Anmeldung" + log " - Kiosk-Modus wird automatisch gestartet" + log " - Web-UI ist sofort verfügbar" + log " - Mehrfache Überwachung aktiv" + log "" + log "🔧 WARTUNG:" + log " sudo myp-maintenance status # System-Status prüfen" + log " sudo myp-maintenance logs # Logs anzeigen" + log " sudo myp-maintenance restart # Services neustarten" + log "" + + warning "WICHTIG: Führen Sie jetzt 'sudo reboot' aus, um die Optimierungen zu aktivieren!" +} + +# Skript ausführen +main "$@" \ No newline at end of file diff --git a/backend/app/aktiviere_drucker.py b/backend/app/utils/aktiviere_drucker.py similarity index 100% rename from backend/app/aktiviere_drucker.py rename to backend/app/utils/aktiviere_drucker.py diff --git a/backend/app/debug_guest_requests.py b/backend/app/utils/debug_guest_requests.py similarity index 100% rename from backend/app/debug_guest_requests.py rename to backend/app/utils/debug_guest_requests.py diff --git a/backend/app/test_korrekturen.py b/backend/app/utils/test_korrekturen.py similarity index 100% rename from backend/app/test_korrekturen.py rename to backend/app/utils/test_korrekturen.py diff --git a/backend/app/test_p110.py b/backend/app/utils/test_p110.py similarity index 100% rename from backend/app/test_p110.py rename to backend/app/utils/test_p110.py diff --git a/backend/app/test_tapo_direkt.py b/backend/app/utils/test_tapo_direkt.py similarity index 100% rename from backend/app/test_tapo_direkt.py rename to backend/app/utils/test_tapo_direkt.py diff --git a/backend/app/test_tapo_sofort.py b/backend/app/utils/test_tapo_sofort.py similarity index 100% rename from backend/app/test_tapo_sofort.py rename to backend/app/utils/test_tapo_sofort.py