#!/bin/bash # Abbrechen bei Fehlern set -e echo "====================================================" echo "🚀 Starte J.A.R.V.I.S. Desktop OS - X11 Openbox Setup" echo "====================================================" # Benutzererkennung REAL_USER="${SUDO_USER:-$(logname 2>/dev/null || whoami)}" REAL_HOME=$(getent passwd "$REAL_USER" | cut -d: -f6) if [ -z "$REAL_USER" ] || [ "$REAL_USER" = "root" ]; then REAL_USER=$(id -nu 1000 2>/dev/null || echo "meik") REAL_HOME=$(getent passwd "$REAL_USER" | cut -d: -f6) fi JARVIS_DIR="$REAL_HOME/jarvis-ai" # 1. System aktualisieren & X11 / Openbox Pakete installieren echo "📦 Installiere X11-Server, Openbox und Automatisierungstools..." sudo apt update sudo apt install -y \ xserver-xorg \ xinit \ x11-xserver-utils \ openbox \ tint2 \ rofi \ xdotool \ wmctrl \ firefox-esr \ curl \ wget \ git \ sudo \ python3 \ python3-pip \ python3-venv \ tilix \ geany \ fonts-noto-color-emoji \ pipewire \ pipewire-audio-client-libraries \ pipewire-pulse \ wireplumber \ alsa-utils \ libasound2-dev \ libportaudio2 \ unzip # 1.1 Gruppenrechte für Audio und Grafik setzen echo "👥 Setze Gruppenrechte für '$REAL_USER'..." sudo usermod -aG video,render,input,audio "$REAL_USER" # 2. Openbox Konfigurationsverzeichnis erstellen echo "⚙️ Konfiguriere Openbox für '$REAL_USER'..." mkdir -p "$REAL_HOME/.config/openbox" # 3. Autostart-Datei für Openbox erstellen cat << EOF > "$REAL_HOME/.config/openbox/autostart" # Tint2 Taskleiste im Hintergrund starten tint2 & # Deutsches Tastaturlayout setxkbmap de & # PipeWire Audio-Server starten gentle_pipewire_start() { systemctl --user start pipewire pipewire-pulse wireplumber } gentle_pipewire_start & # Falls ein Hintergrundbild gewünscht ist (optional, benötigt 'feh'): # feh --bg-scale /pfad/zum/bild.jpg & # J.A.R.V.I.S.-AI starten tilix -e "$JARVIS_DIR/start.sh" & EOF chmod +x "$REAL_HOME/.config/openbox/autostart" # 4. .xinitrc erstellen (ermöglicht den Start via 'startx' aus der Konsole) cat << EOF > "$REAL_HOME/.xinitrc" #!/bin/sh # X11 Umgebungsvariablen setzen falls nötig export QT_QPA_PLATFORM=xcb export GDK_BACKEND=x11 # Openbox Session starten exec openbox-session EOF chmod +x "$REAL_HOME/.xinitrc" # Eigentumsrechte korrigieren chown -R "$REAL_USER:$REAL_USER" "$REAL_HOME/.config" "$REAL_HOME/.xinitrc" # J.A.R.V.I.S. .env Template (Leerzeichen bei [ ] und EOF korrigiert) if [ ! -f "$JARVIS_DIR/config/.env" ]; then echo "📝 Erstelle .env Konfigurationsdatei..." # Stelle sicher, dass der config-Ordner existiert mkdir -p "$JARVIS_DIR/config" cat << EOF > "$JARVIS_DIR/config/.env" WEB_USER_NAME=$REAL_USER AI_PROVIDER=nvdia OPENAI_API_KEY=dein-openai-key OPENAI_MODEL= GOOGLE_API_KEY=dein-google-key NVIDIA_API_KEY=dein-nvidia-key NVIDIA_MODEL=moonshotai/kimi-k2.6 GOOGLE_MODEL=gemini-2.5-flash OLLAMA_BASE_URL=http://127.0.0.1:11434/v1 OLLAMA_MODEL=llama3 GROQ_API_KEY=dein-groq-key GROQ_MODEL=groq/compound EOF fi # J.A.R.V.I.S. Optimierter System-Prompt inkl. wdotool-Handbuch cat << 'EOF' > "$JARVIS_DIR/config/system_prompt.txt" Du bist J.A.R.V.I.S., ein KI-Systemassistent, der direkt auf einem Debian X11-Desktop (Openbox) läuft. Du hast vollen lokalen Zugriff auf das System. UMGEBUNG & GEDÄCHTNIS: Arbeitsverzeichnis: {workspace_dir} Notizen: {notes_file} Todos: {todo_file} DESKTOP STEUERUNG & FENSTER-MANAGEMENT: Du steuerst die grafische Oberfläche (X11/Openbox) über native Befehlszeilen-Tools wie wmctrl und xdotool. Programme & Fenster verwalten Du steuerst Fenster direkt über Konsolenbefehle. Folgende Aktionen sind erlaubt: start (Startet ein Programm in den Hintergrund): firefox & activate (Holt ein Fenster in den Vordergrund): wmctrl -a "Firefox" (Sucht nach dem Namen im Titel) close (Schließt das Fenster sanft): wmctrl -c "Firefox" maximize (Maximiert das Fenster): wmctrl -r "Firefox" -b add,maximized_vert,maximized_horz positionieren/snappen: Nutze wmctrl mit dem Schalter -e (Format: gravity,X,Y,Width,Height). Beispiele: wmctrl -r "Firefox" -b add,maximized_vert,maximized_horz (Maximiert Firefox) wmctrl -a "Terminal" (Holt das Terminal in den Vordergrund) Regel für Multitasking-Fenster: Wenn der User mehrere Instanzen derselben App starten möchte, starte sie im Hintergrund, warte kurz, hole das aktive Fenster mit xdotool und passe es an. Beispiel-Verkettung für das System: firefox & sleep 2 && wmctrl -r "Mozilla Firefox" -e 0,0,0,960,1080 && firefox & sleep 2 && xdotool getactivewindow windowmove 960 0 windowsize 960 1080 Tastatur & Maus (Tool: xdotool) Tastatur: xdotool key ctrl+l, xdotool key alt+Tab, xdotool type "Hallo" Maus: xdotool mousemove 500 400 (absolut), xdotool click 1 (1=links, 3=rechts) WICHTIG: Wenn du Tasten an ein Programm senden willst, sorge IMMER dafür, dass es vorher den Fokus hat (z.B. wmctrl -a "Firefox" && xdotool key F5). System- & Display-Infos Bildschirmauflösung ermitteln: xrandr | grep '*' | awk '{print $1}' {installed_apps} WICHTIGE REGELN FÜR DIE AUSFÜHRUNG VON BEFEHLEN: Das Backend-System wertet deine Befehle NUR aus, wenn sie exakt in XML-Tags eingeschlossen sind. Du darfst Systembefehle unter keinen Umständen als einfachen Text oder in Markdown-Codeblöcken (```) ausgeben! RICHTIG: firefox & FALSCH: ```bash firefox & ``` SPEZIALREGEL FÜR WEBSEITEN & BROWSER: Navigiere NIEMALS mittels xdotool (ctrl+l) zu einer Webseite! Das ist zu fehleranfällig. Übergib die URL stattdessen IMMER direkt als Argument an den firefox-Befehl. Das öffnet die Seite direkt (oder in einem neuen Tab, falls Firefox bereits läuft). RICHTIG: firefox "google.de" & FALSCH: firefox & sleep 2 && xdotool key ctrl+l ... RICHTIGE VERKETTUNG (für andere Anwendungen): Wenn du mehrere Befehle verknüpfen musst (z.B. App starten und danach pflegen), nutze && innerhalb eines EINZIGEN -Blocks. Beispiel: tilix & sleep 1 && wmctrl -a "Tilix" WICHTIGE REGELN FÜR TEXTE IN EDITOREN: Wenn du Texte für den Nutzer in einem Editor wie Geany erstellen sollst, nutze immer temporäre Dateien. RICHTIG: cat << 'EOF' > /tmp/notiz.txt Dein generierter Text... 'EOF' geany /tmp/notiz.txt & Antworte immer mit einem kurzen, lockeren Bestätigungssatz, was du tust, gefolgt von dem -Block. Du duzt {user_name} konsequent, dein Tonfall ist locker und technisch versiert. EOF # 5. Virtuelle Python-Umgebung einrichten (falls noch nicht geschehen) echo "🐍 Richte virtuelles Python-Environment ein..." mkdir -p "$JARVIS_DIR" python3 -m venv "$JARVIS_DIR/venv" "$JARVIS_DIR/venv/bin/pip" install --upgrade pip "$JARVIS_DIR/venv/bin/pip" install -r requirements.txt #################################### # Voice setup #################################### # Modell herunterladen wget https://alphacephei.com/vosk/models/vosk-model-small-de-0.15.zip # Entpacken unzip vosk-model-small-de-0.15.zip # Ordner umbenennen, damit das Skript ihn leicht findet mv vosk-model-small-de-0.15 model rm vosk-model-small-de-0.15.zip # Piper installieren wget https://github.com/rhasspy/piper/releases/download/v1.2.0/piper_amd64.tar.gz tar -xf piper_amd64.tar.gz rm piper_amd64.tar.gz # Das eigentliche Sprachmodell (.onnx) wget https://huggingface.co/rhasspy/piper-voices/resolve/main/de/de_DE/thorsten/high/de_DE-thorsten-high.onnx # Die dazugehörige Konfigurationsdatei (.json) wget https://huggingface.co/rhasspy/piper-voices/resolve/main/de/de_DE/thorsten/high/de_DE-thorsten-high.onnx.json echo "====================================================" echo "✅ X11 Openbox-Umgebung erfolgreich eingerichtet!" echo "👉 Starte die grafische Oberfläche einfach mit dem Befehl: startx" echo "===================================================="