KVM QEMU mit Windows 10 unter Debian

reinhard@finalmedia.de Wed 06 Oct 2021 03:58:42 PM CEST

# KVM Hypervisor mit Qemu und Windows 10 Gast auf einem Debian GNU Linux host, und dabei einen virtuellen Folders via RDP Session nutzen

qemu unter debian installieren



apt-get update

# QEMU installieren
apt-get install qemu-system qemu-kvm

# RDP Client und VNC Viewer installieren
apt-get install rdesktop xtightvncviewer

# kvm modul laden
modprobe kvm

Ein leeres QCOW2 Disk Image erstellen.

Wird als Sparse-File erstellt, belegt also nicht von Anfang an 80 GB Speicherplatz, sondern wächst mit

mkdir win10
cd win10
qemu-img create -f qcow2 win10.qcow2 80G

Windows 10 ISO von Microsoft herunterladen


wget -O Win10_21H1_German_x64.iso https://archive.org/download/win-10-21-h-1-german-x-64/Win10_21H1_German_x64.iso

Und nun den sha256 Hash der heruntergeladenen Datei vergleichen


sha256sum Win10_21H1_German_x64.iso

# muss als ergebnis diesen sha256 hash liefern:
# cf0db565a3b186703c244c9b20a1b706020a117f77349a97df0f2edc82d10f30

Nun werden wir QEMU als daemon im hintergrund starten, 2 GB RAM, mit einer vnc session als Grafikausgabe und booten in den Windows Installer in der ISO Datei.

Beachte: Wir starten QEMU mit einem restricted Network (restrict=y), damit das Windows10 als unser Gast nicht ins Internet oder zu anderen Hosts kommunizieren kann, ihm aber dennoch eine Netzwerkkarte zur Verfügung steht, dir wir auch zur Portfreigabe später nutzen können.


qemu-system-x86_64 -enable-kvm \
-cpu core2duo -smp cores=2 -m 2048 \
-hda win10.qcow2 -vga qxl \
-sandbox on -usb -k de -monitor /dev/null \
-netdev user,id=n0,restrict=y,hostfwd=tcp::3389-:3389 \
-device rtl8139,netdev=n0 -device usb-tablet \
-vnc 127.0.0.1:1 -daemonize -cdrom Win10_21H1_German_x64.iso

Nun mittels VNC Viewer an die QEMU Session zur Grafikausgabe andocken

xvncviewer 127.0.0.1::5901

alternative Kurz-Schreibweise, um auf den loopback port 5901 zu verbinden:

xvncviewer :1

Generell: Wenn die VNC Session terminiert (z.B. weil der Windows Installer die Auflösung ändert), kann man sie einfach nochmal aufbauen. Die Emulation läuft durch QEMU ja im Hintergrund weiter.

Wenn sich also der xvncviewer unerwartet selbst beendet, einfach nochmal xvncviewer :1 aufrufen.

Nun Die Windows Installation vollständig durchführen, einen Benutzer erstellen.

Danach in der Systemsteuerung RDP aktivieren, sowie für den Benutzer freigeben.

Daran denken, unter den Systemdiensten für den RDP-Dienst den Starttyp auf automatisch zu stellen, statt auf manuell:

Die VNC Session kann nun geschlossen werden, stattdessen die RDP Session verwenden und den gewünschten Shared-Folder mit durchgeben. Wir legen erst mal Demodaten an:


# in homedir wechseln
cd ~

# dort den ordner transfer erstellen
mkdir transfer

# demodaten darin anlegen
date > transfer/demo.txt
echo erbsen >> transfer/demo.txt


nun einfach immer wie folgt die RDP-Session aufbauen, wenn du dein neues Win10 nutzen willst. Die Auflösung kannst du dabei hier übergeben. Wir wählen 800x600 Pixel und deutsche Tastatur, sowie eben den shared Folder transfer. Beim Sitzungsaufbau kannst du beliebige weitere Shared Folder mit über die RDP Session durchreichen.


# RDP Session aufbauen und den Ordner Transfer als Shared Folder einhängen
rdesktop -r disk:data=./transfer/ -k de -g 800x600 -x -z 127.0.0.1:3389

Damit kannst du nun unter Windows über den RDP Share "data" auf den Shared Folder zugreifen.

Wenn du nicht jedes Mal dein Kennwort beim RDP Aufbau eingeben willst, kannst du auch einfach das hier nutzen:


rdesktop -u Benutzername -p HierPasswort -r disk:data=./transfer/ -k de -g 800x600 -x -z 127.0.0.1:3389

Siehe dir dazu auch das Manual von rdesktop an. Du kannst das Windows Account Passwort z.B. auch verschlüsselt speichern und dann via stdin reinpipen. Dieses Verfahren ist zu empfehlen, da man Kennwörter nicht als Parameter übergeben sollte, da diese in der prozessliste sichtbar sind.


gpg -d < mein_kennwortfile | rdesktop -u Benutzername -p - -r disk:data=./transfer/ -k de -g 800x600 -x -z 127.0.0.1:3389

Eine Alternative zu rdesktop ist xfreerdp, das auch 3D Beschleunigung unterstützt. Sowohl das leichtgewichtige rdesktop, als auch das schwerere xfreerdp bieten dir zudem die Möglichkeit des Copy&Paste zwischen deinem Gast und deinem Host via Zwischenablage. Das ist auch sehr praktisch: Siehe im Manual zu rdesktop -r clipboard:off wenn du das abschalten willst.

Ergänzend: RDP bietet dir auch die Möglichkeit, Druckerport, Sound oder Kartenleser mit durchzureichen.

Wenn du noch weitere Features möchtest, auch Videobeschleunigung und den neusten heißen Scheiß, dann kannst du statt rdesktop auch xfreerdp verwenden:


apt-get install freerdp2-x11

xfreerdp /v:127.0.0.1 /u:BENUTZERNAME /p:PASSWORT /w:800 /h:600 /drive:data,./transfer /sound:sys:alsa +fonts

Dieser RDP Client ist damit deutlich schneller, jedoch auch schwergewichtiger. Auch das Durchreichen beliebiger USB Geräte ist möglich.