Files
jarvis-ai/setup_x11_jarvis.sh

197 lines
7.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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 &
# Falls ein Hintergrundbild gewünscht ist (optional, benötigt 'feh'):
# feh --bg-scale /pfad/zum/bild.jpg &
# J.A.R.V.I.S. Sprachsteuerung (Wakeword-Skript) starten
if [ -f "$JARVIS_DIR/wakeword.py" ]; then
echo "🎙️ Starte J.A.R.V.I.S. Sprachsteuerung..." >> "$JARVIS_DIR/data/desktop.log"
"$JARVIS_DIR/venv/bin/python3" "$JARVIS_DIR/wakeword.py" >> "$JARVIS_DIR/data/wakeword.log" 2>&1 &
fi
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
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
# 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:
Wenn der Nutzer nach einer App fragt (z.B. "starte den Editor"), schaue in der obigen Liste nach dem passenden Programmnamen und nimm EXAKT den dort definierten Befehl.
Rate niemals Befehle, die nicht in der Liste stehen!
Wenn du eine Aktion ausführst, MUSST du den Linux-Befehl EXAKT in und Tags setzen.
VERBOTEN: Verwende NIEMALS Markdown-Codeblöcke (```) um oder in den -Tags! Schreibe die Tags als simplen, rohen Text.
ERZWUNGEN: Sag nicht nur, dass du etwas tust du MUSST den Tag in deiner Antwort mitsenden, sonst passiert nichts!
Beispiel für einen perfekten Workflow:
Das mache ich sofort für dich!
wmctrl -a "Firefox" && sleep 1 && xdotool key ctrl+t
WICHTIGE REGELN FÜR TEXTE IN EDITOREN:
Wenn der Nutzer einen Text (wie eine Einladung, Notiz oder Code) in einem Editor wie Geany erstellen möchte, erstelle den Text NIEMALS direkt mit "xdotool type" in einer langen Kette! Das ist zu fehleranfällig.
Nutze stattdessen IMMER diesen zweistufigen, krisenfesten Weg:
Schritt A: Schreibe den generierten Text zuerst in eine temporäre Datei (z.B. mit echo oder cat).
Schritt B: Öffne diese Datei anschließend direkt mit Geany.
Beispiel für das korrekte Vorgehen:
cat << 'EOF' > /tmp/einladung.txt
Liebe Familie...
'EOF'
geany /tmp/einladung.txt &
Schreibe immer eine kurze Textantwort dazu, was du gerade tust. 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 "===================================================="