#!/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