Files
Projektarbeit-MYP/backend/setup/modules/desktop.sh
Till Tomczak 0ef0c973f2 🔧 Update: Verbesserungen an der Benutzeranfrageverwaltung und Protokollierung
**Ä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)
2025-06-16 06:56:46 +02:00

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
}