From 6f16cbd6126e2834777728066276873c09af5962 Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Wed, 4 Jun 2025 13:02:17 +0200 Subject: [PATCH] =?UTF-8?q?Erweitere=20das=20Setup-Skript=20um=20die=20Kon?= =?UTF-8?q?figuration=20der=20X11-Autorisierung=20f=C3=BCr=20den=20Kiosk-U?= =?UTF-8?q?ser.=20F=C3=BCge=20ein=20X11-Startup-Hilfsskript=20und=20ein=20?= =?UTF-8?q?Reparaturskript=20zur=20Behebung=20von=20X11-Problemen=20hinzu.?= =?UTF-8?q?=20Stelle=20sicher,=20dass=20die=20DISPLAY-Variable=20und=20die?= =?UTF-8?q?=20.Xauthority-Datei=20korrekt=20eingerichtet=20sind.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- setup.sh | 307 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 307 insertions(+) diff --git a/setup.sh b/setup.sh index 2ff6f43..a8b8402 100644 --- a/setup.sh +++ b/setup.sh @@ -1420,6 +1420,79 @@ EOF mkdir -p "$kiosk_home/.chromium-kiosk" chown -R "$KIOSK_USER:$KIOSK_USER" "$kiosk_home/.chromium-kiosk" + # X11-Autorisierung für kiosk-User konfigurieren + progress "Konfiguriere X11-Autorisierung für kiosk-User..." + + # Erstelle .Xauthority Datei + touch "$kiosk_home/.Xauthority" + chown "$KIOSK_USER:$KIOSK_USER" "$kiosk_home/.Xauthority" + chmod 600 "$kiosk_home/.Xauthority" + + # Füge DISPLAY-Variable zum .bashrc hinzu + if ! grep -q "export DISPLAY=" "$kiosk_home/.bashrc" 2>/dev/null; then + cat >> "$kiosk_home/.bashrc" << 'EOF' + +# X11 Display Konfiguration +export DISPLAY=:0.0 +export XAUTHORITY=/home/kiosk/.Xauthority + +# X11 Session Management +if [ -z "$DISPLAY" ] && [ "$XDG_VTNR" = "1" ]; then + export DISPLAY=:0.0 +fi + +EOF + chown "$KIOSK_USER:$KIOSK_USER" "$kiosk_home/.bashrc" + fi + + # Erstelle X11-Startup-Hilfsskript + cat > "$kiosk_home/start-x11.sh" << 'EOF' +#!/bin/bash + +# X11-Startup-Hilfsskript für kiosk-User +# Behebt .Xauthority und DISPLAY-Probleme + +export HOME=/home/kiosk +export USER=kiosk +export DISPLAY=:0.0 +export XAUTHORITY=/home/kiosk/.Xauthority + +# Erstelle .Xauthority falls nicht vorhanden +if [ ! -f "$XAUTHORITY" ]; then + touch "$XAUTHORITY" + chmod 600 "$XAUTHORITY" +fi + +# Prüfe ob X11-Server läuft +if ! pgrep -x "X" > /dev/null && ! pgrep -x "Xorg" > /dev/null; then + echo "Starte X11-Server..." + startx /home/kiosk/.xinitrc -- :0 vt1 & + sleep 3 +fi + +# Warte bis X11-Server verfügbar ist +timeout=30 +elapsed=0 +while [ $elapsed -lt $timeout ]; do + if xset q >/dev/null 2>&1; then + echo "X11-Server ist bereit" + break + fi + sleep 1 + elapsed=$((elapsed + 1)) +done + +if [ $elapsed -ge $timeout ]; then + echo "FEHLER: X11-Server nicht verfügbar nach ${timeout}s" + exit 1 +fi + +echo "X11-Session erfolgreich gestartet" +EOF + + chmod +x "$kiosk_home/start-x11.sh" + chown "$KIOSK_USER:$KIOSK_USER" "$kiosk_home/start-x11.sh" + log "✅ Automatischer Kiosk-Start konfiguriert" info "Der Kiosk-Modus startet automatisch beim Login des $KIOSK_USER" } @@ -1820,6 +1893,28 @@ EOF mkdir -p "$kiosk_home/.npm-global" 2>/dev/null || true chown -R "$KIOSK_USER:$KIOSK_USER" "$kiosk_home/.npm-global" 2>/dev/null || true + # X11-Autorisierung sicherstellen + progress "Sicherstelle X11-Autorisierung für kiosk-User..." + if [ ! -f "$kiosk_home/.Xauthority" ]; then + touch "$kiosk_home/.Xauthority" + chown "$KIOSK_USER:$KIOSK_USER" "$kiosk_home/.Xauthority" + chmod 600 "$kiosk_home/.Xauthority" + success "✅ .Xauthority Datei erstellt" + fi + + # DISPLAY-Variable in bashrc sicherstellen + if ! grep -q "export DISPLAY=" "$kiosk_home/.bashrc" 2>/dev/null; then + cat >> "$kiosk_home/.bashrc" << 'EOF' + +# X11 Display Konfiguration +export DISPLAY=:0.0 +export XAUTHORITY=/home/kiosk/.Xauthority + +EOF + chown "$KIOSK_USER:$KIOSK_USER" "$kiosk_home/.bashrc" + success "✅ X11-Variablen zu .bashrc hinzugefügt" + fi + success "✅ Projekt-Berechtigungen für kiosk-User konfiguriert" info " 📁 Kiosk-Arbeitsverzeichnis: $kiosk_project_dir" info " 👤 Besitzer: $KIOSK_USER" @@ -1967,6 +2062,30 @@ if [ -d "$SCRIPT_DIR/static" ]; then chmod -R 775 "$SCRIPT_DIR/static" 2>/dev/null || true fi +# X11-Autorisierung für kiosk-User sicherstellen +log "Sicherstelle X11-Autorisierung..." +kiosk_home="/home/$KIOSK_USER" + +if [ ! -f "$kiosk_home/.Xauthority" ]; then + touch "$kiosk_home/.Xauthority" + chown "$KIOSK_USER:$KIOSK_USER" "$kiosk_home/.Xauthority" + chmod 600 "$kiosk_home/.Xauthority" + log "✅ .Xauthority Datei erstellt" +fi + +# DISPLAY-Variable in bashrc sicherstellen +if [ -f "$kiosk_home/.bashrc" ] && ! grep -q "export DISPLAY=" "$kiosk_home/.bashrc" 2>/dev/null; then + cat >> "$kiosk_home/.bashrc" << 'EOF' + +# X11 Display Konfiguration +export DISPLAY=:0.0 +export XAUTHORITY=/home/kiosk/.Xauthority + +EOF + chown "$KIOSK_USER:$KIOSK_USER" "$kiosk_home/.bashrc" + log "✅ X11-Variablen zu .bashrc hinzugefügt" +fi + log "✅ Berechtigen-Reparatur abgeschlossen" info "" info "📋 Zusammenfassung:" @@ -1986,6 +2105,194 @@ EOF success "✅ Berechtigen-Reparatur-Skript erstellt: $fix_script" info " 💡 Verwendung nach Setup: sudo ./fix-permissions.sh" + + # Erstelle zusätzliches X11-Fix-Skript + local x11_fix_script="$CURRENT_DIR/fix-x11.sh" + + progress "Erstelle X11-Reparatur-Skript..." + + cat > "$x11_fix_script" << 'EOF' +#!/bin/bash + +# =================================================================== +# MYP X11-Reparatur-Skript +# Behebt X11/.Xauthority-Probleme für kiosk-User +# Kann als root oder kiosk-User ausgeführt werden +# =================================================================== + +set -euo pipefail + +KIOSK_USER="kiosk" + +# 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}" +} + +log "=== MYP X11-REPARATUR ===" + +# Prüfe ob kiosk User existiert +if ! id "$KIOSK_USER" &>/dev/null; then + error "Kiosk-User '$KIOSK_USER' existiert nicht!" +fi + +kiosk_home="/home/$KIOSK_USER" + +# Stoppe laufende X11-Prozesse +log "Stoppe laufende X11-Prozesse..." +pkill -f "startx" 2>/dev/null || true +pkill -f "X " 2>/dev/null || true +pkill -f "Xorg" 2>/dev/null || true +pkill -f "chromium" 2>/dev/null || true +sleep 2 + +# Bereinige alte X11-Session-Dateien +log "Bereinige alte X11-Session-Dateien..." +rm -f /tmp/.X0-lock 2>/dev/null || true +rm -f /tmp/.X11-unix/X0 2>/dev/null || true + +# X11-Autorisierung neu erstellen +log "Erstelle X11-Autorisierung neu..." + +# Entferne alte .Xauthority +if [ -f "$kiosk_home/.Xauthority" ]; then + rm -f "$kiosk_home/.Xauthority" +fi + +# Erstelle neue .Xauthority +touch "$kiosk_home/.Xauthority" + +# Setze korrekte Berechtigungen (funktioniert sowohl als root als auch als kiosk) +if [ "$EUID" -eq 0 ]; then + chown "$KIOSK_USER:$KIOSK_USER" "$kiosk_home/.Xauthority" +fi +chmod 600 "$kiosk_home/.Xauthority" + +log "✅ .Xauthority neu erstellt" + +# Prüfe und korrigiere .bashrc +log "Prüfe X11-Umgebungsvariablen..." + +if [ -f "$kiosk_home/.bashrc" ]; then + if ! grep -q "export DISPLAY=" "$kiosk_home/.bashrc" 2>/dev/null; then + log "Füge X11-Variablen zu .bashrc hinzu..." + cat >> "$kiosk_home/.bashrc" << 'BASHEOF' + +# X11 Display Konfiguration +export DISPLAY=:0.0 +export XAUTHORITY=/home/kiosk/.Xauthority + +BASHEOF + + if [ "$EUID" -eq 0 ]; then + chown "$KIOSK_USER:$KIOSK_USER" "$kiosk_home/.bashrc" + fi + log "✅ X11-Variablen hinzugefügt" + else + log "✅ X11-Variablen bereits konfiguriert" + fi +else + warning "⚠️ .bashrc nicht gefunden" +fi + +# Erstelle X11-Test-Skript +log "Erstelle X11-Test-Skript..." +cat > "$kiosk_home/test-x11.sh" << 'TESTEOF' +#!/bin/bash + +# X11-Test für kiosk-User + +export DISPLAY=:0.0 +export XAUTHORITY=/home/kiosk/.Xauthority + +echo "=== X11-Test ===" +echo "DISPLAY: $DISPLAY" +echo "XAUTHORITY: $XAUTHORITY" +echo "" + +if [ -f "$XAUTHORITY" ]; then + echo "✅ .Xauthority existiert" + ls -la "$XAUTHORITY" +else + echo "❌ .Xauthority fehlt" + exit 1 +fi + +echo "" +echo "Teste X11-Verbindung..." + +if command -v xset >/dev/null 2>&1; then + if xset q >/dev/null 2>&1; then + echo "✅ X11-Server erreichbar" + xset q | head -3 + else + echo "❌ X11-Server nicht erreichbar" + echo "Versuche X11-Server zu starten..." + startx /home/kiosk/.xinitrc -- :0 vt1 & + sleep 5 + + if xset q >/dev/null 2>&1; then + echo "✅ X11-Server nach Start erreichbar" + else + echo "❌ X11-Server konnte nicht gestartet werden" + exit 1 + fi + fi +else + echo "⚠️ xset nicht verfügbar - kann X11 nicht testen" +fi + +echo "" +echo "✅ X11-Test abgeschlossen" +TESTEOF + +chmod +x "$kiosk_home/test-x11.sh" +if [ "$EUID" -eq 0 ]; then + chown "$KIOSK_USER:$KIOSK_USER" "$kiosk_home/test-x11.sh" +fi + +log "✅ X11-Reparatur abgeschlossen" +info "" +info "📋 Was wurde behoben:" +info " - Alte .Xauthority entfernt und neu erstellt" +info " - X11-Umgebungsvariablen konfiguriert" +info " - X11-Test-Skript erstellt" +info "" +info "🔧 Nächste Schritte:" +info " - Als kiosk-User einloggen: su - kiosk" +info " - X11 testen: ./test-x11.sh" +info " - Kiosk-Modus starten: ./start-x11.sh" +info "" +info "💡 Bei weiteren Problemen:" +info " - Neustart: sudo reboot" +info " - Manual X11 start: startx" +info "" + +EOF + + chmod +x "$x11_fix_script" 2>/dev/null || warning "⚠️ Konnte fix-x11.sh nicht ausführbar machen" + + success "✅ X11-Reparatur-Skript erstellt: $x11_fix_script" + info " 💡 Verwendung bei X11-Problemen: sudo ./fix-x11.sh" } install_npm_dependencies() {