**Änderungen:** - ✅ Hinzugefügt: Neue Funktionalität zur Verwaltung von Benutzeranfragen, um die Benutzerfreundlichkeit zu erhöhen. - ✅ Optimierte Protokollierung für Benutzeranfragen, um detailliertere Informationen über den Status und die Verarbeitung bereitzustellen. **Ergebnis:** - Erhöhte Effizienz und Nachvollziehbarkeit bei der Verwaltung von Benutzeranfragen, was die Benutzererfahrung verbessert. 🤖 Generated with [Claude Code](https://claude.ai/code)
1004 lines
26 KiB
Bash
1004 lines
26 KiB
Bash
#!/bin/bash
|
|
|
|
#######################################################################
|
|
# MYP AIO-Installer - Desktop Environment & Kiosk Module
|
|
#
|
|
# Dieses Modul behandelt die Installation von:
|
|
# - LXDE Desktop Environment (leichtgewichtig für Raspberry Pi)
|
|
# - Chromium Browser im Kiosk-Modus
|
|
# - Desktop-Konfiguration für automatischen Kiosk-Start
|
|
# - Autostart-Mechanismen
|
|
# - Desktop-Icons und Shortcuts
|
|
#######################################################################
|
|
|
|
# Funktionsdeklarationen für Desktop & Kiosk Setup
|
|
|
|
setup_desktop_environment() {
|
|
log "INFO" "=== DESKTOP ENVIRONMENT EINRICHTEN ==="
|
|
|
|
# LXDE Desktop installieren
|
|
install_lxde_desktop
|
|
|
|
# Chromium installieren
|
|
install_chromium
|
|
|
|
# Kiosk-Konfiguration erstellen
|
|
configure_kiosk_mode
|
|
|
|
# Desktop-Umgebung konfigurieren
|
|
configure_desktop_environment
|
|
|
|
# Autostart einrichten
|
|
setup_autostart
|
|
|
|
# Desktop-Icons erstellen
|
|
create_desktop_icons
|
|
|
|
# Automatische Anmeldung konfigurieren
|
|
configure_auto_login
|
|
|
|
log "INFO" "Desktop Environment Einrichtung abgeschlossen"
|
|
}
|
|
|
|
install_lxde_desktop() {
|
|
log "INFO" "Installiere LXDE Desktop Environment..."
|
|
|
|
# LXDE Core-Packages (minimal für Performance)
|
|
local lxde_packages=(
|
|
"lxde-core" # Kern-Desktop
|
|
"lxde-common" # Gemeinsame Dateien
|
|
"lxpanel" # Panel
|
|
"pcmanfm" # Dateimanager
|
|
"lxsession" # Session-Manager
|
|
"openbox" # Window Manager
|
|
"obconf" # Openbox-Konfiguration
|
|
"lxterminal" # Terminal
|
|
"lxappearance" # Theme-Manager
|
|
"lxinput" # Input-Konfiguration
|
|
"lxrandr" # Display-Konfiguration
|
|
"lxshortcut" # Keyboard-Shortcuts
|
|
|
|
# X11 Grundlagen
|
|
"xorg" # X11-Server
|
|
"xinit" # X11-Initialisierung
|
|
"x11-xserver-utils" # X11-Utilities
|
|
"xdotool" # X11-Automatisierung
|
|
|
|
# Display Manager
|
|
"lightdm" # Leichtgewichtiger Display Manager
|
|
"lightdm-gtk-greeter" # GTK-Greeter für LightDM
|
|
|
|
# Zusätzliche Tools
|
|
"gvfs" # Virtual Filesystem
|
|
"gvfs-backends" # VFS-Backends
|
|
"pulseaudio" # Audio (minimal)
|
|
"alsa-utils" # Audio-Utilities
|
|
)
|
|
|
|
log "INFO" "Installiere LXDE-Packages (${#lxde_packages[@]} Packages)..."
|
|
|
|
# Installation in Batches für bessere Kontrolle
|
|
local batch_size=5
|
|
for ((i=0; i<${#lxde_packages[@]}; i+=batch_size)); do
|
|
local batch=("${lxde_packages[@]:i:batch_size}")
|
|
|
|
log "INFO" "Installiere LXDE-Batch: ${batch[*]}"
|
|
|
|
if ! DEBIAN_FRONTEND=noninteractive apt-get install -y "${batch[@]}"; then
|
|
log "WARN" "LXDE-Batch hatte Probleme, installiere einzeln..."
|
|
|
|
for package in "${batch[@]}"; do
|
|
if ! DEBIAN_FRONTEND=noninteractive apt-get install -y "$package"; then
|
|
log "WARN" "LXDE-Package fehlgeschlagen: $package"
|
|
fi
|
|
done
|
|
fi
|
|
done
|
|
|
|
# LightDM als Standard-Display-Manager setzen
|
|
echo "/usr/sbin/lightdm" > /etc/X11/default-display-manager
|
|
|
|
# LightDM aktivieren
|
|
systemctl enable lightdm
|
|
|
|
log "INFO" "LXDE Desktop Environment installiert"
|
|
}
|
|
|
|
install_chromium() {
|
|
log "INFO" "Installiere Chromium Browser..."
|
|
|
|
# Versuche verschiedene Installationsmethoden
|
|
if install_chromium_apt; then
|
|
log "INFO" "Chromium über APT installiert"
|
|
elif install_chromium_snap; then
|
|
log "INFO" "Chromium über Snap installiert"
|
|
elif install_chromium_flatpak; then
|
|
log "INFO" "Chromium über Flatpak installiert"
|
|
else
|
|
log "ERROR" "Chromium Installation fehlgeschlagen"
|
|
return 1
|
|
fi
|
|
|
|
# Chromium für Kiosk-Modus konfigurieren
|
|
configure_chromium_for_kiosk
|
|
|
|
log "INFO" "Chromium Installation abgeschlossen"
|
|
}
|
|
|
|
install_chromium_apt() {
|
|
log "INFO" "Versuche Chromium Installation über APT..."
|
|
|
|
# Standard Chromium-Packages
|
|
local chromium_packages=(
|
|
"chromium-browser"
|
|
"chromium-browser-l10n"
|
|
"chromium-codecs-ffmpeg"
|
|
)
|
|
|
|
# Alternative Package-Namen für verschiedene Distributionen
|
|
local chromium_alternatives=(
|
|
"chromium"
|
|
"chromium-bsu"
|
|
)
|
|
|
|
# Versuche Standard-Packages
|
|
for package in "${chromium_packages[@]}"; do
|
|
if apt-cache search "$package" | grep -q "$package"; then
|
|
if DEBIAN_FRONTEND=noninteractive apt-get install -y "$package"; then
|
|
log "INFO" "Chromium-Package installiert: $package"
|
|
return 0
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# Versuche Alternative-Packages
|
|
for package in "${chromium_alternatives[@]}"; do
|
|
if apt-cache search "$package" | grep -q "$package"; then
|
|
if DEBIAN_FRONTEND=noninteractive apt-get install -y "$package"; then
|
|
log "INFO" "Chromium-Alternative installiert: $package"
|
|
return 0
|
|
fi
|
|
fi
|
|
done
|
|
|
|
log "WARN" "Chromium APT-Installation fehlgeschlagen"
|
|
return 1
|
|
}
|
|
|
|
install_chromium_snap() {
|
|
log "INFO" "Versuche Chromium Installation über Snap..."
|
|
|
|
# Snap installieren falls nicht vorhanden
|
|
if ! command -v snap >/dev/null 2>&1; then
|
|
DEBIAN_FRONTEND=noninteractive apt-get install -y snapd
|
|
systemctl enable --now snapd.socket
|
|
sleep 10 # Warte auf Snap-Initialisierung
|
|
fi
|
|
|
|
# Chromium über Snap installieren
|
|
if snap install chromium; then
|
|
# Symlink für Kompatibilität erstellen
|
|
ln -sf /snap/bin/chromium /usr/local/bin/chromium-browser
|
|
ln -sf /snap/bin/chromium /usr/local/bin/chromium
|
|
|
|
return 0
|
|
fi
|
|
|
|
log "WARN" "Chromium Snap-Installation fehlgeschlagen"
|
|
return 1
|
|
}
|
|
|
|
install_chromium_flatpak() {
|
|
log "INFO" "Versuche Chromium Installation über Flatpak..."
|
|
|
|
# Flatpak installieren falls nicht vorhanden
|
|
if ! command -v flatpak >/dev/null 2>&1; then
|
|
DEBIAN_FRONTEND=noninteractive apt-get install -y flatpak
|
|
|
|
# Flathub Repository hinzufügen
|
|
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
|
|
fi
|
|
|
|
# Chromium über Flatpak installieren
|
|
if flatpak install -y flathub org.chromium.Chromium; then
|
|
# Wrapper-Script für Kompatibilität erstellen
|
|
cat > /usr/local/bin/chromium-browser << 'EOF'
|
|
#!/bin/bash
|
|
exec flatpak run org.chromium.Chromium "$@"
|
|
EOF
|
|
chmod +x /usr/local/bin/chromium-browser
|
|
|
|
return 0
|
|
fi
|
|
|
|
log "WARN" "Chromium Flatpak-Installation fehlgeschlagen"
|
|
return 1
|
|
}
|
|
|
|
configure_chromium_for_kiosk() {
|
|
log "INFO" "Konfiguriere Chromium für Kiosk-Modus..."
|
|
|
|
# Chromium-Konfigurationsverzeichnis erstellen
|
|
local chromium_config_dir="/home/$PROJECT_USER/.config/chromium"
|
|
mkdir -p "$chromium_config_dir/Default"
|
|
|
|
# Kiosk-freundliche Preferences
|
|
cat > "$chromium_config_dir/Default/Preferences" << EOF
|
|
{
|
|
"browser": {
|
|
"check_default_browser": false,
|
|
"show_home_button": false
|
|
},
|
|
"profile": {
|
|
"default_content_setting_values": {
|
|
"notifications": 2
|
|
},
|
|
"exit_type": "Normal",
|
|
"password_manager_enabled": false
|
|
},
|
|
"bookmark_bar": {
|
|
"show_on_all_tabs": false
|
|
},
|
|
"distribution": {
|
|
"import_bookmarks": false,
|
|
"make_chrome_default": false,
|
|
"show_welcome_page": false
|
|
},
|
|
"first_run_tabs": [],
|
|
"homepage": "https://localhost",
|
|
"homepage_is_newtabpage": false,
|
|
"session": {
|
|
"restore_on_startup": 4,
|
|
"startup_urls": ["https://localhost"]
|
|
}
|
|
}
|
|
EOF
|
|
|
|
# Chromium-Flags für optimale Kiosk-Performance
|
|
cat > "$chromium_config_dir/chrome_flags.conf" << EOF
|
|
# MYP Kiosk Chromium Flags
|
|
--kiosk
|
|
--disable-infobars
|
|
--disable-session-crashed-bubble
|
|
--disable-restore-session-state
|
|
--disable-background-timer-throttling
|
|
--disable-backgrounding-occluded-windows
|
|
--disable-renderer-backgrounding
|
|
--disable-features=TranslateUI
|
|
--disable-web-security
|
|
--disable-features=VizDisplayCompositor
|
|
--no-first-run
|
|
--autoplay-policy=no-user-gesture-required
|
|
--disable-dev-shm-usage
|
|
--no-sandbox
|
|
--disable-gpu-sandbox
|
|
--ignore-certificate-errors
|
|
--ignore-ssl-errors
|
|
--ignore-certificate-errors-spki-list
|
|
--ignore-ssl-errors-spki-list
|
|
--allow-running-insecure-content
|
|
--disable-extensions
|
|
--disable-plugins
|
|
--disable-background-networking
|
|
--disable-background-timer-throttling
|
|
--disable-client-side-phishing-detection
|
|
--disable-default-apps
|
|
--disable-hang-monitor
|
|
--disable-popup-blocking
|
|
--disable-prompt-on-repost
|
|
--disable-sync
|
|
--metrics-recording-only
|
|
--no-default-browser-check
|
|
--no-pings
|
|
--password-store=basic
|
|
--use-mock-keychain
|
|
--force-device-scale-factor=1
|
|
EOF
|
|
|
|
# Berechtigungen setzen
|
|
chown -R "$PROJECT_USER:$PROJECT_GROUP" "$chromium_config_dir"
|
|
|
|
log "INFO" "Chromium für Kiosk-Modus konfiguriert"
|
|
}
|
|
|
|
configure_kiosk_mode() {
|
|
log "INFO" "Konfiguriere Kiosk-Modus..."
|
|
|
|
# Kiosk-Start-Script erstellen
|
|
create_kiosk_start_script
|
|
|
|
# Systemd-Service für Kiosk erstellen
|
|
create_kiosk_systemd_service
|
|
|
|
# Kiosk-Umgebung konfigurieren
|
|
configure_kiosk_environment
|
|
|
|
log "INFO" "Kiosk-Modus konfiguriert"
|
|
}
|
|
|
|
create_kiosk_start_script() {
|
|
log "INFO" "Erstelle Kiosk-Start-Script..."
|
|
|
|
local kiosk_script="/usr/local/bin/myp-kiosk.sh"
|
|
|
|
cat > "$kiosk_script" << EOF
|
|
#!/bin/bash
|
|
|
|
#######################################################################
|
|
# MYP Kiosk-Modus Start-Script
|
|
#
|
|
# Startet das MYP-System im Vollbild-Kiosk-Modus
|
|
#######################################################################
|
|
|
|
set -euo pipefail
|
|
|
|
# Konfiguration
|
|
PROJECT_USER="$PROJECT_USER"
|
|
MYP_URL="https://localhost"
|
|
DISPLAY_NUM=":0"
|
|
CHROMIUM_CONFIG="/home/\$PROJECT_USER/.config/chromium"
|
|
|
|
# Logging
|
|
exec >> /var/log/myp-kiosk.log 2>&1
|
|
echo "[\$(date)] MYP Kiosk-Modus wird gestartet..."
|
|
|
|
# Warte auf X11-Server
|
|
wait_for_x11() {
|
|
echo "Warte auf X11-Server..."
|
|
for i in {1..30}; do
|
|
if DISPLAY=\$DISPLAY_NUM xdpyinfo >/dev/null 2>&1; then
|
|
echo "X11-Server verfügbar"
|
|
return 0
|
|
fi
|
|
sleep 2
|
|
done
|
|
echo "X11-Server nicht verfügbar nach 60 Sekunden"
|
|
return 1
|
|
}
|
|
|
|
# Warte auf Netzwerk
|
|
wait_for_network() {
|
|
echo "Warte auf Netzwerk..."
|
|
for i in {1..15}; do
|
|
if ping -c 1 127.0.0.1 >/dev/null 2>&1; then
|
|
echo "Netzwerk verfügbar"
|
|
return 0
|
|
fi
|
|
sleep 2
|
|
done
|
|
echo "Netzwerk nicht verfügbar nach 30 Sekunden"
|
|
return 1
|
|
}
|
|
|
|
# Warte auf MYP-Service
|
|
wait_for_myp_service() {
|
|
echo "Warte auf MYP-Service..."
|
|
for i in {1..30}; do
|
|
if systemctl is-active --quiet myp-https; then
|
|
echo "MYP-Service aktiv"
|
|
sleep 5 # Zusätzliche Zeit für vollständigen Start
|
|
return 0
|
|
fi
|
|
sleep 2
|
|
done
|
|
echo "MYP-Service nicht verfügbar nach 60 Sekunden"
|
|
return 1
|
|
}
|
|
|
|
# Bildschirm-Saver deaktivieren
|
|
disable_screensaver() {
|
|
echo "Deaktiviere Bildschirmschoner..."
|
|
DISPLAY=\$DISPLAY_NUM xset s off 2>/dev/null || true
|
|
DISPLAY=\$DISPLAY_NUM xset -dpms 2>/dev/null || true
|
|
DISPLAY=\$DISPLAY_NUM xset s noblank 2>/dev/null || true
|
|
}
|
|
|
|
# Mauszeiger verstecken
|
|
hide_cursor() {
|
|
echo "Verstecke Mauszeiger..."
|
|
DISPLAY=\$DISPLAY_NUM unclutter -display \$DISPLAY_NUM -idle 0.1 -root 2>/dev/null &
|
|
}
|
|
|
|
# Chromium-Cache bereinigen
|
|
clean_chromium_cache() {
|
|
echo "Bereinige Chromium-Cache..."
|
|
rm -rf "\$CHROMIUM_CONFIG/Default/Application Cache" 2>/dev/null || true
|
|
rm -rf "\$CHROMIUM_CONFIG/Default/Cache" 2>/dev/null || true
|
|
rm -rf "\$CHROMIUM_CONFIG/Default/Code Cache" 2>/dev/null || true
|
|
}
|
|
|
|
# Hauptfunktion
|
|
main() {
|
|
echo "=== MYP Kiosk-Modus Start ==="
|
|
|
|
# Warte auf alle Abhängigkeiten
|
|
wait_for_x11 || exit 1
|
|
wait_for_network || exit 1
|
|
wait_for_myp_service || exit 1
|
|
|
|
# Umgebung vorbereiten
|
|
disable_screensaver
|
|
hide_cursor
|
|
clean_chromium_cache
|
|
|
|
# Bestimme Chromium-Executable
|
|
CHROMIUM_BIN=""
|
|
for bin in chromium-browser chromium /snap/bin/chromium; do
|
|
if command -v "\$bin" >/dev/null 2>&1; then
|
|
CHROMIUM_BIN="\$bin"
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [[ -z "\$CHROMIUM_BIN" ]]; then
|
|
echo "FEHLER: Chromium nicht gefunden"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Verwende Chromium: \$CHROMIUM_BIN"
|
|
|
|
# Chromium im Kiosk-Modus starten
|
|
echo "Starte Chromium im Kiosk-Modus..."
|
|
echo "URL: \$MYP_URL"
|
|
|
|
DISPLAY=\$DISPLAY_NUM "\$CHROMIUM_BIN" \\
|
|
--kiosk \\
|
|
--disable-infobars \\
|
|
--disable-session-crashed-bubble \\
|
|
--disable-restore-session-state \\
|
|
--disable-background-timer-throttling \\
|
|
--disable-backgrounding-occluded-windows \\
|
|
--disable-renderer-backgrounding \\
|
|
--disable-features=TranslateUI \\
|
|
--disable-web-security \\
|
|
--disable-features=VizDisplayCompositor \\
|
|
--no-first-run \\
|
|
--autoplay-policy=no-user-gesture-required \\
|
|
--disable-dev-shm-usage \\
|
|
--no-sandbox \\
|
|
--disable-gpu-sandbox \\
|
|
--ignore-certificate-errors \\
|
|
--ignore-ssl-errors \\
|
|
--ignore-certificate-errors-spki-list \\
|
|
--ignore-ssl-errors-spki-list \\
|
|
--allow-running-insecure-content \\
|
|
--disable-extensions \\
|
|
--disable-plugins \\
|
|
--disable-background-networking \\
|
|
--disable-background-timer-throttling \\
|
|
--disable-client-side-phishing-detection \\
|
|
--disable-default-apps \\
|
|
--disable-hang-monitor \\
|
|
--disable-popup-blocking \\
|
|
--disable-prompt-on-repost \\
|
|
--disable-sync \\
|
|
--metrics-recording-only \\
|
|
--no-default-browser-check \\
|
|
--no-pings \\
|
|
--password-store=basic \\
|
|
--use-mock-keychain \\
|
|
--force-device-scale-factor=1 \\
|
|
--user-data-dir="\$CHROMIUM_CONFIG" \\
|
|
"\$MYP_URL" 2>&1
|
|
|
|
echo "Chromium beendet mit Exit-Code: \$?"
|
|
}
|
|
|
|
# Script starten
|
|
main "\$@"
|
|
EOF
|
|
|
|
chmod +x "$kiosk_script"
|
|
chown root:root "$kiosk_script"
|
|
|
|
log "INFO" "Kiosk-Start-Script erstellt: $kiosk_script"
|
|
}
|
|
|
|
create_kiosk_systemd_service() {
|
|
log "INFO" "Erstelle Kiosk SystemD-Service..."
|
|
|
|
cat > "/etc/systemd/system/${KIOSK_SERVICE}.service" << EOF
|
|
[Unit]
|
|
Description=MYP Kiosk Mode
|
|
Documentation=https://github.com/mercedes-benz/myp
|
|
After=graphical-session.target
|
|
After=myp-https.service
|
|
Wants=myp-https.service
|
|
PartOf=graphical-session.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=$PROJECT_USER
|
|
Group=$PROJECT_GROUP
|
|
Environment=DISPLAY=:0
|
|
Environment=HOME=/home/$PROJECT_USER
|
|
ExecStartPre=/bin/sleep 10
|
|
ExecStart=/usr/local/bin/myp-kiosk.sh
|
|
Restart=always
|
|
RestartSec=5
|
|
StandardOutput=append:/var/log/myp-kiosk.log
|
|
StandardError=append:/var/log/myp-kiosk.log
|
|
|
|
# Sicherheits-Einstellungen
|
|
NoNewPrivileges=true
|
|
PrivateTmp=true
|
|
ProtectHome=false
|
|
ProtectSystem=strict
|
|
ReadWritePaths=/home/$PROJECT_USER
|
|
ReadWritePaths=/tmp
|
|
ReadWritePaths=/var/log
|
|
|
|
[Install]
|
|
WantedBy=graphical-session.target
|
|
EOF
|
|
|
|
# Service aktivieren
|
|
systemctl daemon-reload
|
|
systemctl enable "$KIOSK_SERVICE"
|
|
|
|
log "INFO" "Kiosk SystemD-Service erstellt und aktiviert"
|
|
}
|
|
|
|
configure_kiosk_environment() {
|
|
log "INFO" "Konfiguriere Kiosk-Umgebung..."
|
|
|
|
# Unclutter für Mauszeiger-Verstecken installieren
|
|
DEBIAN_FRONTEND=noninteractive apt-get install -y unclutter || {
|
|
log "WARN" "unclutter konnte nicht installiert werden"
|
|
}
|
|
|
|
# Bildschirmschoner komplett deaktivieren
|
|
DEBIAN_FRONTEND=noninteractive apt-get remove -y xscreensaver* || true
|
|
|
|
# DPMS-Energiesparmodus deaktivieren
|
|
cat > "/home/$PROJECT_USER/.xprofile" << 'EOF'
|
|
# MYP Kiosk X11-Konfiguration
|
|
xset s off
|
|
xset -dpms
|
|
xset s noblank
|
|
EOF
|
|
|
|
chown "$PROJECT_USER:$PROJECT_GROUP" "/home/$PROJECT_USER/.xprofile"
|
|
|
|
log "INFO" "Kiosk-Umgebung konfiguriert"
|
|
}
|
|
|
|
configure_desktop_environment() {
|
|
log "INFO" "Konfiguriere Desktop-Umgebung..."
|
|
|
|
# LXDE-Konfiguration
|
|
configure_lxde
|
|
|
|
# LightDM-Konfiguration
|
|
configure_lightdm
|
|
|
|
# Openbox-Konfiguration
|
|
configure_openbox
|
|
|
|
log "INFO" "Desktop-Umgebung konfiguriert"
|
|
}
|
|
|
|
configure_lxde() {
|
|
log "INFO" "Konfiguriere LXDE..."
|
|
|
|
local lxde_config_dir="/home/$PROJECT_USER/.config/lxsession/LXDE"
|
|
mkdir -p "$lxde_config_dir"
|
|
|
|
# LXDE Desktop-Konfiguration
|
|
cat > "$lxde_config_dir/desktop.conf" << 'EOF'
|
|
[Session]
|
|
window_manager=openbox-lxde
|
|
windows_manager/command=openbox
|
|
windows_manager/session=LXDE
|
|
disable_autostart=no
|
|
polkit/command=lxpolkit
|
|
clipboard/command=lxclipboard
|
|
xrandr/command=lxrandr
|
|
keyring/command=ssh-agent
|
|
quit_manager/command=lxsession-logout
|
|
quit_manager/image=/usr/share/lxde/images/logout-banner.png
|
|
quit_manager/layout=top
|
|
|
|
[GTK]
|
|
sNet/ThemeName=Clearlooks
|
|
sNet/IconThemeName=nuoveXT2
|
|
sGtk/FontName=Sans 10
|
|
iGtk/ToolbarStyle=3
|
|
iGtk/ButtonImages=1
|
|
iGtk/MenuImages=1
|
|
iGtk/CursorThemeSize=18
|
|
iXft/Antialias=1
|
|
iXft/Hinting=1
|
|
iXft/HintStyle=hintslight
|
|
iXft/RGBA=rgb
|
|
|
|
[Mouse]
|
|
AccFactor=20
|
|
AccThreshold=10
|
|
LeftHanded=0
|
|
|
|
[Keyboard]
|
|
Delay=500
|
|
Interval=30
|
|
Beep=1
|
|
|
|
[State]
|
|
guess_default=true
|
|
|
|
[Dbus]
|
|
lxde=true
|
|
|
|
[Environment]
|
|
menu_prefix=lxde-
|
|
EOF
|
|
|
|
# Autostart-Konfiguration
|
|
cat > "$lxde_config_dir/autostart" << 'EOF'
|
|
@lxpanel --profile LXDE
|
|
@pcmanfm --desktop --profile LXDE
|
|
@xscreensaver -no-splash
|
|
EOF
|
|
|
|
chown -R "$PROJECT_USER:$PROJECT_GROUP" "/home/$PROJECT_USER/.config"
|
|
|
|
log "INFO" "LXDE konfiguriert"
|
|
}
|
|
|
|
configure_lightdm() {
|
|
log "INFO" "Konfiguriere LightDM..."
|
|
|
|
# LightDM Haupt-Konfiguration
|
|
cat > "/etc/lightdm/lightdm.conf" << EOF
|
|
[Seat:*]
|
|
autologin-guest=false
|
|
autologin-user=$PROJECT_USER
|
|
autologin-user-timeout=0
|
|
autologin-session=LXDE
|
|
user-session=LXDE
|
|
greeter-session=lightdm-gtk-greeter
|
|
greeter-hide-users=false
|
|
greeter-allow-guest=false
|
|
greeter-show-manual-login=false
|
|
greeter-show-remote-login=false
|
|
session-wrapper=/etc/lightdm/Xsession
|
|
display-setup-script=/etc/lightdm/display_setup.sh
|
|
EOF
|
|
|
|
# LightDM GTK-Greeter Konfiguration
|
|
cat > "/etc/lightdm/lightdm-gtk-greeter.conf" << 'EOF'
|
|
[greeter]
|
|
background=/usr/share/pixmaps/myp-background.jpg
|
|
theme-name=Clearlooks
|
|
icon-theme-name=nuoveXT2
|
|
font-name=Sans 11
|
|
xft-antialias=true
|
|
xft-dpi=96
|
|
xft-hintstyle=hintslight
|
|
xft-rgba=rgb
|
|
show-indicators=~host;~spacer;~clock;~spacer;~session;~language;~a11y;~power
|
|
show-clock=true
|
|
clock-format=%H:%M
|
|
keyboard=
|
|
position=50%,center 50%,center
|
|
default-user-image=/usr/share/pixmaps/myp-user.png
|
|
hide-user-image=false
|
|
round-user-image=false
|
|
highlight-logged-user=true
|
|
panel-position=bottom
|
|
idle-timeout=60
|
|
EOF
|
|
|
|
# Display-Setup-Script
|
|
cat > "/etc/lightdm/display_setup.sh" << 'EOF'
|
|
#!/bin/bash
|
|
# MYP Display Setup
|
|
xset s off
|
|
xset -dpms
|
|
xset s noblank
|
|
EOF
|
|
chmod +x "/etc/lightdm/display_setup.sh"
|
|
|
|
log "INFO" "LightDM konfiguriert"
|
|
}
|
|
|
|
configure_openbox() {
|
|
log "INFO" "Konfiguriere Openbox..."
|
|
|
|
local openbox_config_dir="/home/$PROJECT_USER/.config/openbox"
|
|
mkdir -p "$openbox_config_dir"
|
|
|
|
# Openbox RC-Konfiguration
|
|
cat > "$openbox_config_dir/rc.xml" << 'EOF'
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<openbox_config xmlns="http://openbox.org/3.4/rc">
|
|
<resistance>
|
|
<strength>10</strength>
|
|
<screen_edge_strength>20</screen_edge_strength>
|
|
</resistance>
|
|
<focus>
|
|
<focusNew>yes</focusNew>
|
|
<followMouse>no</followMouse>
|
|
<focusLast>yes</focusLast>
|
|
<underMouse>no</underMouse>
|
|
<focusDelay>200</focusDelay>
|
|
<raiseOnFocus>no</raiseOnFocus>
|
|
</focus>
|
|
<placement>
|
|
<policy>Smart</policy>
|
|
<center>yes</center>
|
|
<monitor>Primary</monitor>
|
|
<primaryMonitor>1</primaryMonitor>
|
|
</placement>
|
|
<theme>
|
|
<name>Clearlooks</name>
|
|
<titleLayout>NLIMC</titleLayout>
|
|
<keepBorder>yes</keepBorder>
|
|
<animateIconify>yes</animateIconify>
|
|
<font place="ActiveWindow">
|
|
<name>sans</name>
|
|
<size>8</size>
|
|
<weight>bold</weight>
|
|
<slant>normal</slant>
|
|
</font>
|
|
<font place="InactiveWindow">
|
|
<name>sans</name>
|
|
<size>8</size>
|
|
<weight>bold</weight>
|
|
<slant>normal</slant>
|
|
</font>
|
|
<font place="MenuHeader">
|
|
<name>sans</name>
|
|
<size>9</size>
|
|
<weight>normal</weight>
|
|
<slant>normal</slant>
|
|
</font>
|
|
<font place="MenuItem">
|
|
<name>sans</name>
|
|
<size>9</size>
|
|
<weight>normal</weight>
|
|
<slant>normal</slant>
|
|
</font>
|
|
<font place="ActiveOnScreenDisplay">
|
|
<name>sans</name>
|
|
<size>9</size>
|
|
<weight>bold</weight>
|
|
<slant>normal</slant>
|
|
</font>
|
|
<font place="InactiveOnScreenDisplay">
|
|
<name>sans</name>
|
|
<size>9</size>
|
|
<weight>bold</weight>
|
|
<slant>normal</slant>
|
|
</font>
|
|
</theme>
|
|
<desktops>
|
|
<number>1</number>
|
|
<firstdesk>1</firstdesk>
|
|
<names>
|
|
<name>MYP</name>
|
|
</names>
|
|
<popupTime>875</popupTime>
|
|
</desktops>
|
|
<resize>
|
|
<drawContents>yes</drawContents>
|
|
<popupShow>Nonpixel</popupShow>
|
|
<popupPosition>Center</popupPosition>
|
|
<popupFixedPosition>
|
|
<x>10</x>
|
|
<y>10</y>
|
|
</popupFixedPosition>
|
|
</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>
|
|
<chainQuitKey>C-g</chainQuitKey>
|
|
<keybind key="A-F4">
|
|
<action name="Close"/>
|
|
</keybind>
|
|
<keybind key="A-Escape">
|
|
<action name="Lower"/>
|
|
<action name="FocusToBottom"/>
|
|
<action name="Unfocus"/>
|
|
</keybind>
|
|
</keyboard>
|
|
<mouse>
|
|
<dragThreshold>1</dragThreshold>
|
|
<doubleClickTime>500</doubleClickTime>
|
|
<screenEdgeWarpTime>400</screenEdgeWarpTime>
|
|
<screenEdgeWarpMouse>false</screenEdgeWarpMouse>
|
|
</mouse>
|
|
<menu>
|
|
<file>menu.xml</file>
|
|
<hideDelay>200</hideDelay>
|
|
<middle>no</middle>
|
|
<submenuShowDelay>100</submenuShowDelay>
|
|
<submenuHideDelay>400</submenuHideDelay>
|
|
<applicationIcons>yes</applicationIcons>
|
|
<manageDesktops>yes</manageDesktops>
|
|
</menu>
|
|
<applications>
|
|
<application name="*">
|
|
<decor>no</decor>
|
|
<maximized>true</maximized>
|
|
</application>
|
|
</applications>
|
|
</openbox_config>
|
|
EOF
|
|
|
|
chown -R "$PROJECT_USER:$PROJECT_GROUP" "$openbox_config_dir"
|
|
|
|
log "INFO" "Openbox konfiguriert"
|
|
}
|
|
|
|
setup_autostart() {
|
|
log "INFO" "Richte Autostart ein..."
|
|
|
|
# Systemd-Target für Desktop
|
|
create_desktop_target
|
|
|
|
# User-Autostart
|
|
configure_user_autostart
|
|
|
|
log "INFO" "Autostart eingerichtet"
|
|
}
|
|
|
|
create_desktop_target() {
|
|
log "INFO" "Erstelle Desktop SystemD-Target..."
|
|
|
|
cat > "/etc/systemd/system/myp-desktop.target" << 'EOF'
|
|
[Unit]
|
|
Description=MYP Desktop Environment
|
|
Documentation=https://github.com/mercedes-benz/myp
|
|
Requires=graphical-session.target
|
|
After=graphical-session.target
|
|
AllowIsolate=yes
|
|
|
|
[Install]
|
|
WantedBy=graphical.target
|
|
EOF
|
|
|
|
systemctl daemon-reload
|
|
systemctl enable myp-desktop.target
|
|
|
|
log "INFO" "Desktop SystemD-Target erstellt"
|
|
}
|
|
|
|
configure_user_autostart() {
|
|
log "INFO" "Konfiguriere Benutzer-Autostart..."
|
|
|
|
local autostart_dir="/home/$PROJECT_USER/.config/autostart"
|
|
mkdir -p "$autostart_dir"
|
|
|
|
# MYP Kiosk Autostart
|
|
cat > "$autostart_dir/myp-kiosk.desktop" << 'EOF'
|
|
[Desktop Entry]
|
|
Type=Application
|
|
Name=MYP Kiosk
|
|
Comment=Mercedes-Benz 3D Printer Management System
|
|
Exec=/usr/local/bin/myp-kiosk.sh
|
|
Terminal=false
|
|
Hidden=false
|
|
X-GNOME-Autostart-enabled=true
|
|
StartupNotify=false
|
|
EOF
|
|
|
|
chown -R "$PROJECT_USER:$PROJECT_GROUP" "$autostart_dir"
|
|
|
|
log "INFO" "Benutzer-Autostart konfiguriert"
|
|
}
|
|
|
|
create_desktop_icons() {
|
|
log "INFO" "Erstelle Desktop-Icons..."
|
|
|
|
local desktop_dir="/home/$PROJECT_USER/Desktop"
|
|
mkdir -p "$desktop_dir"
|
|
|
|
# MYP-System Desktop-Icon
|
|
cat > "$desktop_dir/MYP-System.desktop" << 'EOF'
|
|
[Desktop Entry]
|
|
Version=1.0
|
|
Type=Application
|
|
Name=MYP System
|
|
Comment=Mercedes-Benz 3D Printer Management System
|
|
Exec=chromium-browser --kiosk https://localhost
|
|
Icon=/usr/share/pixmaps/myp-icon.png
|
|
Terminal=false
|
|
StartupNotify=true
|
|
Categories=Office;
|
|
EOF
|
|
|
|
# Terminal Desktop-Icon (für Wartung)
|
|
cat > "$desktop_dir/Terminal.desktop" << 'EOF'
|
|
[Desktop Entry]
|
|
Version=1.0
|
|
Type=Application
|
|
Name=Terminal
|
|
Comment=Terminal für Systemwartung
|
|
Exec=lxterminal
|
|
Icon=utilities-terminal
|
|
Terminal=false
|
|
StartupNotify=true
|
|
Categories=System;
|
|
EOF
|
|
|
|
# Icons ausführbar machen
|
|
chmod +x "$desktop_dir"/*.desktop
|
|
chown -R "$PROJECT_USER:$PROJECT_GROUP" "$desktop_dir"
|
|
|
|
log "INFO" "Desktop-Icons erstellt"
|
|
}
|
|
|
|
configure_auto_login() {
|
|
log "INFO" "Konfiguriere automatische Anmeldung..."
|
|
|
|
# Gruppe autologin erstellen falls nicht vorhanden
|
|
groupadd -f autologin
|
|
|
|
# Benutzer zur autologin-Gruppe hinzufügen
|
|
usermod -a -G autologin "$PROJECT_USER"
|
|
|
|
# LightDM für automatische Anmeldung konfigurieren (bereits in configure_lightdm erledigt)
|
|
|
|
log "INFO" "Automatische Anmeldung konfiguriert"
|
|
}
|
|
|
|
verify_desktop_environment() {
|
|
log "INFO" "Überprüfe Desktop Environment..."
|
|
|
|
local errors=0
|
|
|
|
# Wichtige Packages prüfen
|
|
local required_packages=(
|
|
"lxde-core"
|
|
"lightdm"
|
|
"openbox"
|
|
)
|
|
|
|
for package in "${required_packages[@]}"; do
|
|
if ! dpkg -l | grep -q "^ii.*$package"; then
|
|
log "ERROR" "Desktop-Package fehlt: $package"
|
|
errors=$((errors + 1))
|
|
fi
|
|
done
|
|
|
|
# Chromium prüfen
|
|
if ! command -v chromium-browser >/dev/null 2>&1 && ! command -v chromium >/dev/null 2>&1; then
|
|
log "ERROR" "Chromium nicht verfügbar"
|
|
errors=$((errors + 1))
|
|
fi
|
|
|
|
# Services prüfen
|
|
if ! systemctl is-enabled --quiet lightdm; then
|
|
log "ERROR" "LightDM nicht aktiviert"
|
|
errors=$((errors + 1))
|
|
fi
|
|
|
|
if ! systemctl is-enabled --quiet "$KIOSK_SERVICE"; then
|
|
log "ERROR" "Kiosk-Service nicht aktiviert"
|
|
errors=$((errors + 1))
|
|
fi
|
|
|
|
if [[ $errors -eq 0 ]]; then
|
|
log "INFO" "Desktop Environment Verifikation erfolgreich"
|
|
return 0
|
|
else
|
|
log "ERROR" "Desktop Environment Verifikation fehlgeschlagen ($errors Fehler)"
|
|
return 1
|
|
fi
|
|
} |