🎉 Improved installer script ('installer.sh')
This commit is contained in:
@@ -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'
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<openbox_config xmlns="http://openbox.org/3.4/rc" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<resistance>
|
||||
<strength>10</strength>
|
||||
<screen_edge_strength>20</screen_edge_strength>
|
||||
</resistance>
|
||||
<focus>
|
||||
<focusNew>yes</focusNew>
|
||||
<followMouse>no</followMouse>
|
||||
</focus>
|
||||
<placement>
|
||||
<policy>Smart</policy>
|
||||
<center>yes</center>
|
||||
</placement>
|
||||
<theme>
|
||||
<name>Clearlooks</name>
|
||||
<titleLayout>NLIMC</titleLayout>
|
||||
<keepBorder>no</keepBorder>
|
||||
<animateIconify>yes</animateIconify>
|
||||
</theme>
|
||||
<desktops>
|
||||
<number>1</number>
|
||||
<firstdesk>1</firstdesk>
|
||||
<names>
|
||||
<name>Desktop 1</name>
|
||||
</names>
|
||||
<popupTime>875</popupTime>
|
||||
</desktops>
|
||||
<resize>
|
||||
<drawContents>yes</drawContents>
|
||||
<popupShow>Nonpixel</popupShow>
|
||||
<popupPosition>Center</popupPosition>
|
||||
</resize>
|
||||
<margins>
|
||||
<top>0</top>
|
||||
<bottom>0</bottom>
|
||||
<left>0</left>
|
||||
<right>0</right>
|
||||
</margins>
|
||||
<dock>
|
||||
<position>TopLeft</position>
|
||||
<floatingX>0</floatingX>
|
||||
<floatingY>0</floatingY>
|
||||
<noStrut>no</noStrut>
|
||||
<stacking>Above</stacking>
|
||||
<direction>Vertical</direction>
|
||||
<autoHide>no</autoHide>
|
||||
<hideDelay>300</hideDelay>
|
||||
<showDelay>300</showDelay>
|
||||
<moveButton>Middle</moveButton>
|
||||
</dock>
|
||||
<keyboard>
|
||||
<!-- Deaktiviere alle Tastenkombinationen für Kiosk-Sicherheit -->
|
||||
</keyboard>
|
||||
<mouse>
|
||||
<dragThreshold>8</dragThreshold>
|
||||
<doubleClickTime>200</doubleClickTime>
|
||||
<screenEdgeWarpTime>400</screenEdgeWarpTime>
|
||||
</mouse>
|
||||
<applications>
|
||||
<!-- Chromium/Browser Konfiguration -->
|
||||
<application name="chromium*">
|
||||
<decor>no</decor>
|
||||
<shade>no</shade>
|
||||
<position force="yes">
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
</position>
|
||||
<size>
|
||||
<width>100%</width>
|
||||
<height>100%</height>
|
||||
</size>
|
||||
<fullscreen>yes</fullscreen>
|
||||
<maximized>yes</maximized>
|
||||
<skip_pager>yes</skip_pager>
|
||||
<skip_taskbar>yes</skip_taskbar>
|
||||
<layer>above</layer>
|
||||
</application>
|
||||
<application name="firefox*">
|
||||
<decor>no</decor>
|
||||
<shade>no</shade>
|
||||
<position force="yes">
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
</position>
|
||||
<size>
|
||||
<width>100%</width>
|
||||
<height>100%</height>
|
||||
</size>
|
||||
<fullscreen>yes</fullscreen>
|
||||
<maximized>yes</maximized>
|
||||
<skip_pager>yes</skip_pager>
|
||||
<skip_taskbar>yes</skip_taskbar>
|
||||
<layer>above</layer>
|
||||
</application>
|
||||
</applications>
|
||||
</openbox_config>
|
||||
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 ==========================
|
||||
|
||||
Reference in New Issue
Block a user