4.3 KiB
Windows VM with GPU Passthrough
Enable IOMMU
sudo vim /etc/default/grub
Add amd_iommu=on iommu=pt
GRUB_CMDLINE_LINUX_DEFAULT="... amd_iommu=on iommu=pt"
sudo grub-mkconfig -o /boot/grub/grub.cfg
sudo reboot
Verify
sudo dmesg | grep -i iommu
Find GPU IDs
lspci -nn | grep -E "VGA|Audio"
In my case, I get
10de:28a010de:22be
VFIO Module Options
sudo vim /etc/modprobe.d/vfio.conf
Arch
options vfio-pci ids=10de:28a0,10de:22be
Fedora
options vfio-pci ids=10de:28a0,10de:22be disable_vga=1 softdep nvidia pre: vfio-pci softdep nouveau pre: vfio-pci
Blacklist GPU
sudo vim /etc/modprobe.d/blacklist-gpu.conf
Arch
blacklist nouveau blacklist nvidia blacklist nvidia_drm blacklist nvidia_modeset
Fedora
blacklist nouveau blacklist nvidia blacklist nvidia_drm blacklist nvidia_modeset blacklist nvidia_uvm blacklist rivafb blacklist nvidiafb blacklist snd_hda_intel
Load VFIO
Arch
sudo vim /etc/mkinitcpio.confMODULES=(vfio vfio_iommu_type1 vfio_pci)sudo mkinitcpio -P sudo reboot
Fedora
sudo vim /etc/dracut.conf.d/10-vfio.confforce_drivers+=" vfio vfio_iommu_type1 vfio_pci "sudo dracut -fsudo reboot
Confirm Kernel Driver
lspci -nnk -d 10de:28a0
lspci -nnk -d 10de:22be
Install Virtualization Stack
Arch
sudo pacman -S --needed virt-manager qemu-full libvirt dnsmasq ovmf swtpm
Fedora
sudo dnf install @virtualization virt-manager qemu-kvm libvirt-daemon-config-network libvirt-daemon-kvm bridge-utils edk2-ovmf swtpm
User Groups and Permissions
Arch
sudo usermod -aG libvirt,kvm,input,render,libvirt-qemu $USER
Fedora
sudo usermod -aG libvirt,kvm,input,render $USER
Reboot the system.
And now verify:
virsh list --all
If it doesn't error, you're good.
Create the VM
Start virt-manager
virt-manager
When creating VM:
- Local ISO
- Windows 11 ISO
- Firmware: UEFI (OVMF)
- Chipset: Q35
- TPM: emulated
Before you start the VM:
sudo vim /etc/default/ufw
Find DEFAULT_FORWARD_POLICY="DROP" and change it to DEFAULT_FORWARD_POLICY="ACCEPT"
Now boot the VM.
Network Issues
If the network is being wonky, or if you want to bypass updates... Shift-F10
OOBE\BYPASSNRO
Now add the PCI devices in virt-manager.
yay -S looking-glass
On Windows, download the host from https://looking-glass.io/downloads
sudo virsh edit win11
Inside <devices>
<shmem name="looking-glass">
<model type="ivshmem-plain"/>
<size unit="M">128</size>
</shmem>
sudo vim /etc/tmpfiles.d/10-looking-glass.conf
# Type Path Mode UID GID Age Argument
f /dev/shm/looking-glass 0660 YOURUSER kvm -
sudo rm -f /dev/shm/looking-glass
sudo systemd-tmpfiles --create /etc/tmpfiles.d/10-looking-glass.conf
ls -l /dev/shm/looking-glass
Should be owned by my user.
Install Virtual Display Driver on Windows.
Configure Looking Glass
vim ~/.looking-glass-client.ini
[win]
fullscreen=yes
size=2880x18900
dontUpscale=yes
env -u WAYLAND_DISPLAY looking-glass-client
Audio
Edit XML. Inside <devices>
<sound model="ich9"/>
<audio id="1" type="spice"/>
Clipboard
Edit XML. Inside <devices>
<channel type="spicevmc">
<target type="virtio" name="com.redhat.spice.0"/>
</channel>
File Sharing
Enable Memory → Shared in the virt-manager
sudo pacman -S virtiofsd
mkdir -p ~/vmshare
Edit XML. Inside <devices>
<filesystem type="mount" accessmode="passthrough">
<driver type="virtiofs"/>
<source dir="/home/USERNAME/vmshare"/>
<target dir="vmshare"/>
</filesystem>
Install virtio-guest-tools. Hey guess what, this also seems to make the windows key work.
Also install winfsp