diff --git a/backend/app/database/myp.db.backup_20250529_150542 b/backend/app/database/myp.db.backup_20250529_150542 deleted file mode 100644 index 898282ba..00000000 Binary files a/backend/app/database/myp.db.backup_20250529_150542 and /dev/null differ diff --git a/backend/app/database/myp.db.backup_20250529_182203 b/backend/app/database/myp.db.backup_20250529_182203 deleted file mode 100644 index fd64c15a..00000000 Binary files a/backend/app/database/myp.db.backup_20250529_182203 and /dev/null differ diff --git a/backend/app/database/myp.db.backup_20250529_183135 b/backend/app/database/myp.db.backup_20250529_183135 deleted file mode 100644 index 4914a0ed..00000000 Binary files a/backend/app/database/myp.db.backup_20250529_183135 and /dev/null differ diff --git a/backend/app/database/myp.db.backup_20250529_184851 b/backend/app/database/myp.db.backup_20250529_184851 deleted file mode 100644 index 02aa1e32..00000000 Binary files a/backend/app/database/myp.db.backup_20250529_184851 and /dev/null differ diff --git a/backend/app/database/myp.db.backup_20250529_185343 b/backend/app/database/myp.db.backup_20250529_185343 deleted file mode 100644 index e90a7390..00000000 Binary files a/backend/app/database/myp.db.backup_20250529_185343 and /dev/null differ diff --git a/backend/app/database/myp.db.backup_20250529_185834 b/backend/app/database/myp.db.backup_20250529_185834 deleted file mode 100644 index e90a7390..00000000 Binary files a/backend/app/database/myp.db.backup_20250529_185834 and /dev/null differ diff --git a/backend/app/database/myp.db.backup_20250529_230231 b/backend/app/database/myp.db.backup_20250529_230231 deleted file mode 100644 index 1b13074f..00000000 Binary files a/backend/app/database/myp.db.backup_20250529_230231 and /dev/null differ diff --git a/backend/app/database/myp.db.backup_20250529_230235 b/backend/app/database/myp.db.backup_20250529_230235 deleted file mode 100644 index e806586b..00000000 Binary files a/backend/app/database/myp.db.backup_20250529_230235 and /dev/null differ diff --git a/backend/app/database/myp.db.backup_20250529_231800 b/backend/app/database/myp.db.backup_20250529_231800 deleted file mode 100644 index 46a0c1b1..00000000 Binary files a/backend/app/database/myp.db.backup_20250529_231800 and /dev/null differ diff --git a/backend/app/database/myp.db.backup_immediate_20250529_150732 b/backend/app/database/myp.db.backup_immediate_20250529_150732 deleted file mode 100644 index 9208bac1..00000000 Binary files a/backend/app/database/myp.db.backup_immediate_20250529_150732 and /dev/null differ diff --git a/backend/app/database/myp.db.emergency_backup_20250529_185111 b/backend/app/database/myp.db.emergency_backup_20250529_185111 deleted file mode 100644 index 4e86411b..00000000 Binary files a/backend/app/database/myp.db.emergency_backup_20250529_185111 and /dev/null differ diff --git a/backend/app/installer.sh b/backend/app/installer.sh index 6ebbe1fc..c53dc2b9 100644 --- a/backend/app/installer.sh +++ b/backend/app/installer.sh @@ -115,7 +115,6 @@ remove_desktop_environments() { libreoffice* \ thunderbird* \ firefox* \ - chromium-browser \ vlc* \ gimp* \ scratch* \ @@ -165,10 +164,24 @@ install_minimal_x11() { x11-xserver-utils \ xdotool \ unclutter \ - chromium-browser \ openbox \ || error "X11 Installation fehlgeschlagen" + # Chromium Browser mit Fallback-Mechanismus installieren + progress "Installiere Chromium Browser..." + if apt-get install -y chromium 2>/dev/null; then + log "✅ Chromium erfolgreich installiert" + elif apt-get install -y chromium-browser 2>/dev/null; then + log "✅ Chromium-Browser erfolgreich installiert" + elif apt-get install -y firefox-esr 2>/dev/null; then + warning "⚠️ Chromium nicht verfügbar - Firefox ESR als Fallback installiert" + # Firefox-Konfiguration für Kiosk-Modus anpassen + progress "Konfiguriere Firefox für Kiosk-Modus..." + FIREFOX_BROWSER="firefox-esr" + else + error "❌ Kein Browser verfügbar (chromium, chromium-browser, firefox-esr)" + fi + log "✅ Minimale X11-Umgebung installiert" } @@ -316,6 +329,66 @@ install_system_dependencies() { create_backend_services() { log "=== ERSTELLE 3 BACKEND-SERVICES ===" + # Python-Startskripte für die verschiedenen Ports erstellen + progress "Erstelle Python-Startskripte..." + + # HTTPS-Startskript (Port 443) + cat > "$APP_DIR/start_https.py" << 'EOF' +#!/usr/bin/env python3 +import sys +import os + +# Füge App-Verzeichnis zum Python-Pfad hinzu +sys.path.insert(0, '/opt/myp') + +# Setze Umgebungsvariablen +os.environ['FLASK_PORT'] = '443' +os.environ['FLASK_HOST'] = '0.0.0.0' +os.environ['FLASK_ENV'] = 'production' + +try: + from app import app, get_ssl_context + + ssl_context = get_ssl_context() + if ssl_context: + print("Starte HTTPS-Server auf Port 443...") + app.run(host='0.0.0.0', port=443, debug=False, ssl_context=ssl_context, threaded=True) + else: + print('SSL-Kontext nicht verfügbar') + sys.exit(1) +except Exception as e: + print(f"Fehler beim Starten des HTTPS-Servers: {e}") + sys.exit(1) +EOF + + # HTTP-Startskript (Port 80) + cat > "$APP_DIR/start_http.py" << 'EOF' +#!/usr/bin/env python3 +import sys +import os + +# Füge App-Verzeichnis zum Python-Pfad hinzu +sys.path.insert(0, '/opt/myp') + +# Setze Umgebungsvariablen +os.environ['FLASK_PORT'] = '80' +os.environ['FLASK_HOST'] = '0.0.0.0' +os.environ['FLASK_ENV'] = 'production' + +try: + from app import app + + print("Starte HTTP-Server auf Port 80...") + app.run(host='0.0.0.0', port=80, debug=False, threaded=True) +except Exception as e: + print(f"Fehler beim Starten des HTTP-Servers: {e}") + sys.exit(1) +EOF + + # Skripte ausführbar machen + chmod +x "$APP_DIR/start_https.py" + chmod +x "$APP_DIR/start_http.py" + # Service 1: Kiosk-Backend (Port 5000) progress "Erstelle myp-kiosk.service (Port 5000)..." cat > "/etc/systemd/system/${SERVICE_NAME_KIOSK}.service" << EOF @@ -374,20 +447,7 @@ Type=simple User=root Group=root WorkingDirectory=$APP_DIR -ExecStart=/usr/bin/python3 -c " -import sys, os -sys.path.insert(0, '$APP_DIR') -os.environ['FLASK_PORT'] = '443' -os.environ['FLASK_HOST'] = '0.0.0.0' -os.environ['FLASK_ENV'] = 'production' -from app import app, get_ssl_context -ssl_context = get_ssl_context() -if ssl_context: - app.run(host='0.0.0.0', port=443, debug=False, ssl_context=ssl_context, threaded=True) -else: - print('SSL-Kontext nicht verfügbar') - exit(1) -" +ExecStart=/usr/bin/python3 $APP_DIR/start_https.py Restart=always RestartSec=5 StartLimitBurst=5 @@ -431,15 +491,7 @@ Type=simple User=root Group=root WorkingDirectory=$APP_DIR -ExecStart=/usr/bin/python3 -c " -import sys, os -sys.path.insert(0, '$APP_DIR') -os.environ['FLASK_PORT'] = '80' -os.environ['FLASK_HOST'] = '0.0.0.0' -os.environ['FLASK_ENV'] = 'production' -from app import app -app.run(host='0.0.0.0', port=80, debug=False, threaded=True) -" +ExecStart=/usr/bin/python3 $APP_DIR/start_http.py Restart=always RestartSec=5 StartLimitBurst=5 @@ -469,7 +521,7 @@ ReadWritePaths=$APP_DIR WantedBy=multi-user.target EOF - log "✅ 3 Backend-Services erstellt" + log "✅ 3 Backend-Services mit separaten Python-Skripten erstellt" } # ========================== AUTOLOGIN KONFIGURIEREN ========================== @@ -498,6 +550,110 @@ configure_kiosk_browser() { KIOSK_HOME="/home/$KIOSK_USER" + # Openbox-Konfiguration für randlosen Vollbildmodus + progress "Konfiguriere Openbox für randlosen Vollbildmodus..." + mkdir -p "$KIOSK_HOME/.config/openbox" + + cat > "$KIOSK_HOME/.config/openbox/rc.xml" << 'EOF' + + + + 10 + 20 + + + yes + no + + + Smart +
yes
+
+ + Clearlooks + NLIMC + no + yes + + + 1 + 1 + + Desktop 1 + + 875 + + + yes + Nonpixel + Center + + + 0 + 0 + 0 + 0 + + + TopLeft + 0 + 0 + no + Above + Vertical + no + 300 + 300 + Middle + + + + + + 8 + 200 + 400 + + + + + no + no + + 0 + 0 + + + 100% + 100% + + yes + yes + yes + yes + above + + + no + no + + 0 + 0 + + + 100% + 100% + + yes + yes + yes + yes + above + + +
+EOF + # .bashrc für automatischen X-Start erweitern progress "Konfiguriere automatischen X-Start..." cat >> "$KIOSK_HOME/.bashrc" << 'EOF' @@ -509,18 +665,32 @@ fi EOF # .xinitrc für Kiosk-Session erstellen - progress "Erstelle Kiosk X-Session..." + progress "Erstelle optimierte Kiosk X-Session..." cat > "$KIOSK_HOME/.xinitrc" << 'EOF' #!/bin/bash -# Bildschirmschoner und Energieverwaltung deaktivieren +# Bildschirmauflösung automatisch erkennen +RESOLUTION=$(xrandr | grep '*' | head -1 | awk '{print $1}') +if [ -z "$RESOLUTION" ]; then + RESOLUTION="1920x1080" # Fallback-Auflösung +fi +WIDTH=$(echo $RESOLUTION | cut -d'x' -f1) +HEIGHT=$(echo $RESOLUTION | cut -d'x' -f2) + +echo "Erkannte Bildschirmauflösung: ${WIDTH}x${HEIGHT}" + +# Bildschirmschoner und Energieverwaltung komplett deaktivieren xset s off xset s noblank xset s noexpose xset -dpms +xset s 0 0 -# Mauszeiger verstecken -unclutter -idle 0.5 -root & +# Mauszeiger verstecken (aggressiver) +unclutter -idle 0.1 -root -noevents & + +# Openbox im Hintergrund starten +openbox & # Warte auf Backend-Services echo "Warte auf MYP Backend-Services..." @@ -537,43 +707,139 @@ done echo "Backend erreichbar - starte Kiosk-Browser..." -# Chromium im Vollbild-Kiosk-Modus -exec chromium-browser \ - --kiosk \ - --no-sandbox \ - --disable-infobars \ - --disable-session-crashed-bubble \ - --disable-restore-session-state \ - --disable-web-security \ - --disable-features=TranslateUI \ - --disable-extensions \ - --disable-plugins \ - --disable-popup-blocking \ - --disable-prompt-on-repost \ - --disable-sync \ - --disable-translate \ - --noerrdialogs \ - --no-first-run \ - --no-default-browser-check \ - --autoplay-policy=no-user-gesture-required \ - --start-fullscreen \ - --window-position=0,0 \ - --user-data-dir=/home/kiosk/.chromium-kiosk \ - --disable-background-mode \ - --force-device-scale-factor=1.0 \ - --disable-pinch \ - --overscroll-history-navigation=0 \ - --disable-dev-shm-usage \ - --memory-pressure-off \ - --max_old_space_size=512 \ - http://localhost:5000 +# Browser-Erkennung und -Start mit optimierten Vollbild-Flags +if command -v chromium >/dev/null 2>&1; then + echo "Starte Chromium Browser mit Auflösung ${WIDTH}x${HEIGHT}..." + exec chromium \ + --kiosk \ + --no-sandbox \ + --disable-infobars \ + --disable-session-crashed-bubble \ + --disable-restore-session-state \ + --disable-web-security \ + --disable-features=TranslateUI \ + --disable-extensions \ + --disable-plugins \ + --disable-popup-blocking \ + --disable-prompt-on-repost \ + --disable-sync \ + --disable-translate \ + --noerrdialogs \ + --no-first-run \ + --no-default-browser-check \ + --autoplay-policy=no-user-gesture-required \ + --start-fullscreen \ + --start-maximized \ + --window-size=${WIDTH},${HEIGHT} \ + --window-position=0,0 \ + --user-data-dir=/home/kiosk/.chromium-kiosk \ + --disable-background-mode \ + --force-device-scale-factor=1.0 \ + --disable-pinch \ + --overscroll-history-navigation=0 \ + --disable-dev-shm-usage \ + --memory-pressure-off \ + --max_old_space_size=512 \ + --disable-background-timer-throttling \ + --disable-backgrounding-occluded-windows \ + --disable-renderer-backgrounding \ + --disable-features=VizDisplayCompositor \ + --enable-features=OverlayScrollbar \ + --hide-scrollbars \ + http://localhost:5000 +elif command -v chromium-browser >/dev/null 2>&1; then + echo "Starte Chromium-Browser mit Auflösung ${WIDTH}x${HEIGHT}..." + exec chromium-browser \ + --kiosk \ + --no-sandbox \ + --disable-infobars \ + --disable-session-crashed-bubble \ + --disable-restore-session-state \ + --disable-web-security \ + --disable-features=TranslateUI \ + --disable-extensions \ + --disable-plugins \ + --disable-popup-blocking \ + --disable-prompt-on-repost \ + --disable-sync \ + --disable-translate \ + --noerrdialogs \ + --no-first-run \ + --no-default-browser-check \ + --autoplay-policy=no-user-gesture-required \ + --start-fullscreen \ + --start-maximized \ + --window-size=${WIDTH},${HEIGHT} \ + --window-position=0,0 \ + --user-data-dir=/home/kiosk/.chromium-kiosk \ + --disable-background-mode \ + --force-device-scale-factor=1.0 \ + --disable-pinch \ + --overscroll-history-navigation=0 \ + --disable-dev-shm-usage \ + --memory-pressure-off \ + --max_old_space_size=512 \ + --disable-background-timer-throttling \ + --disable-backgrounding-occluded-windows \ + --disable-renderer-backgrounding \ + --disable-features=VizDisplayCompositor \ + --enable-features=OverlayScrollbar \ + --hide-scrollbars \ + http://localhost:5000 +elif command -v firefox-esr >/dev/null 2>&1; then + echo "Starte Firefox ESR mit Auflösung ${WIDTH}x${HEIGHT}..." + # Firefox-Profil für Kiosk erstellen + mkdir -p /home/kiosk/.mozilla/firefox/kiosk.default + cat > /home/kiosk/.mozilla/firefox/kiosk.default/user.js << FIREFOXEOF +user_pref("browser.shell.checkDefaultBrowser", false); +user_pref("browser.startup.homepage", "http://localhost:5000"); +user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true); +user_pref("browser.tabs.warnOnClose", false); +user_pref("browser.sessionstore.resume_from_crash", false); +user_pref("security.tls.insecure_fallback_hosts", "localhost"); +user_pref("browser.cache.disk.enable", false); +user_pref("browser.cache.memory.enable", true); +user_pref("browser.cache.offline.enable", false); +user_pref("network.http.use-cache", false); +user_pref("browser.fullscreen.autohide", true); +user_pref("dom.disable_open_during_load", false); +user_pref("privacy.popups.disable_from_plugins", 0); +user_pref("dom.popup_maximum", 0); +FIREFOXEOF + + # Firefox CSS für randlosen Vollbildmodus + mkdir -p /home/kiosk/.mozilla/firefox/kiosk.default/chrome + cat > /home/kiosk/.mozilla/firefox/kiosk.default/chrome/userChrome.css << FIREFOXCSS +/* Firefox Kiosk Mode - Hide all UI elements */ +#navigator-toolbox { display: none !important; } +#sidebar-box { display: none !important; } +#urlbar-container { display: none !important; } +#TabsToolbar { display: none !important; } +#nav-bar { display: none !important; } +#PersonalToolbar { display: none !important; } +.toolbar-items { display: none !important; } +#main-window[sizemode="fullscreen"] .tabbrowser-tab { + visibility: collapse !important; +} +FIREFOXCSS + + exec firefox-esr \ + --kiosk \ + --width=${WIDTH} \ + --height=${HEIGHT} \ + --profile /home/kiosk/.mozilla/firefox/kiosk.default \ + http://localhost:5000 +else + echo "FEHLER: Kein Browser verfügbar!" + exit 1 +fi EOF # Berechtigungen setzen chmod +x "$KIOSK_HOME/.xinitrc" chown -R "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME" - log "✅ Kiosk-Browser konfiguriert" + log "✅ Kiosk-Browser mit optimiertem Vollbildmodus konfiguriert" } # ========================== PRODUKTIONS-KIOSK SETUP ==========================