Remote Desktop: eigene Desktopsession mit XRDP

Im ersten Teil der Remote-Desktop Serie geht es um XRDP. Damit kann ein entfernter Benutzer eine eigenständige Desktopsession zum Server aufbauen. Andere Benutzer des gleichen Servers können parallel dazu eine eigene Verbindung aufbauen, ohne das sich die Benutzer in die Quere kommen. Allerdings darf ein User nur einmal eingeloggt sein.

Remote Desktop: eigene Desktopsession mit XRDP

Da es sich bei der Lösung um eine eigenständige Desktopumgebung abseits vom Monitor handelt, gibt es hier keine Probleme mit Waylanddesktops. XRDP bietet eine Xorg Verbindung ohne GPU Support an, was die Auswahl der eigentlichen Desktopumgebung einschränkt.

Die Installation

Debian & Ubuntu:

sudo apt-get update && sudo apt-get upgrade && sudo apt install xrdp

Fedora:

sudo dnf install xrdp-selinux xrdp

Die Desktopumgebung

Jetzt müssen wir uns für eine Desktopumgebung entscheiden, weil es bei RDP leider keine Vorauswahl seitens des Clienten gibt. Es bieten sich GPU unabhängige Desktops wie GNOME oder XFCE4 an. Zum Glück ist das total einfach:

echo „gnome“ > ~/.xsession

oder

echo „xfce4-session“ > ~/.xsession

Dies muß jeder Benutzer selbst machen oder durch den Superuseraccount regel lassen. Was nicht funktioniert ist Cinnamon, soweit ich das bisher erlebt habe.

Die Firewall öffnen

Da sich die eingesetzten Firewalls pro Distribution stark unterscheiden, hier einige Vorschläge:

Debian & Ubuntu: sudo ufw allow 3389/tcp
Fedora: sudo firewall-cmd –permanent –add-port=3389/tcp
IP-Tables: sudo iptables -A INPUT -j ACCEPT -m tcp -p tcp –dport 3389

Von Fedora abgesehen, müßtet Ihr die Regeln permanent hinzufügen z.B. also in /etc/sysconfig/iptables eintragen.

XRDP Starten

In einer Idealen Welt, würde man nun „systemctl enable –now xrdp“ ausführen und es geht. Da leben wir aber nicht 🙂

In /etc/xrdp/sesman.ini müßtet Ihr sicherstellen, daß folgendes so drinsteht:

[Xorg]
; Specify the path of non-suid Xorg executable. It might differ depending
; on your distribution and version. Find out the appropriate path for your
; environment. The typical path is known as follows:
;
; Fedora 26 or later : param=/usr/libexec/Xorg
; Debian 9 or later : param=/usr/lib/xorg/Xorg
; Ubuntu 16.04 or later : param=/usr/lib/xorg/Xorg
; Arch Linux : param=/usr/lib/Xorg
; CentOS 7 : param=/usr/bin/Xorg or param=Xorg
; CentOS 8 : param=/usr/libexec/Xorg
; FreeBSD (from 2022Q4) : param=/usr/local/libexec/Xorg
;
param=/usr/libexec/Xorg
; Leave the rest parameters as-is unless you understand what will happen.
param=-config
param=xrdp/xorg.conf
param=-noreset
param=-nolisten
param=tcp
param=-logfile
param=.xorgxrdp.%s.log

[Xvnc]
param=Xvnc
param=-bs
param=-nolisten
param=tcp
param=-localhost
param=-dpi
param=96

Damit erklärt sich auch, wieso es kein Waylandproblem mit XRDP gibt, es wird ja nicht benutzt 😉

Jetzt können wir das starten: systemctl enable –now xrdp

Mein Tip

… Ja, ich bin alt, ich schreibe Tip noch einem p :þ… können wir dann? Mein Tip für Euch: enabled es nicht per se.

Ihr könnt den Server auf 127.0.0.1 binden lassen, dann kommt Ihr nur per SSH-Tunnel oder lokal drauf. Letzteres wäre für ein „REMOTE“ Desktoptool ja eigentlich völlig unsinnig, aber es gibt Spezialfälle:

Wenn man z.B. Desktopprogramme für Spezialuser, wie einen spezialisierten Online-Bankingaccount, benutzen möchte, dann kann man sich per RDP einfach einloggen ohne den Benutzer wechseln zu müssen. Das kann z.b. auch nützlich sein, wenn man eine kleine Linux Internetshow betreibt und mit einem Nicht-Admin-User mal was zeigen will oder auch, um als Root mit einem Desktoptool etwas zu machen. Möglichkeiten dies zu verwenden gibt es viele.

Im Normalfall sollte man sich von außen auch nicht direkt per RDP einloggen können, sondern immer über einen sicheren SSH Tunnel gehen, denn RDP authentifiziert gegen PAM und das benutzt im Vergleich zu OpenSSH-Schlüsseln, schwache Passwörter als Schutz. Da ist ein OpenSSH-Schlüssel jederzeit vorzuziehen.

Vermeiden lässt sich eine direkte Erreichbarkeit nicht, wenn man im Netz einen Server betreibt, der für Benutzer per RDP erreichbar sein muß. XRDP kann hier insofern für etwas Sicherheit sorgen, wenn Rootzugriffe verboten sind. Aber auch im Netz kann ich allen Beteiligten nur dazu raten, z.b. auf VPNs zu setzen oder einen SSH-Tunnel zu nutzen. Bei den ganzen Kriminellen da draußen, muß man wirklich jede Schutzschicht aktivieren, die geht.

Gnome 3.38: fühlt sich wie ein Rückschritt an

Fedora 33 BETA im Test und es ist nicht so wies sein sollte.

Gnome 3.38: fühlt sich wie ein Rückschritt an

Diverse Probleme plagen Fedora 33 in meinem jüngsten Test. Als Testhardware habe ich mal mein Surface Pro 4 benutzt, was ich besser gelassen hätte, denn Fedora 33 bootet nicht vom USB Stick, oder doch? Mögliche Antworten: Ja / Nein / Vielleicht   und alle sind korrekt :(((

Über das letzte Wochenende habe ich mir mit dem Jungs von der Fedora-Mailingliste einen Debugmarathon gegönnt, nur leider komplett erfolglos.

Steckt man den USB Stick mit Fedora 31 ins Laufwerk, ist ein Booten problemlos möglich, egal wie und wann man den Stick reinsteckt. Mit Fedora 33 geht das nicht mehr. Steckt man den Stick rein, startet die Hardware, wechselt ins Bios und bootet dann von USB, gibt es nur einen Reset. Steck man den Stick erst ein, wenn man schon im Bios ist, dann geht’s 😐  Das macht natürlich wenig Hoffnung, wenn das Gerät bald aktualisiert werden muß.

Wir haben den Grubbootloader ersetzt, die Biosbootconfig in 3 Sekunden zerstört, in 3h wiederhergestellt, und am Bootverhalten vom Surface änderte sich bezüglich Fedora 33 nichts. Es geht einfach nicht und Debuggen geht auch nicht, weil was willste da debuggen, wenn das System einen Instantreset macht? Wir tippen auf Firmwarefehler im EFI Bios des Surface, aber da kein Windows mehr drauf ist, wo sollte das Update dafür herkommen?

Aber, ich habe ne Menge über die Grubkonsole gelernt! Auch das die Anleitung von Fedora zum Recovery nicht funktionieren 🙁

Wenn es denn bootet..

… kommt man zum neuen Gnome 3.38 Desktop. Ich konnte zwar die neuen Monitoranordnung nicht testen, aber ansonsten ist es fast unverändert. Was einen Tabletbenutzer so richtig nerven wird, ist das neue Ausklappmenü zum Abmelden und Abschalten des Rechners.

Was für ein SCHEISS! Sind wir ernsthaft wieder in den Neunziger Jahren angekommen?

Was soll sowas?  Hat wirklich jemand unabsichtlich auf „Bereitschaft“ gedrückt oder versehentlich das Neustarticon nicht gefunden?

Ich glaube kaum, also warum in zum Geier ändert man das von ONE-Click in ein CLICK-MOVE-CLICK System????

Es war doch schon perfekt 🙁

Probleme mit Videokonferenzen

Was jetzt kommt ist eine alter Hut: Wayland ist noch nicht fertig! Party ! Jubbel ! Heiterkeit !  … moment.. nicht fertig? Aber es geht doch!?!?  Nein, tut es doch nicht..  Screenrecording geht nicht:

Wie man in diesem Screenshot sehen kann, sieht man nicht außer einem schwarzen Bildschirm, obwohl Firefox ( siehe oben ) den Bildschirm teilt. Wenn man das nicht in einer VM ( Screenshot ) sondern auf einer HW ( Surface Pro ) macht, dann ist auch das Jitsi Meet Icon links unten in der Ecke passend markiert, weil er wirklich Schwarzbilder streamt. Einfach selbst testen.

Das nächste Desaster naht

Wenn man jetzt LUG Mitgliedern die neuen Sachen wie ZRAM, BttrFS  zeigen will, geht das nicht, also muß man kreativ werden:

Überlegung: Installiere XRDP, lege User an, Verbinde Dich mit User auf RDP  und zeige Ihm einfach alles, indem Du von Deinem Desktop z.b. xFreeRDP oder Remmina überträgst … Tja.. was soll ich sagen.. wie wärs mit „Ein Bild sagt mehr als tausend Worte“ …

Und dann steht Ihr da mit Eurem RDP Desktop der NUR NOCH diese Abfrage anzeigt, die man zwar beenden kann, die dann aber in der nächsten ms wieder aufpoppt!

Abrechen => Endlosslooping

Anmelden => neuer Requester mit anderem Text, aber den gleichen zwei Buttons!

Keine Eingabemöglichkeit!

Wie soll man da ein Passwort für einen User eingeben, der gar kein Passwort hat ????

Aus der Nummer kommt man nicht mehr raus, ergo muß man die RDP Session beenden und ALLE PROZESSE des eingeloggten Benutzers als Rootuser KILLEN. Das errinnert mich stark an ein Scherzprogramm aus den 90zigern.. hmm, wieder die 90ziger.. ein Muster deutet sich an 😉

Natürlich gibt es eine Ursache und eine Lösung, aber die Situation sollte gar nicht erst auftreten.

Ursache: pcsc-lite und Konsorten! Ein SmartCard-Service … auf einem Gerät ohne einen SmartCardreader!

Wie dämlich ist das, daß der sich dann auch noch so startet, obwohl er mit nichts arbeiten kann?

Schritt 1 eines SmartCardDaemons wäre festzustellen, welchen SmartCardreader er benutzen soll.
Schritt 2 eine Fehlermeldung ausgeben, weil er keinen gefunden hat.

Aber sicher nicht in einer Endlosschleife ohne Abbruchbedingung sinnlos Leute ärgern, seit JAHREN SCHON!

Lösung

Falls Euch das mal betreffen sollte, denn ich habe so meine Zweifel, daß andere Distris da besser abschneiden:

systemctl stop pcscd;systemctl disable pcscd
killall -9 pcscd
dnf erase pcsc* -y

und weg damit. Viel Spaß, falls Ihr RDP und SmartCards zusammen benutzen müßt. Schreibt mal eine Karte, wenn Ihr den Ort gefunden habt, wo das zusammen funktioniert 😉

Mal sehen was die Jungs von der Liste dazu sagen, weil die User-Experience, die ja so wichtig ist, mal direkt lang auf die Nase gefallen ist.

ZRAM

ZRAM läuft.. aber irgendwie merkt man nichts.. 2 GB RAM sind 2 GB RAM. Tja.. da braucht es wohl erst einmal mehr um überhaupt damit arbeiten zu können.

Bttrfs habe ich nicht ausprobiert, ich habe ja schon funktionierende Festplatten mit einem OS drauf 😉

XRDP und der schwarze Bildschirm

Die Leser von RemoteDesktop mit XRDP & XFreeRDP haben vielleicht noch im Kopf, daß RDP mit Linux mit Cinnamon einen schwarzen Bildschirm produziert hat, weil Cinnamon scheinbar viel mit Hardwarebeschleunigung arbeitet. Darum geht es heute nicht 😀

XRDP und der schwarze Bildschirm

Ein Phänomen beim Ausprobieren von RDP mit Linux war, daß auf einem Linuxrechner die Desktopsession nicht zwangsläufig weiter lief, wenn die Verbindung vom Clienten gekappt wurde. Wenn man mit RDP arbeitet, gibt es vier Gründe wieso eine Sitzung getrennt wird:

Netzwerkausfall: Verbindung unterbrochen
Sitzungsende: Benutzer loggt aus
Updates: Windows rebootet
WTF!: Der Benutzer fährt den RemotePC runter, statt sich abzumelden.

In den Fällen, wo die Verbindung gekappt wird, kann man normal weiter arbeiten, wenn man die Verbindung durch einen Reconnect wieder herstellt. Bei Windows klappt das bis lang ohne Probleme, weswegen sich viele einfach gar nicht „abmelden“ sondern einfach den RDP Clienten beenden, ohne sich auszuloggen.

Jetzt versucht das Kunststück mal bei einem XRDP Server 🙂 Das kann funktionieren, habe ich heute erst erlebt, aber meistens geht es nicht. Man sieht nur einen schwarzen Bildschirm, wenn es überhaupt funktioniert mit der erneuten Verbindung.

Nicht Remote, Nicht Lokal

Jetzt haben wir die kuriose Situation, daß wir per Remote nicht mehr in den PC kommen, und sich am Bildschirm einloggen als der Benutzer geht auch nicht. Zumindest ich habe keinen gleichzeitig lokalen wie remote Login geschafft, wenn man von SSH absieht.

Was macht man jetzt?

Es bleibt leider nur eins zu tun: per SSH einloggen und alles terminieren, was nicht im Screen läuft. Letzteres werde ich bei den jetzt folgenden Anweisungen nicht beachten, weil das ein von Euch selbst verursachter Spezialfall ist 😉

Erstmal sondieren:

{benutzername}“ bitte als ganzes mit Euren Benutzernamen austauschen, die {} gehören zum Platzhalter.

sudo ps auxf | grep ^{benutzername} | awk ‚{print „kill -9 „$2“;# „$0;}‘

Das sieht erst einmal wüst aus, ist aber nur die normale Ausgabe aller Prozesse die vom Benutzer gestartet wurden. Das Kill vorne ist schon für die nächste Aktion vorbereitet und Ihr sollt eigentlich nur kurz prüfen, ob da a) auch immer eine PID steht (Prozess-ID) b) was alles gekillt würde.

kill kann einem Prozess sagen, daß er sich selbst beenden soll, daß er sich neustarten sollen oder wenn der Prozess unreaktiv aka. tod ist, diesen hart beenden (-9 Option).

Wenn Ihr das geprüft habt, dann könnt Ihr loslegen:

sudo ps auxf | grep ^{benutzername} | awk ‚{print „kill -9 „$2;}‘| bash

Ihr dürft natürlich gern darauf vertrauen, daß es schon alles richtig ist und es gleich beenden, aber wenn was schief geht, nicht im Kommentarblock ausheulen 😉

Bitte beachten:

Wenn man per SSH als der besagte Benutzer eingeloggt ist um sich seine Desktopsession zu terminieren, die Befehle oben betreffen auch die SSH Session! d.h. Ihr kickt Euch selbst dabei raus. Nicht wundern, das ist völlig normal. Daher ggf. noch mal einloggen und prüfen, ob auch wirklich alles weg ist, was weg sein sollte.

Das Problem läßt sich elegant durch einen ROOT Login vermeiden, weil wenn der das macht, trifft es ihn nicht. Aber da root auch Prozesse von sich selbst wegkillen könnte, müßt Ihr gerade bei so brutalen Kommandos die in der Shell zusammengestrickt sind extrem sorgsam sein.

Die Erklär-Sektion

farblich nochmal genau aufgeschlüsselt, was da gemacht wird:

sudo ps auxf | grep ^{benutzername} | awk{print „kill -9 „$2;}‚| bash

sudo                  führt ps als Root aus, was Begrenzungen aller Art bei der Ausgabe verhindert.
                      Kann aber weg gelassen werden.
ps                    "Prozesslist"
auxf                  listet alle Prozesse mit PID Username und Kommando auf.
grep                  filter die Ausgabe von ps nach...
^benutzername         allen Zeilen die mit dem Benutzernamen beginnen, das ^ ist wichtig dabei.
awk                   zerlegt die gefilterten Ausgaben in einzelne Spalten und ordnet die neu an.
{print "kill -9 "$2;} die neue Anordnung des Inhalts von Spalte 2 ( der PID )
bash                  führt die mit print zusammengebaute neue Anweisung "kill -9 PID" aus, 
                      wobei PID dann der Inhalt von Spalte 2 der Prozessliste ist.

Man erwischt so alle laufenden Prozesse des Users, egal wann, egal wieviele es sind.