Hi folks
Modern Linux systems have moved away from X11 using Wayland instead and also have moved away from the single libvirtd Virtual machine manager daemon using a modular set of daemons.
This has implications since RDP protocol isn't supported .
So here's 4 things to do to get Windows VMs working under these modern Linux hosts ---
1) install KVM/QEMU plus if it doesn't get included in the install add OVMF (for secure boot and UEFI) and SWTPM for emulated TPM and the virtual machine manager (so you can manage the VM's with a GUI).You will need SAMBA as well if you want to share any files.
2) enable the modular VM daemons
3) enable your user to create / change VM's and be able to dynamically re-direct usb and pci devices
4) create a network bridge --- this is to allow 100% communication with Guest and Host both ways plus Guest full Internet access.Also the advantage of a network bridge is that it can be used if you have several VM's concurrently running from the same host.
Simple to do -- I'm leaving nr 1) as I assume anybody running a Linux Host knows how to install software using their package manager e,g dnf, pacman etc.
I'm basing these commands on Fedora 41 kernel 6.12.9.200 but should also work in modern Arch Linux / Rocky etc distros.
OK here goes : 1) enable the modular daemons :
sudo for drv in qemu interface network nodedev nwfilter secret storage; do \<br> sudo systemctl enable virt${drv}d.service; \<br> sudo systemctl enable virt${drv}d{,-ro,-admin}.socket; \<br> done
reboot the system
now validate the host virtualisation set up
sudo virt-host-validate qemu
You may get this warning
QEMU: Checking for device assignment IOMMU support : WARN (No ACPI DMAR table found, IOMMU either disabled in BIOS or not supported by this hardware platform)
IOMMU needs to be enabled for decent VM performance and dynamic device redirection
for INTEL CPU's edit the grub configuration file (etc/default'grub) and add GRUB_CMDLINE_LINUX="... intel_iommu=on iommu=pt
for AMD CPU's IOMMU is enabled by default so just add iommu=pt.
re-generate grub : sudo grub2-mkconfig -o /boot/grub2/grub.cfg and reboot ( for arch linux sudo grub-mkconfig -o /boot/grub/grub.cfg)
re-validate the host virtualisation sudo virt-host-validate qemu -- should be OK .
Check Vt-d is enabled :
sudo dmesg | grep -i -e DMAR -e IOMMU
if you get this warning on Intel CPU's then just ignore - it only applies to AMD CPU's.
QEMU: Checking for secure guest support : WARN (Unknown if this platform has Secure Guest support)
3) enable normal user to modify, create VM's and dynamically redirect devices
sudo usermod -a -G group1,group2 username the groups needed are kvm,libvirtd,qemu
4) create a network bridge. For purposes here I'm assuming your hardware device (nic) is enp2s0. Easy to find - use command ip -c a.
Note that you can only bridge a LAN connection not Wifi so if you have no LAN connection an easy way is to use a USB-LAN adapter and then plug the lan cable into a port on a wifi extender or a LAN switch.
Ensure full duplex is selected in the adapter properties if its available and try and see if you can use concurrent 2 and 5 g bands for maximum throughput.
Added: For these properties go into hardware -->network adapter -- properties:
sudo virsh net-list --all
sudo nmcli device status
sudo nmcli connection add type bridge con-name bridge0 ifname bridge0 <you can name bridge0 to anything you prefer>
assign the interface to the bridge : sudo nmcli connection add type ethernet slave-type bridge \<br> con-name 'Bridge connection 1' ifname enp2s0 master bridge0
I prefer to let DHCP assign the IP address -- I don't like fixed IP addresses if I can avoid them -- just my preference -- you can assign fixed IP addresses but it's a bit of a hassle here so I'm leaving this as dhcp.
So DHPC will be automatically enabled by the next instruction.
activate the bridge connection
sudo nmcli connection up bridge0
now enable the connection autoconnect-slaves parameter
sudo nmcli connection modify bridge0 connection.autoconnect-slaves 1
reactivate the bridge (might take a few secs)
sudo nmcli connection up bridge0
Now everything should be fine and working : e.g :
Hint - After creating a Windows VM install the Windows Virtio drivers - this will render full screen resolutions (inc 4K UHD) , proper audio, Mouse control improved, Disk and network virtio which can improve performance. Virtio drivers for windows can be downloaded from the fedora site.
Have fun and enjoy the VM's !!!
Cheers
jimbo
Modern Linux systems have moved away from X11 using Wayland instead and also have moved away from the single libvirtd Virtual machine manager daemon using a modular set of daemons.
This has implications since RDP protocol isn't supported .
So here's 4 things to do to get Windows VMs working under these modern Linux hosts ---
1) install KVM/QEMU plus if it doesn't get included in the install add OVMF (for secure boot and UEFI) and SWTPM for emulated TPM and the virtual machine manager (so you can manage the VM's with a GUI).You will need SAMBA as well if you want to share any files.
2) enable the modular VM daemons
3) enable your user to create / change VM's and be able to dynamically re-direct usb and pci devices
4) create a network bridge --- this is to allow 100% communication with Guest and Host both ways plus Guest full Internet access.Also the advantage of a network bridge is that it can be used if you have several VM's concurrently running from the same host.
Simple to do -- I'm leaving nr 1) as I assume anybody running a Linux Host knows how to install software using their package manager e,g dnf, pacman etc.
I'm basing these commands on Fedora 41 kernel 6.12.9.200 but should also work in modern Arch Linux / Rocky etc distros.
OK here goes : 1) enable the modular daemons :
sudo for drv in qemu interface network nodedev nwfilter secret storage; do \<br> sudo systemctl enable virt${drv}d.service; \<br> sudo systemctl enable virt${drv}d{,-ro,-admin}.socket; \<br> done
reboot the system
now validate the host virtualisation set up
sudo virt-host-validate qemu
You may get this warning
QEMU: Checking for device assignment IOMMU support : WARN (No ACPI DMAR table found, IOMMU either disabled in BIOS or not supported by this hardware platform)
IOMMU needs to be enabled for decent VM performance and dynamic device redirection
for INTEL CPU's edit the grub configuration file (etc/default'grub) and add GRUB_CMDLINE_LINUX="... intel_iommu=on iommu=pt
for AMD CPU's IOMMU is enabled by default so just add iommu=pt.
re-generate grub : sudo grub2-mkconfig -o /boot/grub2/grub.cfg and reboot ( for arch linux sudo grub-mkconfig -o /boot/grub/grub.cfg)
re-validate the host virtualisation sudo virt-host-validate qemu -- should be OK .
Check Vt-d is enabled :
sudo dmesg | grep -i -e DMAR -e IOMMU
if you get this warning on Intel CPU's then just ignore - it only applies to AMD CPU's.
QEMU: Checking for secure guest support : WARN (Unknown if this platform has Secure Guest support)
3) enable normal user to modify, create VM's and dynamically redirect devices
sudo usermod -a -G group1,group2 username the groups needed are kvm,libvirtd,qemu
4) create a network bridge. For purposes here I'm assuming your hardware device (nic) is enp2s0. Easy to find - use command ip -c a.
Note that you can only bridge a LAN connection not Wifi so if you have no LAN connection an easy way is to use a USB-LAN adapter and then plug the lan cable into a port on a wifi extender or a LAN switch.
Ensure full duplex is selected in the adapter properties if its available and try and see if you can use concurrent 2 and 5 g bands for maximum throughput.
Added: For these properties go into hardware -->network adapter -- properties:
sudo virsh net-list --all
sudo nmcli device status
sudo nmcli connection add type bridge con-name bridge0 ifname bridge0 <you can name bridge0 to anything you prefer>
assign the interface to the bridge : sudo nmcli connection add type ethernet slave-type bridge \<br> con-name 'Bridge connection 1' ifname enp2s0 master bridge0
I prefer to let DHCP assign the IP address -- I don't like fixed IP addresses if I can avoid them -- just my preference -- you can assign fixed IP addresses but it's a bit of a hassle here so I'm leaving this as dhcp.
So DHPC will be automatically enabled by the next instruction.
activate the bridge connection
sudo nmcli connection up bridge0
now enable the connection autoconnect-slaves parameter
sudo nmcli connection modify bridge0 connection.autoconnect-slaves 1
reactivate the bridge (might take a few secs)
sudo nmcli connection up bridge0
Now everything should be fine and working : e.g :
Hint - After creating a Windows VM install the Windows Virtio drivers - this will render full screen resolutions (inc 4K UHD) , proper audio, Mouse control improved, Disk and network virtio which can improve performance. Virtio drivers for windows can be downloaded from the fedora site.
Have fun and enjoy the VM's !!!
Cheers
jimbo
Last edited:
My Computer
System One
-
- OS
- Windows XP,7,10,11 Linux Arch Linux
- Computer type
- PC/Desktop
- CPU
- 2 X Intel i7