#!/bin/bash # Abbrechen bei Fehlern set -e echo "====================================================" echo "🚀 Starte Debian 13 Automated Wayland & Jarvis Setup" echo "====================================================" # NEU UND KUGELSICHER: REAL_USER="${SUDO_USER:-$(logname 2>/dev/null || whoami)}" REAL_HOME=$(getent passwd "$REAL_USER" | cut -d: -f6) # Sicherheitsprüfung: Falls immer noch leer oder root (falls als echter root eingeloggt) if [ -z "$REAL_USER" ] || [ "$REAL_USER" = "root" ]; then # Fallback auf den ersten echten User im System (ID 1000) REAL_USER=$(id -nu 1000 2>/dev/null || echo "meik") REAL_HOME=$(getent passwd "$REAL_USER" | cut -d: -f6) fi # 1. System aktualisieren & Basispakete installieren echo "📦 Aktualisiere Paketquellen und installiere Systemkomponenten..." sudo apt update sudo apt install -y labwc firefox-esr curl wget git sudo python3 python3-pip python3-venv original-awk tilix geany waybar fonts-noto-color-emoji wofi # 1.1 Gruppenrechte für Grafik und Eingabe vergeben echo "👥 Füge Benutzer '$REAL_USER' zu den Grafik- und Input-Gruppen hinzu..." sudo usermod -aG video,render,input "$REAL_USER" # 2. Architektur erkennen und wdotool installieren ARCH=$(uname -m) echo "🔍 Erkannte Systemarchitektur: $ARCH" if [ "$ARCH" = "x86_64" ]; then echo "📥 Installiere vorkompiliertes .deb für amd64..." wget https://github.com/cushycush/wdotool/releases/download/v0.5.3/wdotool_0.5.3-1_amd64.deb -O /tmp/wdotool.deb sudo apt install -y /tmp/wdotool.deb rm /tmp/wdotool.deb elif [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then echo "📥 Installiere via offizieller Shell-Installer (Kompilierung/Binary für arm64)..." curl --proto '=https' --tlsv1.2 -LsSf https://github.com/cushycush/wdotool/releases/download/v0.5.3/wdotool-installer.sh | sh else echo "❌ Unbekannte Architektur: $ARCH. Installation abgebrochen." exit 1 fi # 3. Den realen Installationspfad von wdotool ermitteln echo "🛠️ Konfiguriere globalen wdotool-Wrapper..." sleep 1 if [ -f "/usr/bin/wdotool" ]; then REAL_WDOTOOL="/usr/bin/wdotool" elif [ -f "$REAL_HOME/.cargo/bin/wdotool" ]; then REAL_WDOTOOL="$REAL_HOME/.cargo/bin/wdotool" elif [ -f "$REAL_HOME/.local/bin/wdotool" ]; then REAL_WDOTOOL="$REAL_HOME/.local/bin/wdotool" else REAL_WDOTOOL=$(which wdotool || true) fi if [ -z "$REAL_WDOTOOL" ]; then echo "❌ Fehler: wdotool wurde im System nicht gefunden!" exit 1 fi # Verschiebe die echte Binary an einen sicheren Ort, um Platz für den Wrapper zu machen sudo mv "$REAL_WDOTOOL" /usr/local/bin/wdotool.real # 4. Den intelligenten Umgebungsvariablen-Wrapper erstellen sudo cat << 'EOF' | sudo tee /usr/local/bin/wdotool > /dev/null #!/bin/bash # Automatische Wayland-Umgebung dynamisch für den ausführenden User laden export XDG_RUNTIME_DIR=/run/user/$(id -u) export WAYLAND_DISPLAY=wayland-0 # Transparent an die echte Binary übergeben exec /usr/local/bin/wdotool.real "$@" EOF # Wrapper ausführbar machen sudo chmod +x /usr/local/bin/wdotool # 5. Desktop-Konfiguration (.config) im Home-Verzeichnis einrichten (JETZT RICHTIG MIT $REAL_HOME) echo "📂 Konfiguriere labwc Autostart..." mkdir -p "$REAL_HOME/.config/labwc" # Autostart-Datei schreiben (mit funktionierenden Grafik-Parametern für Firefox) cat << 'EOF' > "$REAL_HOME/.config/labwc/autostart" # Terminal starten tilix --title="J.A.R.V.I.S." -e "~/jarvis-ai/start.sh" & # Firefox absturzsicher im Software-Render-Modus starten MOZ_WEBRENDER=software MOZ_ENABLE_WAYLAND=1 firefox-esr & EOF # Autostart ausführbar machen chmod +x "$REAL_HOME/.config/labwc/autostart" # Deutsches Tastaturlayout für Wayland festlegen echo "📂 Konfiguriere Tastaturlayout..." cat << 'EOF' > "$REAL_HOME/.config/labwc/environment" # Deutsches Tastaturlayout erzwingen XKB_DEFAULT_LAYOUT=de EOF # 7. Auto-Start und Software-Rendering in .profile eintragen (Idempotent prüfen) echo "⚙️ Richte ausfallsicheren Auto-Start für labwc in .profile ein..." if ! grep -q "labwc" "$REAL_HOME/.profile"; then cat << 'EOF' >> "$REAL_HOME/.profile" # labwc mit Software-Rendering starten, wenn die Anmeldung auf TTY1 erfolgt if [ "$(tty)" = "/dev/tty1" ]; then export WLR_RENDERER=pixman export WLR_NO_HARDWARE_CURSORS=1 export LIBGL_ALWAYS_SOFTWARE=1 dbus-run-session labwc > ~/labwc.log 2>&1 logout fi EOF fi # 7. Waybar Taskleiste mit Schnellstartern einrichten echo "📊 Konfiguriere Waybar Taskleiste mit Schnellstartern..." mkdir -p "$REAL_HOME/.config/waybar" # Waybar Config schreiben cat << 'EOF' > "$REAL_HOME/.config/waybar/config" { "layer": "top", "position": "bottom", "height": 34, "modules-left": ["custom/terminal", "custom/browser", "wlr/taskbar"], "modules-right": ["clock", "custom/logout"], "custom/terminal": { "format": "📁 Term", "on-click": "tilix", "tooltip": false }, "custom/browser": { "format": "🌐 Web", "on-click": "MOZ_WEBRENDER=software MOZ_ENABLE_WAYLAND=1 firefox-esr", "tooltip": false }, "wlr/taskbar": { "format": "{icon}", "icon-size": 16, "on-click": "activate", "on-click-right": "minimize" }, "clock": { "format": "🕒 {:%H:%M:%S}", "interval": 1 }, "custom/logout": { "format": "⚙️ System ", "on-click": "~/.config/labwc/powermenu.sh", "tooltip": false } } EOF # Waybar Style schreiben cat << 'EOF' > "$REAL_HOME/.config/waybar/style.css" * { font-family: sans-serif; font-size: 12px; } window#waybar { background-color: #1e293b; color: white; border-top: 1px solid #334155; } #custom-terminal, #custom-browser { padding: 0 8px; background: #334155; margin: 3px 2px; border-radius: 3px; } #custom-terminal:hover, #custom-browser:hover { background: #475569; } #taskbar button { padding: 0 10px; color: #94a3b8; } #taskbar button.active { background-color: #0f172a; color: #38bdf8; } #clock { padding: 0 15px; background-color: #0f172a; } #custom-logout { padding: 0 12px; background-color: #ef4444; color: white; } #custom-logout:hover { background-color: #dc2626; } EOF # Autostart erweitern, falls waybar noch nicht drin steht if ! grep -q "waybar" "$REAL_HOME/.config/labwc/autostart"; then sed -i '1i\waybar &' "$REAL_HOME/.config/labwc/autostart" fi # 7.5 Power-Menü Skript, Wofi-Style und Sudo-Rechte einrichten echo "⚡ Konfiguriere Power-Menü und Systemrechte..." # Power-Menü Skript schreiben cat << 'EOF' > "$REAL_HOME/.config/labwc/powermenu.sh" #!/bin/bash OPTIONS="🚪 Abmelden\n🔄 Neu starten\n🛑 Herunterfahren" CHOICE=$(echo -e "$OPTIONS" | wofi --dmenu --prompt "Systemaktion wählen:" --width 280 --height 180 --style "$HOME/.config/labwc/wofi-power.css") case "$CHOICE" in *"Abmelden") labwc --exit ;; *"Neu starten") sudo systemctl reboot ;; *"Herunterfahren") sudo systemctl poweroff ;; esac EOF chmod +x "$REAL_HOME/.config/labwc/powermenu.sh" # Feste Wofi-CSS für das Power-Menü schreiben cat << 'EOF' > "$REAL_HOME/.config/labwc/wofi-power.css" window { background-color: #1e293b; color: white; border: 2px solid #334155; border-radius: 8px; font-family: sans-serif; } #entry { padding: 8px; color: white; } #entry:selected { background-color: #334155; color: #38bdf8; } #input { background-color: #0f172a; color: white; border: 1px solid #334155; margin: 5px; } EOF # Sudoers-Erweiterung schreiben, damit jeder User in der sudo-Gruppe rebooten darf echo "%sudo ALL=(ALL) NOPASSWD: /usr/bin/systemctl poweroff, /usr/bin/systemctl reboot" | sudo tee /etc/sudoers.d/powermenu > /dev/null sudo chmod 0440 /etc/sudoers.d/powermenu # Rechte für alle erzeugten Ordner und Dateien dem User zuweisen chown -R "$REAL_USER:$REAL_USER" "$REAL_HOME/.config" chown "$REAL_USER:$REAL_USER" "$REAL_HOME/.profile" echo "Starte Setup für die KI" bash setup.sh echo "====================================================" echo "✅ Setup erfolgreich abgeschlossen!" echo "👉 Bitte starte das System neu." echo "===================================================="