Univention Bugzilla – Bug 20525
xrdp RDP Proxy Integration mit DVS Sessionbroker
Last modified: 2023-03-25 06:40:08 CET
Die Idee ist, dass sich ein Benutzer von einem Windows-Client aus per RDP-Client mit dem xrdp-Host verbindet und dieser nach Authentifikation der übermittelten Benutzercredentials einen Sessionbroker-Client startet, um bei dem DVS Sessionbroker-Server eine neue Session zu registrieren und dann mit der vom Sessionbroker-Server übermittelten IP-Adresse eine RDP-Verbindung zur Desktop-Instanz des Benutzers aufzubauen. Ggf. kann hier der univention-sessionbroker-client aus dem univention-thin-client-dvs Paket verwendet werden. +++ This bug was initially created as a clone of Bug #19953 +++ > Der direkte Zugriff über Micorsofts Remote Desktop Protocol (RDP) ist möglich. > Die mit dem Client über virtuelle Kanäle verbundenen Infrastrukturen sind als > RDP-Proxy realisiert und Drucker, Sound und USB werden unterstützt und > angesprochen.
Das dynamische IP bestimmen für die zugewiesene DVS Instanz funktioniert. Dass Prinzip ist folgendes: xrdp startet über eine pipe für eine Session eine modifizierte Version von unvention-dvs-sessionbroker client. Diesem Programm werden der Benutzername und eine Passwortdatei über geben. univention-dvs-sessionbroker-xrdp liefert eine seine pid und die ip der Desktopinstanz zurück und xrdp kann dann die Verbindung zu dem richtigen host aufnehmen. Wird die Session beendet, schickt xrdp ein SIGUSR1 an univention-dvs-sessionbroker-xrdp, was sich daraufhin beendet und die Session im sessionbroker beendet. Was noch sehr wichtig ist nach MS2. 1. SIGCHLD richtig behandeln wenn unnivention-dvs-sessionbroker-xrdp sich beendet. 2. Robustheit überarbeiten, wenn univention-dvs-sessionbroker-xrpd, failed werden sicherlich irgendwo null pointer referenziert, das kommt in C programmen immer sehr schlecht -> SIGSEV
Noch keine Patches erstellt, wir prüfen erst mal einen xrdp fork, welcher angeblich sound und usb unterstützt. Die Änderungen sind aber wohl die gleichen.
Created attachment 2804 [details] xrdp patch for sessionbroker integration
Created attachment 2807 [details] Angepasster Patch: umask und stringlength
Created attachment 2817 [details] Der Erstmal endgültige Patch
Das Paket jetzt ist im Scope Opendvdi verfügbar.
Funktioniert soweit gut, der Patch und der client müssten aber noch ein bisschen angepasst werden: * univention-dvs-sessionroker-client bekommt vom Server unter anderem den univentionDVSWindowsDomain übergeben, der Pro Benutzer ein anderer sein kann. Das muss in mod->domain übernommen werden. * Es wäre gut, wenn univention-dvs-sessionroker-client im --xrdp Mode die Werte in einer klareren Form (z.B. "Key: Value\n") ausgibt.
Es wäre meiner Meinung nach gut, wenn man den sessionbroker-client-Call nur dann macht, wenn in der xrdp.ini z.B. ip=skript://usr/sbin/univention-dvs-sessionbroker-xrdp steht. Damit müsste das Skript auch nicht hardgecoded im Patch stehen und man hätte eine deutlich höhere Chance den Patch Upstream zu bekommen. In den "lib=libxup" und "lib=libvnc"-Modi wird z.B. "ip=-1" dafür verwendet, um anzuzeigen, dass ein lokaler connect erfolgen soll.
Der Patch sollte dann einfach nicht die Option --xrdp mitliefern. Statt dessen habe ich in univention-dvs-xrdp-config (Bug 19953, Comment 14) jetzt ip=skript:/usr/sbin/univention-dvs-sessionbroker-client --xrdp eingetragen.
Comment 7 und Comment 9 sind jetzt umgesetzt. Der Patch wurde nochmal stärker überarbeitet, um die Kommunikation mit dem SB-Client robuster zu machen und ihn ein bisschen "upstreambarer" zu gestalten. Das Paket xrdp ist jetzt mit dem Patch neu im Release-Scope ucs_2.4-0-opendvdi gebaut. Der univention-dvs-sessionbroker-client ist entsprechend um die Ausgabe von univentionDVSWindowsDomain erweitert und macht jetzt außerdem kein sleep(3) mehr im connect_rdp (es ist bisher unklar wofür der mal als workaround eingeführt wurde). Das Paket univention-dvs-sessionbroker wurde entsprechend auch neu gebaut.
Der RDP-Proxy funktioniert soweit, allerdings bekomme ich bei absichtlich falsch angegebener Windows-Domain nur einen schwarzen Bildschirm ohne jeglichen weitere Rückmeldung: rdesktop -u phahn -p XXXXXXXX -d OPENDVDI2 xen2.knut.univention.de Getestet wurde nur ohne Drucker- und Datei-Freigaben.
Ok, das scheint aber ein xrdp-Problem zu sein, das hatte man auch schon ohne die sessionbroker-Integration. Für den MS2 erstmal nicht relevant, die Startseite des Webclients hat die Windows-Domäne des Servers voreingetragen.
Bis auf Comment #12 funktioniert das dann erstmal so für MS2, von daher VERIFIED.