218 lines
7.9 KiB
Bash
218 lines
7.9 KiB
Bash
#!/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 &
|
|
|
|
# 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 "===================================================="
|
|
echo "✅ Setup erfolgreich abgeschlossen!"
|
|
echo "👉 Bitte starte das System neu."
|
|
echo "====================================================" |