237 lines
5.7 KiB
Bash
237 lines
5.7 KiB
Bash
#!/bin/bash
|
|
|
|
# ===================================================================
|
|
# MYP X11 Framebuffer-Fix für Raspberry Pi
|
|
# Behebt den "Cannot run in framebuffer mode" Fehler
|
|
# ===================================================================
|
|
|
|
set -euo pipefail
|
|
|
|
# Farben für Ausgabe
|
|
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}"
|
|
}
|
|
|
|
# Prüfe root-Berechtigung
|
|
if [ "$EUID" -ne 0 ]; then
|
|
error "Dieses Skript muss als Root ausgeführt werden: sudo $0"
|
|
fi
|
|
|
|
log "=== X11 FRAMEBUFFER-FIX FÜR RASPBERRY PI ==="
|
|
|
|
# Stoppe laufende X-Server
|
|
log "Stoppe laufende X-Server..."
|
|
pkill -f "X :0" 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 2
|
|
|
|
# Erstelle X11-Konfigurationsverzeichnis
|
|
log "Erstelle X11-Konfiguration..."
|
|
mkdir -p /etc/X11/xorg.conf.d
|
|
|
|
# Erstelle Framebuffer-Fix-Konfiguration
|
|
cat > /etc/X11/xorg.conf.d/99-fbdev.conf << 'EOF'
|
|
# X11 Konfiguration für Raspberry Pi - behebt Framebuffer-Fehler
|
|
Section "Device"
|
|
Identifier "Raspberry Pi FBDEV"
|
|
Driver "fbdev"
|
|
Option "fbdev" "/dev/fb0"
|
|
Option "SwapbuffersWait" "true"
|
|
EndSection
|
|
|
|
Section "Screen"
|
|
Identifier "Primary Screen"
|
|
Device "Raspberry Pi FBDEV"
|
|
DefaultDepth 24
|
|
SubSection "Display"
|
|
Depth 24
|
|
Modes "1920x1080" "1680x1050" "1600x900" "1280x1024" "1280x800" "1024x768"
|
|
EndSubSection
|
|
EndSection
|
|
|
|
Section "ServerLayout"
|
|
Identifier "Default Layout"
|
|
Screen "Primary Screen"
|
|
EndSection
|
|
|
|
Section "ServerFlags"
|
|
Option "BlankTime" "0"
|
|
Option "StandbyTime" "0"
|
|
Option "SuspendTime" "0"
|
|
Option "OffTime" "0"
|
|
Option "DPMS" "false"
|
|
EndSection
|
|
EOF
|
|
|
|
# Alternative Modesetting-Konfiguration
|
|
cat > /etc/X11/xorg.conf.d/20-modesetting.conf << 'EOF'
|
|
# Alternative Modesetting-Konfiguration
|
|
Section "Device"
|
|
Identifier "Raspberry Pi Modesetting"
|
|
Driver "modesetting"
|
|
Option "AccelMethod" "none"
|
|
EndSection
|
|
EOF
|
|
|
|
# Installiere fehlende Video-Treiber
|
|
log "Installiere Video-Treiber..."
|
|
apt-get update
|
|
apt-get install -y xserver-xorg-video-fbturbo 2>/dev/null || {
|
|
# Fallback zu Standard-Treibern
|
|
apt-get install -y xserver-xorg-video-all 2>/dev/null || true
|
|
}
|
|
|
|
# Erstelle X11-Start-Wrapper
|
|
log "Erstelle X11-Start-Wrapper..."
|
|
cat > /usr/local/bin/start-x11-kiosk << 'EOF'
|
|
#!/bin/bash
|
|
|
|
# X11 Kiosk-Start-Wrapper für Raspberry Pi
|
|
export DISPLAY=:0
|
|
export XAUTHORITY=/home/kiosk/.Xauthority
|
|
|
|
# Erstelle .Xauthority
|
|
if [ ! -f "$XAUTHORITY" ]; then
|
|
touch "$XAUTHORITY"
|
|
chown kiosk:kiosk "$XAUTHORITY"
|
|
chmod 600 "$XAUTHORITY"
|
|
fi
|
|
|
|
# Stoppe alte X-Server
|
|
pkill -f "X :0" 2>/dev/null || true
|
|
pkill -f "Xorg" 2>/dev/null || true
|
|
sleep 2
|
|
|
|
echo "Starte X-Server..."
|
|
|
|
# Versuche verschiedene Start-Methoden
|
|
if ! xinit /home/kiosk/.xinitrc -- :0 vt7 -novtswitch -nolisten tcp -dpi 96 2>/tmp/x11-error.log; then
|
|
echo "Methode 1 fehlgeschlagen, versuche Alternative..."
|
|
|
|
if ! xinit /home/kiosk/.xinitrc -- :0 vt7 -config /etc/X11/xorg.conf.d/99-fbdev.conf -ignoreABI 2>>/tmp/x11-error.log; then
|
|
echo "Methode 2 fehlgeschlagen, versuche Fallback..."
|
|
xinit /home/kiosk/.xinitrc -- :0 2>>/tmp/x11-error.log
|
|
fi
|
|
fi
|
|
|
|
if [ -f /tmp/x11-error.log ]; then
|
|
echo "X11 Fehler-Log:"
|
|
tail -20 /tmp/x11-error.log
|
|
fi
|
|
EOF
|
|
|
|
chmod +x /usr/local/bin/start-x11-kiosk
|
|
|
|
# Erstelle einfaches .xinitrc für kiosk
|
|
log "Erstelle korrigiertes .xinitrc..."
|
|
cat > /home/kiosk/.xinitrc << 'EOF'
|
|
#!/bin/bash
|
|
|
|
# Fehlerlog
|
|
exec 2>/tmp/xinitrc-error.log
|
|
|
|
# X11 Einstellungen
|
|
xset s off
|
|
xset s noblank
|
|
xset -dpms
|
|
|
|
# Window Manager
|
|
openbox-session &
|
|
sleep 2
|
|
|
|
# Browser starten
|
|
BROWSER=""
|
|
if command -v chromium >/dev/null 2>&1; then
|
|
BROWSER="chromium"
|
|
elif command -v chromium-browser >/dev/null 2>&1; then
|
|
BROWSER="chromium-browser"
|
|
else
|
|
BROWSER="firefox-esr"
|
|
fi
|
|
|
|
# Starte Browser mit GPU-Deaktivierung
|
|
exec $BROWSER \
|
|
--kiosk \
|
|
--no-sandbox \
|
|
--disable-gpu \
|
|
--disable-software-rasterizer \
|
|
--disable-dev-shm-usage \
|
|
--no-first-run \
|
|
--start-fullscreen \
|
|
http://localhost:5000
|
|
EOF
|
|
|
|
chmod +x /home/kiosk/.xinitrc
|
|
chown kiosk:kiosk /home/kiosk/.xinitrc
|
|
|
|
# Konfiguriere Raspberry Pi Boot-Einstellungen
|
|
if [ -f /boot/config.txt ]; then
|
|
log "Konfiguriere Raspberry Pi GPU-Einstellungen..."
|
|
|
|
# Backup
|
|
cp /boot/config.txt /boot/config.txt.backup
|
|
|
|
# GPU-Einstellungen
|
|
if ! grep -q "^gpu_mem=" /boot/config.txt; then
|
|
echo "gpu_mem=128" >> /boot/config.txt
|
|
fi
|
|
|
|
if ! grep -q "^hdmi_force_hotplug=" /boot/config.txt; then
|
|
cat >> /boot/config.txt << 'EOF'
|
|
|
|
# X11 Kiosk-Modus Optimierungen
|
|
hdmi_force_hotplug=1
|
|
hdmi_drive=2
|
|
config_hdmi_boost=4
|
|
disable_overscan=1
|
|
framebuffer_width=1920
|
|
framebuffer_height=1080
|
|
framebuffer_depth=32
|
|
framebuffer_ignore_alpha=1
|
|
EOF
|
|
fi
|
|
fi
|
|
|
|
log "✅ X11 Framebuffer-Fix installiert!"
|
|
info ""
|
|
info "📋 Was wurde konfiguriert:"
|
|
info " - X11 fbdev-Konfiguration erstellt"
|
|
info " - Video-Treiber installiert"
|
|
info " - X11-Start-Wrapper erstellt: /usr/local/bin/start-x11-kiosk"
|
|
info " - GPU-Einstellungen optimiert"
|
|
info ""
|
|
info "🔧 Nächste Schritte:"
|
|
info " 1. System neustarten: sudo reboot"
|
|
info " 2. Als kiosk-User einloggen"
|
|
info " 3. X11 wird automatisch mit den Fixes starten"
|
|
info ""
|
|
info "💡 Manueller Test:"
|
|
info " su - kiosk"
|
|
info " /usr/local/bin/start-x11-kiosk"
|
|
info ""
|
|
|
|
# Prüfe ob Neustart erforderlich
|
|
if [ -f /boot/config.txt.backup ]; then
|
|
warning "⚠️ Boot-Konfiguration geändert - Neustart erforderlich!"
|
|
fi |