#!/bin/bash # RustDesk-Installer: installiert RustDesk und trägt den eigenen Server ein. set -euo pipefail HOST='rustdesk.it-buechner.de' KEY='tw3hDksLldzQQWmuuiEwwTsuiLGCm1zB2cryzuwubxo=' API='https://rustdesk.it-buechner.de' VER='1.5.1' GH="https://github.com/rustdesk/rustdesk/releases/download/$VER" [ "$(id -u)" -eq 0 ] || { echo "Bitte mit sudo ausführen: curl -fsSL https://rustdesk.it-buechner.de/linux.sh | sudo bash" >&2; exit 1; } command -v apt-get >/dev/null || { echo "Dieses Skript unterstützt nur Debian/Ubuntu/Mint (apt)." >&2; exit 1; } case "$(uname -m)" in x86_64) ARCH=x86_64 ;; aarch64|arm64) ARCH=aarch64 ;; armv7l) ARCH=armv7-sciter ;; *) echo "Nicht unterstützte Architektur: $(uname -m)" >&2; exit 1 ;; esac INSTALLED=$(dpkg-query -W -f='${Version}' rustdesk 2>/dev/null || true) if [ "$INSTALLED" != "$VER" ]; then echo "==> Lade RustDesk $VER ($ARCH) ..." TMP=$(mktemp -d); trap 'rm -rf "$TMP"' EXIT curl -fL --progress-bar -o "$TMP/rustdesk.deb" "$GH/rustdesk-$VER-$ARCH.deb" chmod 644 "$TMP/rustdesk.deb"; chmod 755 "$TMP" echo "==> Installiere ..." apt-get update -qq || true DEBIAN_FRONTEND=noninteractive apt-get install -y "$TMP/rustdesk.deb" else echo "==> RustDesk $VER ist bereits installiert." fi # Laufende Instanzen beenden, sonst überschreiben sie die Konfiguration wieder systemctl stop rustdesk 2>/dev/null || true pkill -x rustdesk 2>/dev/null || true sleep 1 write_cfg() { # $1 = Konfigurationsordner, $2 = Besitzer local dir="$1" owner="$2" file="$1/RustDesk2.toml" mkdir -p "$dir"; touch "$file" # Servereinträge setzen, alle anderen Einträge und Abschnitte unverändert lassen awk -v h="$HOST" -v k="$KEY" -v a="$API" -v q="'" ' BEGIN { print "rendezvous_server = " q h ":21116" q; print "nat_type = 1"; print "serial = 0" opts = "custom-rendezvous-server = " q h q "\nrelay-server = " q h q "\napi-server = " q a q "\nkey = " q k q } /^\[/ { sec = $0 } sec == "" && /^(rendezvous_server|nat_type|serial) *=/ { next } sec == "[options]" && /^(custom-rendezvous-server|relay-server|api-server|key) *=/ { next } { print } $0 == "[options]" { print opts; seen = 1 } END { if (!seen) print "\n[options]\n" opts } ' "$file" > "$file.tmp" mv "$file.tmp" "$file" chown -R "$owner" "$dir" 2>/dev/null || true echo "==> Konfiguration geschrieben: $file" } write_cfg /root/.config/rustdesk root:root USR="${SUDO_USER:-$(logname 2>/dev/null || true)}" if [ -n "$USR" ] && [ "$USR" != root ]; then HOME_DIR=$(getent passwd "$USR" | cut -d: -f6) write_cfg "$HOME_DIR/.config/rustdesk" "$USR:$(id -gn "$USR")" fi systemctl enable --now rustdesk 2>/dev/null || systemctl start rustdesk 2>/dev/null || true echo echo "Fertig! Starten Sie RustDesk über das Anwendungsmenü." echo "Unten im Fenster sollte nach ein paar Sekunden \"Bereit\" stehen."