Verbessern der Performance von Linux Guests in Hyper-V

Linux in Windows

This page is also available in English.


Despite Hyper-V’s impressive performance, its GUI can feel sluggish compared to direct interaction on your host. Finding a solution to this was challenging, as resources were scarce. This post outlines how to configure Hyper-V and Linux guests for a more responsive UI, achieving a performance level comparable to VMware Workstation.

Table of Contents

Use Case

Mein Use Case ist vielleicht ein bisschen spezifisch. Ich möchte VMs direkt auf meinem Windows-Laptop aus verschiedenen Gründen betreiben:

  • Ich bevorzuge es, so wenig Software wie möglich auf meinem Windows-Laptop zu installieren. Wenn ich spezifische Software für einen Anwendungsfall benötige, verwende ich eine VM.
  • Ich benötige spezifische Sicherheitstools, die nur unter Linux laufen oder dort besser funktionieren.
  • Wenn ich mit Kundendaten arbeite, möchte ich sicherstellen, dass nach Abschluss des Projekts keine Daten in irgendeiner Verlaufs-/Cache-Datei verbleiben. Die Verwendung einer „Burner-VM“ garantiert dies.

Der Goldstandard für mich ist VMware Workstation, aber angesichts der jüngsten Kontroverse um Broadcom bin ich mir über die Zukunft dieses Produkts unsicher. Zusätzlich bin ich in der Vergangenheit auf viele Leistungsprobleme gestoßen, und Hyper-V ist leicht verfügbar und kostenlos. Deshalb werde ich Hyper-V nutzen. Alternativen, die ich noch nicht ausprobiert habe, beinhalten Oracle VirtualBox (das ich vor langer Zeit als unbefriedigend empfand) und libvirt (das mir empfohlen wurde, aber ich habe es noch nicht ausprobiert, ich bin mir auch nicht sicher, wie gut es auf Windows funktioniert).

Aktivierung des Enhanced Session Modes

Die Installation von Kali Linux (das verwende ich) in Hyper-V bietet anfangs nur eine ziemlich eingeschränkte usability. Kein copy/paste, keine hohen Auflösungen. Um das zu verbessern kann man kali-tweaks ausführen. Das erlaubt es die Voraussetzungen für den „Enhanced Session Mode“ zu installieren:

Kali Tweaks Virtualization

Nun ist es möglich, die Verbindung mit dem „Enhanced Session Mode“ von Hyper-V herzustellen. Einfach Ansicht -> Enhanced Session Mode auswählen. Wenn diese Option ausgegraut ist, könnte es nötig sein, die Maschine herunterzufahren, den folgenden Befehl (auf dem Host in PowerShell) auszuführen und dann die Maschine wieder zu starten:

set-vm "<VM name here>" -EnhancedSessionTransportType HVSocket

Der „Enhanced Session Mode“ arbeitet mit xrdp im Hintergrund und bietet:

  • Gemeinsame Nutzung der Zwischenablage zwischen Host und VM
  • Gemeinsam genutzte Ordner und Drucker
  • Höhere Auflösungen (und einfache Änderungen der Auflösungen)
  • Angeblich bessere Audio- (nicht getestet) und Videoleistung (was hier in Frage gestellt wird)

Aus der Erfahrung heraus sind diese Funktionen eine nette Ergänzung, aber wie zuvor erwähnt, scheint die Videoleistung mit „Enhanced Session Mode“ schlechter als ohne zu sein, möglicherweise abhängig von der gewählten Auflösung. Ich habe Probleme gehabt.

Zurück zum klassischen Modus

Der Plan ist nun, zum klassischen Modus zurückzukehren (indem „Enhanced Session Mode“ unter Ansicht -> Enhanced Session Mode abgewählt wird) und manuell die Features des „Enhanced Session Mode“ zu implementieren. Audio und Drucken sind für mich (und ich schätze für die Meisten) nicht von Interesse und werden daher nicht behandelt.

Höhere Auflösungen

Der klassische Modus begrenzt die Auflösungen auf maximal 1920x1200. Ich habe einem Monitor mit 2560x1440 und möchte daher natürlich dessen volle Kapazität nutzen.

Zuerst muss die Linux-Maschine heruntergefahren werden, dann kann die Auflösung mit PowerShell eingestellt werden:

Set-VMVideo -VMName <VM video> -ResolutionType Single -HorizontalResolution 2560 -VerticalResolution 1440

Nach dem Neustart der Maschine die folgenden Befehle in Bash ausführen (an die eigene Auflösung anpassen):

cvt 2560 1440 60 # -> calculates the modeline for the command below
xrandr --newmode "2560x1440_60.00"  311.83  2560 2744 3024 3488  1440 1441 1444 1490  -HSync +Vsync
xrandr --addmode Virtual-1 "2560x1440_60.00"
xrandr --output Virtual-1 --mode "2560x1440_60.00"

Die Maschine unterstützt nun die beabsichtigte Auflösung. Erinnerung: Diese Befehle müssen nach einem Neustart erneut ausgeführt werden.

Zwischenablage und gemeinsam genutzter Ordner

Dieser Aspekt ist komplexer, aber entscheidend. Ich habe verschiedene Lösungen ausprobiert, um einen funktionierenden Ansatz zu finden.

Das Konzept ist einfach: Die Zwischenablage mit einem Programm verwalten, das:

  • Bei Änderung des Inhalts der Zwischenablage wird der Inhalt in eine Datei geschrieben
  • Bei Änderung der Datei durch ein externes Programm wird die Zwischenablage mit dem neuen Inhalt aktualisiert

So wird eine Zwei-Wege-Synchronisation zwischen Datei und Zwischenablage hergestellt. Diese Datei muss dann zwischen beiden Maschinen geteilt werden. Für die Linux-Maschine wird Samba verwendet, um zusätzliche Installationen auf dem Windows-Host zu vermeiden. Diese Methode ist effektiv, hat aber den Nachteil, dass Windows keine Benachrichtigungen über Änderungen an entfernten Samba-Freigaben erhält. Als Workaround habe ich eine Überprüfung alle 5 Sekunden implementiert.

Obwohl bessere Lösungen existieren könnten, reicht dies vorerst aus. Dieses Programm ist auf GitHub verfügbar für alle, die es forken oder beitragen möchten: https://github.com/VidraSec/clipboard-monitor

  1. Samba auf Linux einrichten und aktivieren (diese Anleitung war hilfreich: https://ubuntu.com/tutorials/install-and-configure-samba)
  2. Auf die Samba-Freigabe von Windows aus zugreifen
  3. Den clipboard-monitor für Linux und Windows kompilieren
  4. Das Programm auf beiden Systemen ausführen, z.B.:
    • clipboard-monitor.exe \\192.168.0.1\shared-folder\clipboard.txt
    • ./clipboard-monitor ~/shared-folder/clipboard.txt

Die Samba-Freigabe erleichtert auch die Dateifreigabe zwischen den Maschinen und erfüllt somit die Anforderung an einen gemeinsam genutzten Ordner.

Derzeit wird das Kopieren von Dateien über die Zwischenablage nicht unterstützt, aber diese Funktionalität könnte später hinzugefügt werden. Vorerst können Dateiübertragungen durch den gemeinsam genutzten Ordner durchgeführt werden.

Was fehlt

Ein Feature von VMware Workstation, das mir fehlt, ist der direkte VM-Zugriff auf USB-Geräte, wie das Verwenden eines USB-WLAN-Dongles für WLAN-Hacking mit einem Hyper-V-Gast. Ich habe einige Ideen zur Implementierung, die möglicherweise in einem zukünftigen Beitrag geteilt werden.

Fazit

Aus meiner Sicht funktioniert dieses Setup ziemlich gut. Die Benutzeroberfläche ist sehr reaktionsfähig, und wir behalten alle Features des „Enhanced Session Mode“ bei. Darüber hinaus bleibt der „Enhanced Session Mode“ eine Option, falls nötig kann man sich einfach wieder über den „Enhanced Session Mode“ verbinden. Zusätzlich ist SSH als Fail-Safe konfiguriert. Diese Konfiguration ersetzt effektiv VMware Workstation für mich.