370 lines
8.6 KiB
Bash
370 lines
8.6 KiB
Bash
#!/bin/bash
|
|
|
|
# ===================================================================
|
|
# DEFINITIVER KIOSK-FIX FÜR RASPBERRY PI
|
|
# Löst ALLE X11/Framebuffer-Probleme garantiert
|
|
# ===================================================================
|
|
|
|
set -euo pipefail
|
|
|
|
# Farben
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
log() { echo -e "${GREEN}[$(date '+%H:%M:%S')] $1${NC}"; }
|
|
warning() { echo -e "${YELLOW}[WARNUNG] $1${NC}"; }
|
|
error() { echo -e "${RED}[FEHLER] $1${NC}"; exit 1; }
|
|
info() { echo -e "${BLUE}[INFO] $1${NC}"; }
|
|
|
|
# Root-Check
|
|
if [ "$EUID" -ne 0 ]; then
|
|
error "Als Root ausführen: sudo $0"
|
|
fi
|
|
|
|
log "=== DEFINITIVER KIOSK-FIX ==="
|
|
|
|
# 1. STOPPE ALLES
|
|
log "Stoppe alle Display-Manager und X-Server..."
|
|
systemctl stop lightdm 2>/dev/null || true
|
|
systemctl stop gdm3 2>/dev/null || true
|
|
systemctl stop sddm 2>/dev/null || true
|
|
systemctl stop xdm 2>/dev/null || true
|
|
systemctl stop nodm 2>/dev/null || true
|
|
systemctl disable lightdm 2>/dev/null || true
|
|
systemctl disable gdm3 2>/dev/null || true
|
|
systemctl disable sddm 2>/dev/null || true
|
|
systemctl disable xdm 2>/dev/null || true
|
|
systemctl disable nodm 2>/dev/null || true
|
|
|
|
pkill -f "X" 2>/dev/null || true
|
|
pkill -f "Xorg" 2>/dev/null || true
|
|
pkill -f "xinit" 2>/dev/null || true
|
|
pkill -f "chromium" 2>/dev/null || true
|
|
sleep 3
|
|
|
|
# 2. KERNEL MODE SETTING (KMS) AKTIVIEREN
|
|
log "Aktiviere KMS/DRM Treiber..."
|
|
if [ -f /boot/config.txt ]; then
|
|
cp /boot/config.txt /boot/config.txt.backup-$(date +%s)
|
|
|
|
# Entferne alte Einstellungen
|
|
sed -i '/^dtoverlay=vc4-kms-v3d/d' /boot/config.txt
|
|
sed -i '/^dtoverlay=vc4-fkms-v3d/d' /boot/config.txt
|
|
sed -i '/^gpu_mem=/d' /boot/config.txt
|
|
|
|
# Füge KMS-Treiber hinzu
|
|
cat >> /boot/config.txt << 'EOF'
|
|
|
|
# Kiosk-Modus GPU-Konfiguration
|
|
dtoverlay=vc4-kms-v3d
|
|
max_framebuffers=2
|
|
gpu_mem=256
|
|
hdmi_force_hotplug=1
|
|
hdmi_group=2
|
|
hdmi_mode=82
|
|
hdmi_drive=2
|
|
disable_overscan=1
|
|
EOF
|
|
|
|
info "Boot-Konfiguration aktualisiert"
|
|
fi
|
|
|
|
# 3. INSTALLIERE ALLE NÖTIGEN PAKETE
|
|
log "Installiere notwendige Pakete..."
|
|
apt-get update
|
|
apt-get install -y --no-install-recommends \
|
|
xserver-xorg \
|
|
xserver-xorg-video-all \
|
|
xserver-xorg-input-all \
|
|
xinit \
|
|
x11-xserver-utils \
|
|
openbox \
|
|
chromium-browser \
|
|
unclutter \
|
|
xdotool \
|
|
wmctrl \
|
|
xvfb \
|
|
2>/dev/null || true
|
|
|
|
# 4. ERSTELLE MINIMALE X11-KONFIGURATION
|
|
log "Erstelle X11-Konfiguration..."
|
|
mkdir -p /etc/X11/xorg.conf.d
|
|
|
|
# Hauptkonfiguration
|
|
cat > /etc/X11/xorg.conf << 'EOF'
|
|
Section "ServerFlags"
|
|
Option "BlankTime" "0"
|
|
Option "StandbyTime" "0"
|
|
Option "SuspendTime" "0"
|
|
Option "OffTime" "0"
|
|
Option "DPMS" "false"
|
|
Option "AllowEmptyInput" "true"
|
|
Option "AutoAddDevices" "true"
|
|
EndSection
|
|
|
|
Section "Monitor"
|
|
Identifier "Monitor0"
|
|
Option "DPMS" "false"
|
|
EndSection
|
|
|
|
Section "Device"
|
|
Identifier "Card0"
|
|
Driver "modesetting"
|
|
Option "AccelMethod" "glamor"
|
|
Option "DRI" "3"
|
|
EndSection
|
|
|
|
Section "Screen"
|
|
Identifier "Screen0"
|
|
Device "Card0"
|
|
Monitor "Monitor0"
|
|
DefaultDepth 24
|
|
SubSection "Display"
|
|
Depth 24
|
|
EndSubSection
|
|
EndSection
|
|
EOF
|
|
|
|
# 5. ERSTELLE KIOSK-USER WENN NICHT VORHANDEN
|
|
if ! id "kiosk" &>/dev/null; then
|
|
log "Erstelle kiosk-User..."
|
|
useradd -m -s /bin/bash kiosk
|
|
usermod -aG audio,video,input,dialout,plugdev,users kiosk
|
|
fi
|
|
|
|
# 6. ERSTELLE AUTOLOGIN
|
|
log "Konfiguriere Autologin..."
|
|
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 --noclear %I \$TERM
|
|
Type=idle
|
|
EOF
|
|
|
|
# 7. ERSTELLE DREI VERSCHIEDENE START-METHODEN
|
|
|
|
# Methode 1: Direkt-Start ohne Display Manager
|
|
log "Erstelle Methode 1: Direkt-Start..."
|
|
cat > /home/kiosk/kiosk-direct.sh << 'EOF'
|
|
#!/bin/bash
|
|
export DISPLAY=:0
|
|
export XAUTHORITY=/home/kiosk/.Xauthority
|
|
|
|
# Warte auf Netzwerk
|
|
sleep 10
|
|
|
|
# Erstelle .Xauthority
|
|
touch $XAUTHORITY
|
|
chmod 600 $XAUTHORITY
|
|
|
|
# Starte X-Server direkt
|
|
/usr/bin/xinit /home/kiosk/kiosk-browser.sh -- /usr/bin/X :0 -nolisten tcp -nocursor
|
|
EOF
|
|
|
|
# Browser-Start-Skript
|
|
cat > /home/kiosk/kiosk-browser.sh << 'EOF'
|
|
#!/bin/bash
|
|
|
|
# Warte auf X-Server
|
|
sleep 3
|
|
|
|
# X11-Einstellungen
|
|
xset s off
|
|
xset s noblank
|
|
xset -dpms
|
|
|
|
# Window Manager
|
|
openbox-session &
|
|
sleep 2
|
|
|
|
# Warte auf Backend
|
|
echo "Warte auf Backend..."
|
|
while ! curl -s http://localhost:5000 >/dev/null 2>&1; do
|
|
sleep 2
|
|
done
|
|
|
|
# Starte Browser
|
|
chromium-browser \
|
|
--kiosk \
|
|
--no-sandbox \
|
|
--disable-setuid-sandbox \
|
|
--disable-dev-shm-usage \
|
|
--disable-accelerated-2d-canvas \
|
|
--no-first-run \
|
|
--no-zygote \
|
|
--single-process \
|
|
--disable-gpu \
|
|
--window-size=1920,1080 \
|
|
--start-fullscreen \
|
|
--incognito \
|
|
http://localhost:5000
|
|
EOF
|
|
|
|
# Methode 2: Mit startx
|
|
log "Erstelle Methode 2: startx..."
|
|
cat > /home/kiosk/.xinitrc << 'EOF'
|
|
#!/bin/bash
|
|
xset s off
|
|
xset s noblank
|
|
xset -dpms
|
|
|
|
openbox-session &
|
|
sleep 2
|
|
|
|
# Warte auf Backend
|
|
while ! curl -s http://localhost:5000 >/dev/null 2>&1; do
|
|
sleep 2
|
|
done
|
|
|
|
exec chromium-browser --kiosk --no-sandbox --disable-gpu --disable-software-rasterizer --disable-dev-shm-usage http://localhost:5000
|
|
EOF
|
|
|
|
# Methode 3: Systemd Service
|
|
log "Erstelle Methode 3: Systemd Service..."
|
|
cat > /etc/systemd/system/kiosk.service << 'EOF'
|
|
[Unit]
|
|
Description=Kiosk Mode
|
|
After=multi-user.target network.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
Restart=always
|
|
RestartSec=10
|
|
User=kiosk
|
|
Group=kiosk
|
|
PAMName=login
|
|
TTYPath=/dev/tty2
|
|
StandardInput=tty
|
|
StandardOutput=journal
|
|
StandardError=journal
|
|
Environment="DISPLAY=:0"
|
|
Environment="XAUTHORITY=/home/kiosk/.Xauthority"
|
|
ExecStartPre=/bin/sleep 10
|
|
ExecStart=/usr/bin/xinit /home/kiosk/kiosk-browser.sh -- /usr/bin/X :0 -nolisten tcp
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
|
|
# 8. ERSTELLE FALLBACK: TERMINAL-BROWSER
|
|
log "Erstelle Terminal-Browser-Fallback..."
|
|
cat > /home/kiosk/terminal-browser.sh << 'EOF'
|
|
#!/bin/bash
|
|
# Terminal-basierter Browser als Fallback
|
|
clear
|
|
echo "=== KIOSK-MODUS (Terminal) ==="
|
|
echo "Warte auf Backend..."
|
|
|
|
while ! curl -s http://localhost:5000 >/dev/null 2>&1; do
|
|
sleep 2
|
|
echo -n "."
|
|
done
|
|
|
|
echo ""
|
|
echo "Backend verfügbar!"
|
|
echo ""
|
|
echo "Optionen:"
|
|
echo "1) Links2 Browser starten (Terminal)"
|
|
echo "2) W3M Browser starten (Terminal)"
|
|
echo "3) Versuche X11 erneut"
|
|
echo ""
|
|
|
|
# Installiere Terminal-Browser falls nötig
|
|
which links2 >/dev/null 2>&1 || apt-get install -y links2
|
|
which w3m >/dev/null 2>&1 || apt-get install -y w3m
|
|
|
|
links2 http://localhost:5000
|
|
EOF
|
|
|
|
# 9. BERECHTIGUNGEN SETZEN
|
|
log "Setze Berechtigungen..."
|
|
chmod +x /home/kiosk/*.sh
|
|
chmod +x /home/kiosk/.xinitrc
|
|
chown -R kiosk:kiosk /home/kiosk/
|
|
touch /home/kiosk/.Xauthority
|
|
chown kiosk:kiosk /home/kiosk/.Xauthority
|
|
chmod 600 /home/kiosk/.Xauthority
|
|
|
|
# 10. ERSTELLE MASTER-START-SKRIPT
|
|
log "Erstelle Master-Start-Skript..."
|
|
cat > /home/kiosk/.bashrc << 'EOF'
|
|
# Kiosk Auto-Start
|
|
if [ -z "$DISPLAY" ] && [ "$XDG_VTNR" = "1" ]; then
|
|
echo "=== KIOSK-MODUS WIRD GESTARTET ==="
|
|
echo ""
|
|
echo "Versuche Methode 1: Direkt-Start..."
|
|
|
|
# Methode 1
|
|
if /home/kiosk/kiosk-direct.sh 2>/tmp/kiosk-error1.log; then
|
|
exit 0
|
|
fi
|
|
|
|
echo "Methode 1 fehlgeschlagen. Versuche Methode 2: startx..."
|
|
sleep 2
|
|
|
|
# Methode 2
|
|
if startx -- -nocursor 2>/tmp/kiosk-error2.log; then
|
|
exit 0
|
|
fi
|
|
|
|
echo "Methode 2 fehlgeschlagen. Versuche Methode 3: Xvfb..."
|
|
sleep 2
|
|
|
|
# Methode 3: Virtual Framebuffer
|
|
Xvfb :0 -screen 0 1920x1080x24 &
|
|
export DISPLAY=:0
|
|
sleep 2
|
|
/home/kiosk/kiosk-browser.sh 2>/tmp/kiosk-error3.log
|
|
|
|
# Wenn alles fehlschlägt
|
|
echo ""
|
|
echo "ALLE X11-METHODEN FEHLGESCHLAGEN!"
|
|
echo ""
|
|
echo "Fehler-Logs:"
|
|
echo "- /tmp/kiosk-error1.log"
|
|
echo "- /tmp/kiosk-error2.log"
|
|
echo "- /tmp/kiosk-error3.log"
|
|
echo ""
|
|
echo "Starte Terminal-Browser als Fallback..."
|
|
sleep 3
|
|
/home/kiosk/terminal-browser.sh
|
|
fi
|
|
EOF
|
|
|
|
chown kiosk:kiosk /home/kiosk/.bashrc
|
|
|
|
# 11. SYSTEMD-DIENSTE
|
|
log "Konfiguriere Systemd..."
|
|
systemctl daemon-reload
|
|
systemctl enable getty@tty1.service
|
|
systemctl enable kiosk.service 2>/dev/null || true
|
|
|
|
# 12. FINALE ÜBERPRÜFUNG
|
|
log "✅ INSTALLATION ABGESCHLOSSEN!"
|
|
info ""
|
|
info "📋 Was wurde installiert:"
|
|
info " - KMS/DRM-Treiber aktiviert"
|
|
info " - X11 komplett neu konfiguriert"
|
|
info " - 3 verschiedene Start-Methoden"
|
|
info " - Terminal-Browser als Fallback"
|
|
info " - Autologin konfiguriert"
|
|
info ""
|
|
warning "⚠️ NEUSTART ERFORDERLICH!"
|
|
info ""
|
|
info "Nach dem Neustart:"
|
|
info "1. System startet automatisch in Kiosk-Modus"
|
|
info "2. Falls X11 fehlschlägt, startet Terminal-Browser"
|
|
info ""
|
|
info "Manueller Test ohne Neustart:"
|
|
info " su - kiosk"
|
|
info " ./kiosk-direct.sh"
|
|
info ""
|
|
read -p "Jetzt neustarten? (j/n) " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Jj]$ ]]; then
|
|
reboot
|
|
fi |