# GPU Passthrough on Linux ## Enable IOMMU ```bash sudo vim /etc/default/grub ``` Add amd_iommu=on iommu=pt `GRUB_CMDLINE_LINUX_DEFAULT="... amd_iommu=on iommu=pt"` ```bash sudo grub-mkconfig -o /boot/grub/grub.cfg sudo reboot ``` Verify ```bash sudo dmesg | grep -i iommu ``` ## Find GPU IDs ```bash lspci -nn | grep -E "VGA|Audio" ``` In my case, I get - `10de:28a0` - `10de:22be` ## VFIO Module Options ```bash sudo vim /etc/modprobe.d/vfio.conf ``` > ### Arch > ```bash > options vfio-pci ids=10de:28a0,10de:22be > ``` > ### Fedora > ```bash > options vfio-pci ids=10de:28a0,10de:22be disable_vga=1 > softdep nvidia pre: vfio-pci > softdep nouveau pre: vfio-pci > ``` ## Blacklist GPU ```bash 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 > ```bash > sudo vim /etc/mkinitcpio.conf > ``` > ``` > MODULES=(vfio vfio_iommu_type1 vfio_pci) > ``` > ``` > sudo mkinitcpio -P > sudo reboot > ``` > ### Fedora > ```bash > sudo vim /etc/dracut.conf.d/10-vfio.conf > ``` > ``` > force_drivers+=" vfio vfio_iommu_type1 vfio_pci " > ``` > ```bash > sudo dracut -f > ``` > ```bash > sudo reboot > ``` ### Confirm Kernel Driver ```bash lspci -nnk -d 10de:28a0 ``` ```bash lspci -nnk -d 10de:22be ``` ## Install Virtualization Stack > ### Arch > ```bash > sudo pacman -S --needed virt-manager qemu-full libvirt dnsmasq ovmf swtpm > ``` > ### Fedora > ```bash > 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 > ```bash > sudo usermod -aG libvirt,kvm,input,render,libvirt-qemu $USER > ``` > ### Fedora > ```bash > sudo usermod -aG libvirt,kvm,input,render $USER > ``` Reboot the system. And now verify: ```bash virsh list --all ``` If it doesn't error, you're good. # Create the VM Start virt-manager ```bash virt-manager ``` When creating VM: - Local ISO - Windows 11 ISO - Firmware: UEFI (OVMF) - Chipset: Q35 - TPM: emulated Before you start the VM: ```bash 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. ```bash yay -S looking-glass ``` On Windows, download the host from https://looking-glass.io/downloads ```bash sudo virsh edit win11 ``` Inside `` ```xml 128 ``` ```bash sudo vim /etc/tmpfiles.d/10-looking-glass.conf ``` ``` # Type Path Mode UID GID Age Argument f /dev/shm/looking-glass 0660 YOURUSER kvm - ``` ```bash sudo rm -f /dev/shm/looking-glass ``` ```bash sudo systemd-tmpfiles --create /etc/tmpfiles.d/10-looking-glass.conf ``` ```bash ls -l /dev/shm/looking-glass ``` Should be owned by my user. ## Install Virtual Display Driver on Windows. ## Configure Looking Glass ```bash vim ~/.looking-glass-client.ini ``` ```ini [win] fullscreen=yes size=2880x18900 dontUpscale=yes ``` ```bash env -u WAYLAND_DISPLAY looking-glass-client ``` ## Audio Edit XML. Inside `` ```xml