🎉 Optimierung der RDP-Server-Installation und Firewall-Konfiguration im Backend 🛠️. Vereinfachte Installation von xrdp und XFCE, verbesserte Fehlerbehandlung und Validierung der Firewall-Einstellungen. Aktualisierte Logik zur Überprüfung des Dienststatus und zur Konfiguration von Netzwerkquellen.

This commit is contained in:
2025-06-01 15:31:04 +02:00
parent 7b37d54e59
commit fc6ba6e87e
9 changed files with 1399 additions and 356 deletions

View File

@@ -1083,50 +1083,41 @@ install_remote_access() {
echo "user:raspberry" | chpasswd || warning "Konnte Passwort für SSH-Benutzer nicht aktualisieren"
fi
# RDP-Server (xrdp) installieren
progress "Installiere RDP-Server (xrdp)..."
# RDP-Server (xrdp) installieren - vereinfachter Ansatz
progress "Installiere RDP-Server (xrdp) - vereinfachte Installation..."
# Minimale Desktop-Umgebung für RDP installieren
progress "Installiere minimale Desktop-Umgebung für RDP..."
# Alle bestehenden xrdp-Installationen entfernen
progress "Entferne vorherige xrdp-Installationen..."
systemctl stop xrdp xrdp-sesman 2>/dev/null || true
systemctl disable xrdp xrdp-sesman 2>/dev/null || true
apt-get remove --purge -y xrdp 2>/dev/null || true
rm -rf /etc/xrdp /var/log/xrdp* 2>/dev/null || true
# XFCE als leichtgewichtige Desktop-Umgebung installieren
progress "Installiere XFCE Desktop-Umgebung..."
apt-get install -y xfce4 xfce4-goodies dbus-x11 || error "XFCE Installation fehlgeschlagen"
# xrdp installieren
apt-get install -y xrdp || error "xrdp Installation fehlgeschlagen"
# xrdp-Benutzer zur ssl-cert Gruppe hinzufügen
usermod -aG ssl-cert xrdp 2>/dev/null || true
# Erstelle xrdp-Session-Konfiguration für XFCE
progress "Konfiguriere XFCE für xrdp..."
# Erstelle .xsession für alle Benutzer
cat > /etc/skel/.xsession << 'EOF'
#!/bin/bash
# XFCE Session für xrdp
export XDG_SESSION_DESKTOP=xfce
export XDG_DATA_DIRS=/usr/share/xfce4:/usr/local/share:/usr/share:/var/lib/snapd/desktop
export XDG_CONFIG_DIRS=/etc/xdg/xdg-xfce:/etc/xdg
startxfce4
EOF
# Kopiere .xsession für root
cp /etc/skel/.xsession /root/.xsession
chmod +x /root/.xsession
# Kopiere .xsession für user (falls vorhanden)
if id "user" &>/dev/null; then
cp /etc/skel/.xsession /home/user/.xsession
chown user:user /home/user/.xsession
chmod +x /home/user/.xsession
# XFCE Desktop installieren (minimal)
progress "Installiere minimale XFCE-Umgebung..."
if ! apt-get install -y xfce4-session xfce4-panel xfce4-terminal xfce4-settings xfdesktop4 dbus-x11; then
warning "Minimale XFCE-Installation fehlgeschlagen - verwende Fallback..."
apt-get install -y xfce4 dbus-x11 || error "XFCE Installation fehlgeschlagen"
fi
# xrdp-Konfiguration vereinfachen
progress "Konfiguriere xrdp..."
cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.backup
# xrdp neu installieren
progress "Installiere xrdp neu..."
apt-get update
apt-get install -y xrdp || error "xrdp Installation fehlgeschlagen"
# Benutzer zur xrdp-Gruppe hinzufügen
usermod -aG xrdp root 2>/dev/null || true
if id "user" &>/dev/null; then
usermod -aG xrdp user 2>/dev/null || true
fi
# Erstelle minimale xrdp-Konfiguration
progress "Erstelle minimale xrdp-Konfiguration..."
# Backup der Original-Konfiguration
cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.original 2>/dev/null || true
# Sehr einfache xrdp.ini
cat > /etc/xrdp/xrdp.ini << 'EOF'
[Globals]
ini_version=1
@@ -1137,15 +1128,15 @@ tcp_keepalive=true
security_layer=rdp
autorun=
allow_channels=true
allow_multimon=true
allow_multimon=false
bitmap_cache=true
bitmap_compression=true
bulk_compression=true
max_bpp=32
bulk_compression=false
max_bpp=24
new_cursors=true
use_fastpath=both
require_credentials=true
ask_for_reconnect_reason=true
ask_for_reconnect_reason=false
enable_token_login=false
[Xorg]
@@ -1156,20 +1147,10 @@ password=ask
ip=127.0.0.1
port=-1
code=20
[Xvnc]
name=Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1
code=10
EOF
# xrdp-sesman Konfiguration
progress "Konfiguriere xrdp-sesman..."
cp /etc/xrdp/sesman.ini /etc/xrdp/sesman.ini.backup
# Einfache sesman.ini
cp /etc/xrdp/sesman.ini /etc/xrdp/sesman.ini.original 2>/dev/null || true
cat > /etc/xrdp/sesman.ini << 'EOF'
[Globals]
@@ -1178,24 +1159,18 @@ ListenPort=3350
EnableUserWindowManager=true
UserWindowManager=startxfce4
DefaultWindowManager=startxfce4
ReconnectSh=/etc/xrdp/reconnectwm.sh
[Security]
AllowRootLogin=true
MaxLoginRetry=4
TerminalServerUsers=tsusers
TerminalServerAdmins=tsadmins
AlwaysGroupCheck=false
RestrictOutboundClipboard=false
RestrictInboundClipboard=false
[Sessions]
X11DisplayOffset=10
MaxSessions=50
MaxSessions=10
KillDisconnected=false
IdleTimeLimit=0
DisconnectedTimeLimit=0
Policy=UBD
[Logging]
LogFile=xrdp-sesman.log
@@ -1209,72 +1184,100 @@ param2=-nolisten
param3=tcp
param4=-dpi
param5=96
[Xvnc]
param1=-bs
param2=-nolisten
param3=tcp
param4=-localhost
param5=-dpi
param6=96
EOF
# Erstelle .xsession für XFCE
progress "Konfiguriere XFCE-Sessions..."
# Root-Passwort für RDP setzen
progress "Setze Root-Passwort für RDP-Zugang..."
# Root .xsession
cat > /root/.xsession << 'EOF'
#!/bin/bash
export XDG_SESSION_DESKTOP=xfce
export XDG_DATA_DIRS=/usr/share/xfce4:/usr/local/share:/usr/share
export XDG_CONFIG_DIRS=/etc/xdg/xdg-xfce:/etc/xdg
exec startxfce4
EOF
chmod +x /root/.xsession
# User .xsession (falls user existiert)
if id "user" &>/dev/null; then
cat > /home/user/.xsession << 'EOF'
#!/bin/bash
export XDG_SESSION_DESKTOP=xfce
export XDG_DATA_DIRS=/usr/share/xfce4:/usr/local/share:/usr/share
export XDG_CONFIG_DIRS=/etc/xdg/xdg-xfce:/etc/xdg
exec startxfce4
EOF
chown user:user /home/user/.xsession
chmod +x /home/user/.xsession
fi
# Root-Passwort setzen
progress "Setze Root-Passwort für RDP..."
echo "root:744563017196A" | chpasswd || error "Kann Root-Passwort nicht setzen"
# Polkit-Regel für xrdp erstellen
progress "Erstelle Polkit-Regeln für xrdp..."
mkdir -p /etc/polkit-1/localauthority/50-local.d
# Log-Verzeichnisse erstellen mit korrekten Berechtigungen
progress "Erstelle Log-Verzeichnisse..."
mkdir -p /var/log
touch /var/log/xrdp.log /var/log/xrdp-sesman.log 2>/dev/null || true
chown xrdp:xrdp /var/log/xrdp*.log 2>/dev/null || true
chmod 644 /var/log/xrdp*.log 2>/dev/null || true
cat > /etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla << 'EOF'
[Allow Colord all Users]
Identity=unix-user:*
Action=org.freedesktop.color-manager.create-device;org.freedesktop.color-manager.create-profile;org.freedesktop.color-manager.delete-device;org.freedesktop.color-manager.delete-profile;org.freedesktop.color-manager.modify-device;org.freedesktop.color-manager.modify-profile
ResultAny=no
ResultInactive=no
ResultActive=yes
EOF
# Erstelle xrdp-Konfigurationsverzeichnisse
mkdir -p /etc/xrdp/cert /var/run/xrdp
chown xrdp:xrdp /etc/xrdp/cert /var/run/xrdp 2>/dev/null || true
# xrdp-Service aktivieren und starten
# Services aktivieren und starten
progress "Starte xrdp-Services..."
systemctl enable xrdp
# systemd daemon reload
systemctl daemon-reload
# Services aktivieren
systemctl enable xrdp-sesman
systemctl enable xrdp
# Services stoppen falls sie laufen
systemctl stop xrdp 2>/dev/null || true
systemctl stop xrdp-sesman 2>/dev/null || true
# Services neu starten
# Services starten (sesman zuerst)
systemctl start xrdp-sesman
sleep 2
systemctl start xrdp
# Warte und prüfe Status
sleep 3
# Prüfe sesman-Status
if systemctl is-active --quiet xrdp-sesman; then
success "✅ xrdp-sesman erfolgreich gestartet"
# Jetzt xrdp starten
systemctl start xrdp
sleep 3
if systemctl is-active --quiet xrdp; then
success "✅ xrdp erfolgreich gestartet"
else
warning "⚠️ xrdp konnte nicht gestartet werden"
journalctl -u xrdp --no-pager -l | tail -10
fi
else
warning "⚠️ xrdp-sesman konnte nicht gestartet werden"
journalctl -u xrdp-sesman --no-pager -l | tail -10
fi
cd "$CURRENT_DIR"
# Status prüfen
if systemctl is-active --quiet xrdp; then
log "✅ Remote-Zugang konfiguriert:"
# Finaler Status-Check
if systemctl is-active --quiet xrdp && systemctl is-active --quiet xrdp-sesman; then
log "✅ Remote-Zugang vollständig konfiguriert:"
log " 📡 SSH: user:raspberry (Port 22)"
log " 🖥️ RDP: root:744563017196A (Port 3389)"
log " 🖥️ RDP: user:raspberry (Port 3389)"
elif systemctl is-active --quiet ssh; then
log "✅ SSH-Zugang konfiguriert:"
log " 📡 SSH: user:raspberry (Port 22)"
warning "⚠️ RDP-Installation unvollständig"
info "Manuelle Überprüfung erforderlich:"
info " systemctl status xrdp"
info " systemctl status xrdp-sesman"
info " journalctl -u xrdp -f"
else
warning "⚠️ xrdp-Service konnte nicht gestartet werden - starte Debugging..."
debug_xrdp_issues
# Nach Debugging nochmal prüfen
if systemctl is-active --quiet xrdp; then
log "✅ Remote-Zugang nach Debugging konfiguriert:"
log " 📡 SSH: user:raspberry (Port 22)"
log " 🖥️ RDP: root:744563017196A (Port 3389)"
else
log "✅ SSH-Zugang konfiguriert:"
log " 📡 SSH: user:raspberry (Port 22)"
warning "⚠️ RDP-Zugang konnte nicht konfiguriert werden"
info "Manuelle Fehlerbehebung erforderlich - siehe Logs"
fi
error "❌ Weder SSH noch RDP konnten konfiguriert werden"
fi
}
@@ -1291,23 +1294,45 @@ configure_firewall() {
systemctl start firewalld
# Warte kurz bis firewalld vollständig gestartet ist
sleep 3
sleep 5
progress "Konfiguriere firewalld-Zonen und -Regeln..."
# Zone definieren
firewall-cmd --permanent --new-zone=myp-backend 2>/dev/null || true
# Firewall-Status prüfen
if ! firewall-cmd --state >/dev/null 2>&1; then
error "firewalld ist nicht aktiv oder reagiert nicht"
fi
# Bestehende Zone entfernen falls vorhanden
progress "Entferne bestehende myp-backend Zone falls vorhanden..."
if firewall-cmd --permanent --get-zones | grep -q "myp-backend"; then
log "Entferne bestehende myp-backend Zone..."
firewall-cmd --permanent --delete-zone=myp-backend 2>/dev/null || true
firewall-cmd --reload
sleep 2
fi
# Zone neu erstellen
progress "Erstelle neue myp-backend Zone..."
if ! firewall-cmd --permanent --new-zone=myp-backend; then
error "Fehler beim Erstellen der myp-backend Zone"
fi
# Konfiguration neu laden
firewall-cmd --reload
sleep 2
# Erweiterte Netzwerk-Quellen definieren (nur IPv4)
firewall-cmd --permanent --zone=myp-backend --add-source=192.168.0.0/16
firewall-cmd --permanent --zone=myp-backend --add-source=127.0.0.1/32
progress "Füge Netzwerk-Quellen hinzu..."
firewall-cmd --permanent --zone=myp-backend --add-source=192.168.0.0/16 || error "Fehler beim Hinzufügen des 192.168.0.0/16 Netzwerks"
firewall-cmd --permanent --zone=myp-backend --add-source=127.0.0.1/32 || error "Fehler beim Hinzufügen von localhost"
# Lokaler Hostname "raspberrypi" hinzufügen
local local_hostname="raspberrypi"
progress "Füge lokalen Hostname hinzu: $local_hostname"
local local_ip=$(getent hosts "$local_hostname" | awk '{print $1}' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -1 2>/dev/null || true)
if [ -n "$local_ip" ]; then
firewall-cmd --permanent --zone=myp-backend --add-source="$local_ip/32" 2>/dev/null || true
firewall-cmd --permanent --zone=myp-backend --add-source="$local_ip/32" 2>/dev/null || warning "Konnte lokalen Hostname nicht hinzufügen"
log "✅ Lokaler Hostname $local_hostname hinzugefügt: $local_ip"
else
info "Lokaler Hostname $local_hostname nicht auflösbar - wird beim nächsten Boot verfügbar sein"
@@ -1317,51 +1342,100 @@ configure_firewall() {
progress "Füge Frontend-Server hinzu: m040tbaraspi001"
local frontend_ip=$(getent hosts "m040tbaraspi001" | awk '{print $1}' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -1 2>/dev/null || true)
if [ -n "$frontend_ip" ]; then
firewall-cmd --permanent --zone=myp-backend --add-source="$frontend_ip/32" 2>/dev/null || true
firewall-cmd --permanent --zone=myp-backend --add-source="$frontend_ip/32" 2>/dev/null || warning "Konnte Frontend-Server IP nicht hinzufügen"
log "✅ Frontend-Server m040tbaraspi001 hinzugefügt: $frontend_ip"
else
# Versuche auch mit FQDN
local frontend_fqdn_ip=$(getent hosts "m040tbaraspi001.de040.corpintra.net" | awk '{print $1}' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -1 2>/dev/null || true)
if [ -n "$frontend_fqdn_ip" ]; then
firewall-cmd --permanent --zone=myp-backend --add-source="$frontend_fqdn_ip/32" 2>/dev/null || true
firewall-cmd --permanent --zone=myp-backend --add-source="$frontend_fqdn_ip/32" 2>/dev/null || warning "Konnte Frontend-Server FQDN nicht hinzufügen"
log "✅ Frontend-Server m040tbaraspi001.de040.corpintra.net hinzugefügt: $frontend_fqdn_ip"
else
info "Frontend-Server m040tbaraspi001 nicht auflösbar - überspringe"
fi
fi
# Ports und Services hinzufügen
progress "Konfiguriere Ports und Services..."
# HTTPS für API & Kiosk zulassen
firewall-cmd --permanent --zone=myp-backend --add-port=443/tcp
firewall-cmd --permanent --zone=myp-backend --add-port=443/tcp || error "Fehler beim Hinzufügen von Port 443"
# SSH für Wartung
firewall-cmd --permanent --zone=myp-backend --add-service=ssh
firewall-cmd --permanent --zone=myp-backend --add-service=ssh || error "Fehler beim Hinzufügen des SSH-Service"
# RDP für Remote-Desktop
firewall-cmd --permanent --zone=myp-backend --add-port=3389/tcp
firewall-cmd --permanent --zone=myp-backend --add-port=3389/tcp || error "Fehler beim Hinzufügen von Port 3389"
# IPv6 in firewalld deaktivieren
progress "Deaktiviere IPv6 in firewalld..."
firewall-cmd --permanent --set-target=DROP --zone=public --family=ipv6 2>/dev/null || true
firewall-cmd --permanent --set-target=DROP --zone=myp-backend --family=ipv6 2>/dev/null || true
firewall-cmd --permanent --set-target=DROP --zone=public --family=ipv6 2>/dev/null || warning "IPv6 konnte nicht in public Zone deaktiviert werden"
firewall-cmd --permanent --set-target=DROP --zone=myp-backend --family=ipv6 2>/dev/null || warning "IPv6 konnte nicht in myp-backend Zone deaktiviert werden"
# Default-Zone setzen
firewall-cmd --set-default-zone=myp-backend
progress "Setze Default-Zone..."
firewall-cmd --set-default-zone=myp-backend || error "Fehler beim Setzen der Default-Zone"
# Änderungen übernehmen
firewall-cmd --reload
progress "Lade Firewall-Konfiguration neu..."
firewall-cmd --reload || error "Fehler beim Neuladen der Firewall-Konfiguration"
# Kurz warten und Status prüfen
sleep 3
# Firewall-Status anzeigen
progress "Firewall-Konfiguration:"
firewall-cmd --list-all-zones | grep -A 15 "myp-backend" || true
if firewall-cmd --list-all --zone=myp-backend 2>/dev/null; then
log "✅ Firewall-Konfiguration erfolgreich angezeigt"
else
warning "⚠️ Firewall-Status konnte nicht angezeigt werden"
fi
log "✅ Firewall konfiguriert:"
log " 🔒 Zone: myp-backend"
log " 🌐 Netzwerk: 192.168.0.0/16 (nur IPv4)"
log " 🏠 Localhost: 127.0.0.1"
log " 🖥️ Lokaler Host: raspberrypi"
log " 📡 Frontend-Server: m040tbaraspi001"
log " 🔌 Ports: 443/tcp (HTTPS), 22/tcp (SSH), 3389/tcp (RDP)"
log " 🚫 IPv6 vollständig blockiert"
# Finale Validierung
progress "Validiere Firewall-Konfiguration..."
local validation_errors=0
# Prüfe ob Zone existiert
if ! firewall-cmd --get-zones | grep -q "myp-backend"; then
error "Zone myp-backend wurde nicht korrekt erstellt"
((validation_errors++))
fi
# Prüfe Default-Zone
if [ "$(firewall-cmd --get-default-zone)" != "myp-backend" ]; then
warning "Default-Zone ist nicht myp-backend"
((validation_errors++))
fi
# Prüfe Ports
if ! firewall-cmd --zone=myp-backend --query-port=443/tcp 2>/dev/null; then
warning "Port 443 nicht korrekt konfiguriert"
((validation_errors++))
fi
if ! firewall-cmd --zone=myp-backend --query-port=3389/tcp 2>/dev/null; then
warning "Port 3389 nicht korrekt konfiguriert"
((validation_errors++))
fi
if ! firewall-cmd --zone=myp-backend --query-service=ssh 2>/dev/null; then
warning "SSH-Service nicht korrekt konfiguriert"
((validation_errors++))
fi
if [ $validation_errors -eq 0 ]; then
log "✅ Firewall konfiguriert und validiert:"
log " 🔒 Zone: myp-backend (als Default gesetzt)"
log " 🌐 Netzwerk: 192.168.0.0/16 (nur IPv4)"
log " 🏠 Localhost: 127.0.0.1"
log " 🖥️ Lokaler Host: raspberrypi"
log " 📡 Frontend-Server: m040tbaraspi001"
log " 🔌 Ports: 443/tcp (HTTPS), 22/tcp (SSH), 3389/tcp (RDP)"
log " 🚫 IPv6 vollständig blockiert"
else
warning "⚠️ Firewall-Konfiguration mit $validation_errors Fehlern abgeschlossen"
info "System funktioniert möglicherweise trotzdem - manuelle Überprüfung empfohlen"
fi
}
# =========================== REMOTE-ZUGANG TESTEN ===========================
@@ -1380,31 +1454,25 @@ test_remote_access() {
warning "⚠️ SSH-Port 22 nicht erreichbar"
fi
else
warning "⚠️ SSH-Service läuft nicht - versuche Neustart..."
systemctl restart ssh 2>/dev/null || true
sleep 2
if systemctl is-active --quiet ssh; then
success "✅ SSH-Service nach Neustart aktiv"
else
error "❌ SSH-Service konnte nicht gestartet werden"
fi
warning "⚠️ SSH-Service läuft nicht"
fi
# RDP-Service testen
progress "Teste RDP-Service..."
# RDP-Services testen
progress "Teste RDP-Services..."
local xrdp_sesman_status="❌"
local xrdp_status="❌"
# Prüfe xrdp-sesman zuerst
if systemctl is-active --quiet xrdp-sesman; then
xrdp_sesman_status="✅"
success "✅ xrdp-sesman läuft"
else
warning "⚠️ xrdp-sesman läuft nicht - versuche Neustart..."
systemctl restart xrdp-sesman 2>/dev/null || true
sleep 2
warning "⚠️ xrdp-sesman läuft nicht"
fi
# Prüfe xrdp
if systemctl is-active --quiet xrdp; then
success "✅ RDP-Service läuft"
xrdp_status="✅"
success "✅ xrdp läuft"
# RDP-Port testen
if ss -tlnp | grep -q ":3389 "; then
@@ -1413,16 +1481,7 @@ test_remote_access() {
warning "⚠️ RDP-Port 3389 nicht erreichbar"
fi
else
warning "⚠️ RDP-Service läuft nicht - versuche Neustart..."
systemctl restart xrdp 2>/dev/null || true
sleep 3
if systemctl is-active --quiet xrdp; then
success "✅ RDP-Service nach Neustart aktiv"
else
warning "⚠️ RDP-Service konnte nicht gestartet werden"
info "Prüfe Logs mit: journalctl -u xrdp -f"
info "Prüfe sesman Logs mit: journalctl -u xrdp-sesman -f"
fi
warning "⚠️ xrdp läuft nicht"
fi
# Firewall-Status testen
@@ -1430,10 +1489,6 @@ test_remote_access() {
if systemctl is-active --quiet firewalld; then
success "✅ Firewall läuft"
# Aktive Zone anzeigen
local active_zone=$(firewall-cmd --get-active-zones 2>/dev/null | head -1 || echo "Keine Zone aktiv")
info "Aktive Zone: $active_zone"
# Prüfe ob Ports offen sind
if firewall-cmd --zone=myp-backend --query-port=22/tcp 2>/dev/null; then
success "✅ SSH-Port in Firewall freigegeben"
@@ -1455,12 +1510,21 @@ test_remote_access() {
local ip_address=$(ip route get 1.1.1.1 2>/dev/null | awk '{print $7}' | head -1 || echo "Unbekannt")
if [ "$ip_address" != "Unbekannt" ]; then
success "✅ Netzwerk-Interface aktiv: $ip_address"
info "SSH-Zugang: ssh user@$ip_address"
info "RDP-Zugang: $ip_address:3389"
info "Zugang-URLs:"
info " SSH: ssh user@$ip_address"
if [ "$xrdp_status" = "✅" ]; then
info " RDP: $ip_address:3389 (root:744563017196A oder user:raspberry)"
fi
else
warning "⚠️ Keine Netzwerk-IP ermittelt"
fi
# Status-Zusammenfassung
log "📊 Service-Status:"
log " SSH: $(systemctl is-active --quiet ssh && echo "✅ Aktiv" || echo "❌ Inaktiv")"
log " xrdp-sesman: $xrdp_sesman_status $(systemctl is-active --quiet xrdp-sesman && echo "Aktiv" || echo "Inaktiv")"
log " xrdp: $xrdp_status $(systemctl is-active --quiet xrdp && echo "Aktiv" || echo "Inaktiv")"
log "✅ Remote-Zugang-Test abgeschlossen"
}
@@ -1503,80 +1567,6 @@ configure_hostname() {
fi
}
# =========================== XRDP DEBUGGING ===========================
debug_xrdp_issues() {
log "=== XRDP DEBUGGING ==="
progress "Analysiere xrdp-Probleme..."
# Prüfe xrdp-Logs
if [ -f /var/log/xrdp.log ]; then
local xrdp_errors=$(tail -20 /var/log/xrdp.log | grep -i "error\|fail\|denied" | wc -l)
if [ "$xrdp_errors" -gt 0 ]; then
warning "⚠️ Fehler in xrdp.log gefunden:"
tail -10 /var/log/xrdp.log | grep -i "error\|fail\|denied" || true
fi
fi
# Prüfe sesman-Logs
if [ -f /var/log/xrdp-sesman.log ]; then
local sesman_errors=$(tail -20 /var/log/xrdp-sesman.log | grep -i "error\|fail\|denied" | wc -l)
if [ "$sesman_errors" -gt 0 ]; then
warning "⚠️ Fehler in xrdp-sesman.log gefunden:"
tail -10 /var/log/xrdp-sesman.log | grep -i "error\|fail\|denied" || true
fi
fi
# Prüfe Berechtigungen
progress "Prüfe xrdp-Berechtigungen..."
if [ ! -r /etc/xrdp/xrdp.ini ]; then
warning "⚠️ xrdp.ini nicht lesbar"
fi
if [ ! -r /etc/xrdp/sesman.ini ]; then
warning "⚠️ sesman.ini nicht lesbar"
fi
# Prüfe ob XFCE installiert ist
if ! command -v startxfce4 >/dev/null 2>&1; then
warning "⚠️ XFCE nicht gefunden - installiere..."
apt-get install -y xfce4 xfce4-goodies dbus-x11 || true
fi
# Prüfe Polkit
if [ ! -f /etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla ]; then
warning "⚠️ Polkit-Regel fehlt - erstelle..."
mkdir -p /etc/polkit-1/localauthority/50-local.d
cat > /etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla << 'EOF'
[Allow Colord all Users]
Identity=unix-user:*
Action=org.freedesktop.color-manager.create-device;org.freedesktop.color-manager.create-profile;org.freedesktop.color-manager.delete-device;org.freedesktop.color-manager.delete-profile;org.freedesktop.color-manager.modify-device;org.freedesktop.color-manager.modify-profile
ResultAny=no
ResultInactive=no
ResultActive=yes
EOF
fi
# Versuche Services neu zu starten
progress "Starte xrdp-Services neu..."
systemctl stop xrdp xrdp-sesman 2>/dev/null || true
sleep 2
systemctl start xrdp-sesman
sleep 2
systemctl start xrdp
sleep 3
if systemctl is-active --quiet xrdp; then
success "✅ xrdp nach Debugging erfolgreich gestartet"
else
warning "⚠️ xrdp konnte auch nach Debugging nicht gestartet werden"
info "Manuelle Prüfung erforderlich:"
info " journalctl -u xrdp -f"
info " journalctl -u xrdp-sesman -f"
info " tail -f /var/log/xrdp.log"
fi
}
# =========================== HAUPTPROGRAMM ===========================
main() {
# Erstelle Log-Datei