Files
public/Linux/Guides/GPU Passthrough.md
Derek McTavish a3f5db502b
2026-04-01 08:33:23 +00:00

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:28a0
  • 10de: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.conf
MODULES=(vfio vfio_iommu_type1 vfio_pci)
sudo mkinitcpio -P
sudo reboot

Fedora

sudo vim /etc/dracut.conf.d/10-vfio.conf
force_drivers+=" vfio vfio_iommu_type1 vfio_pci "
sudo dracut -f
sudo 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