Aktivieren Sie den Enhanced Session Mode für Arch Linux-Gäste in Hyper-V

Aktivieren Sie den Enhanced Session Mode für Arch Linux-Gäste in Hyper-V

Die Nutzung von virtuellen Maschinen auf Linux in Hyper-V ist von Haus aus etwas weniger komfortabel als mit Windows-Gastmaschinen. Der Grund dafür ist, dass Hyper-V ursprünglich nicht für Desktop-Nutzung gedacht war; man kann nicht einfach ein Gastzusatzpaket installieren und sofort funktionierendes Grafik-Rendering, die Zwischenablage, gemeinsame Verzeichnisse und andere Annehmlichkeiten genießen, wie es bei VirtualBox der Fall ist.

Hyper-V bietet einige Integrationsdienste – so können die Gäste den Schattenkopierungsdienst (VSS) des Hosts nutzen, Gäste können ein Abschaltsignal erhalten, Gäste können die Systemzeit mit dem Virtualisierungs-Host synchronisieren, und vom Host aus ist ein Dateitransfer mit der virtuellen Maschine möglich (Copy-VMFile in PowerShell). Für einige Gastbetriebssysteme, zu denen natürlich auch Windows gehört, steht im Programm Virtual Machine Connection (vmconnect.exe) der Enhanced Session Mode zur Verfügung, der über das RDP-Protokoll funktioniert und es ermöglicht, Festplattengeräte und Drucker in die virtuelle Maschine durchzureichen sowie die gemeinsame Zwischenablage zu nutzen.

Der Enhanced Session Mode funktioniert direkt nach der Installation in Windows in Hyper-V ohne zusätzliche Einrichtung. Bei Gästen auf Linux muss ein RDP-Server installiert werden, der vsock unterstützt (ein spezieller virtueller Netzwerkadressraum in Linux, der für die Kommunikation mit dem Hypervisor gedacht ist). Wenn es für Ubuntu im MVCreate-Programm, das zusammen mit Hyper-V auf Desktop-Editionen von Windows bereitgestellt wird, eine spezielle vorbereitete VM-Vorlage gibt, in der der RDP-Server, der mit vsock arbeitet, XRDP bereits vorinstalliert ist, sieht es bei anderen Distributionen weniger eindeutig aus – so gelang es dem Autor dieses Beitrags den ESM in Fedora zu aktivieren. Hier aktivieren wir den Enhanced Session Mode für die virtuelle Maschine mit Arch Linux.

Installation der Integrationsdienste

Hier ist alles mehr oder weniger einfach, wir müssen nur das Paket hyperv aus dem Community-Repository installieren:

% sudo pacman -S hyperv

Wir aktivieren die Dienste für VSS, den Austausch von Metadaten und Dateien:

% for i in {vss,fcopy,kvp}; do sudo systemctl enable hv_${i}_daemon.service; done

Installation von XRDP

Repository linux-vm-tools auf GitHub bietet Skripte an, die den Installations- und Konfigurationsprozess von XRDP für Arch Linux und Ubuntu automatisieren. Wir installieren Git, falls es noch nicht installiert ist, zusammen mit einem Compiler und anderer Software für manuelle Builds und klonen dann das Repository:

% sudo pacman -S git base-devel
% git clone https://github.com/microsoft/linux-vm-tools.git
% cd linux-vm-tools/arch

Zum Zeitpunkt des Verfassens dieses Artikels ist die neueste Version von XRDP, die mit dem Skript installiert wird, makepkg.sh, die im Repository angeboten wird, 0.9.11, in der der Parsing von vsock://-Adressen defekt ist, weshalb man XRDP aus Git und den Xorg-Treiber manuell aus der AUR installieren muss. Der Patch zu XRDP, der in der AUR angeboten wird, ist ebenfalls leicht veraltet, daher muss PKGBUILD und der Patch manuell bearbeitet werden.

Wir klonen die Repositories mit PKGBUILD aus der AUR (in der Regel automatisieren Programme wie yay, aber der Autor hat diesen gesamten Prozess auf einem sauberen System durchgeführt):

% git clone https://aur.archlinux.org/xrdp-devel-git.git
% git clone https://aur.archlinux.org/xorgxrdp-devel-git.git

Zuerst installieren wir XRDP. Wir öffnen die Datei PKGBUILD mit einem beliebigen Texteditor.

Wir bearbeiten die Build-Parameter. PKGBUILD für den Build von XRDP aus Git beinhaltet nicht die Unterstützung für vsock, daher aktivieren wir sie selbst:

 build() {
   cd $pkgname
   ./configure --prefix=/usr 
               --sysconfdir=/etc 
               --localstatedir=/var 
               --sbindir=/usr/bin 
               --with-systemdsystemdunitdir=/usr/lib/systemd/system 
               --enable-jpeg 
               --enable-tjpeg 
               --enable-fuse 
               --enable-opus 
               --enable-rfxcodec 
               --enable-mp3lame 
-              --enable-pixman
+              --enable-pixman 
+              --enable-vsock
   make V=0
 }

Im Patch arch-config.diff, der die Einheiten und Startskripte von XRDP an die Pfade der in Arch Linux verwendeten Dateien anpasst, ist auch ein Patch zum Skript instfiles/xrdp.sh, das zum Zeitpunkt des Verfassens dieses Artikels aus der XRDP-Lieferung entfernt wurde, weshalb der Patch manuell bearbeitet werden muss: [Install] WantedBy=multi-user.target -diff -up src/xrdp-devel-git/instfiles/xrdp.sh.orig src/xrdp-devel-git/instfiles/xrdp.sh ---- src/xrdp-devel-git/instfiles/xrdp.sh.orig 2017-08-30 00:27:28.000000000 -0600 -+++ src/xrdp-devel-git/instfiles/xrdp.sh 2017-08-30 00:28:00.000000000 -0600 -@@ -17,7 +17,7 @@ - # Beschreibung: startet xrdp - ### END INIT INFO - --SBINDIR=/usr/local/sbin -+SBINDIR=/usr/bin - LOG=/dev/null - CFGDIR=/etc/xrdp - diff -up src/xrdp-devel-git/sesman/startwm.sh.orig src/xrdp-devel-git/sesman/startwm.sh --- src/xrdp-devel-git/sesman/startwm.sh.orig 2017-08-30 00:27:30.000000000 -0600

  Wir bauen das Paket und installieren es mit dem Befehl

% makepkg --skipchecksums -si (der Schlüssel --skipchecksums ist notwendig, um die Überprüfung der Prüfziffern der Quell-Dateien zu deaktivieren, da wir sie manuell bearbeitet haben). Wir wechseln in das Verzeichnis

xorgxrdp-devel-git , danach bauen wir einfach das Paket mit dem Befehl% makepkg -si linux-vm-tools/arch.

xorgxrdp-devel-git und starten das Skript install-config.sh , das die Einstellungen für XRDP, PolicyKit und PAM installiert:% sudo ./install-config.sh

Das Skript installiert die veraltete Einstellung

use_vsock , die seit Version 0.9.11 ignoriert wird, weshalb wir die Konfigurationsdateimanuell bearbeiten müssen: /etc/xrdp/xrdp.ini manuell:

 ;   port=vsock://:
-port=3389
+port=vsock://-1:3389

 ; 'port' oben sollte mit vsock anstelle von tcp verbunden werden
 ; verwenden Sie dies nur mit einer Zahl allein im obigen Port
 ; ziehen Sie vor, vsock://: oben zu verwenden
-use_vsock=true
+;use_vsock=true

 ; regulieren Sie, ob der hörende Socket die Socket-Option tcp_nodelay verwendet

Fügen wir in die Datei ~/ .xinitrc Starten Sie Ihren bevorzugten Fenstermanager / Desktop-Umgebung, die beim Start des X-Servers ausgeführt wird:

% echo "exec i3" > ~/ .xinitrc

Fahren Sie die virtuelle Maschine herunter. Aktivieren Sie den vsock-Transport für die virtuelle Maschine, indem Sie den folgenden Befehl in PowerShell als Administrator ausführen:

PS Admin > Set-VM -VMName MASCHINENNAME -EnhancedSessionTransportType HvSocket

Starten Sie die virtuelle Maschine erneut.

Verbindung

Sobald der XRDP-Dienst nach dem Start des Systems ausgeführt wird, wird die Anwendung vmconnect dies erkennen und im Menü wird der Punkt View -> Enhanced Session. Wenn Sie diesen Punkt auswählen, wird Ihnen angeboten, die Bildschirmauflösung einzustellen, und im Tab Local Resources des sich öffnenden Dialogs können Sie die Geräte auswählen, die in die RDP-Sitzung durchgereicht werden.

Aktivieren Sie den Enhanced Session Mode für Arch Linux-Gäste in Hyper-V
Aktivieren Sie den Enhanced Session Mode für Arch Linux-Gäste in Hyper-V

Lassen Sie uns eine Verbindung herstellen. Wir sehen das XRDP-Anmeldefenster:

Aktivieren Sie den Enhanced Session Mode für Arch Linux-Gäste in Hyper-V

Geben Sie Ihren Benutzernamen und Ihr Passwort ein.

Verwendung

Der Nutzen dieser Manipulationen ist deutlich: Die RDP-Sitzung funktioniert viel reaktionsschneller als bei der Arbeit mit einem virtuellen Bildschirm ohne Enhanced Session. Die über RDP in die VM durchgereichten Festplatten sind im Verzeichnis ${HOME}/shared-drives:

Aktivieren Sie den Enhanced Session Mode für Arch Linux-Gäste in Hyper-V

Die Zwischenablage funktioniert einwandfrei. Drucker können nicht durchgereicht werden, das wird nicht nur nicht unterstützt, sondern bricht das Durchreichen von Festplatten. Auch der Ton funktioniert nicht, aber das war für den Autor nicht erforderlich. Damit Tastenkombinationen wie Alt+Tab erfasst werden, muss vmconnect im Vollbildmodus ausgeführt werden.

Wenn aus irgendeinem Grund der Wunsch besteht, anstelle der Anwendung vmconnect den integrierten RDP-Client von Windows zu verwenden oder beispielsweise von einem anderen Computer aus auf diese Maschine zuzugreifen, muss die Datei geändert werden /etc/xrdp/xrdp.ini port auf tcp://:3389. Wenn die virtuelle Maschine mit dem Default Switch verbunden ist und die Netzwerkeinstellungen über DHCP erhält, kann man von dem Host aus über die Adresse maschinennamen.mshome.net. In TTY kann man nur über die Anwendung vmconnect zugreifen, indem der Enhanced Mode deaktiviert wird.

Verwendete Quellen:

  1. Hyper-V — Arch Wiki
  2. Bugreports auf GitHub: 1, 2

Quelle: habr.com

60GB SSD 8Gb DDR4