Arch Linux Setup with VFIO GPU Passthrough
Using AMD iGPU for Host + NVIDIA RTX 4090 for VM (VFIO)
Archived setup note (October 2026): This is a machine-specific record from 2025. Package names, device IDs, boot tooling, and third-party installers can change. Back up your data, use the current upstream documentation, and review scripts locally before running them.
My notes and reference for using AMD iGPU for Host + NVIDIA RTX 4090 for VM (VFIO) on Arch Linux.
System Specs
- Motherboard: Gigabyte B650 GAMING X AX (rev. 1.3)
- CPU: AMD Ryzen 9 7950X3D (32 Threads)
- GPU 1 (Host): AMD iGPU (Raphael, RDNA2)
- GPU 2 (Passthrough/Optional Host): NVIDIA GeForce RTX 4090
- Memory: Corsair Vengeance DDR5 64GB (2×32GB) 5600 MHz CL40 (XMP, CMK64GX5M2B5600C40)
- OS: Arch Linux (Hyprland) + Windows 11 Pro (separate disk)
BIOS Configuration
Before installing Arch, reboot into BIOS and configure:
- Enable:
IOMMU(sometimes called SVM or AMD-Vi) - Enable:
ErP(to reduce power when off) - Disable:
Secure Boot - Disable:
XMP(if facing instability) - Set iGPU as primary display output
Prepare Arch Installation
Boot from Arch ISO
Check your disks:
lsblk
ls -l /dev/disk/by-id/
Optional: Chris Titus Arch Install
Do not pipe a remote installer directly into a shell. Download a pinned release or clone the Chris Titus Tech utility, inspect it locally, and follow its current installation instructions.
Choose:
System Setup -> Arch Linux -> Arch Server Setup- Follow partitioning and installation prompts
Step by Step with archinstall
1. Disk Layout
- Manual partitioning if Windows 11 is already installed.
- Example Arch disk:
- EFI: 512 MB, FAT32 →
/boot - Root: rest (ext4 for stability or btrfs for snapshots)
- Swap: optional (or use zram).
- EFI: 512 MB, FAT32 →
2. Bootloader
- Choose systemd-boot.
3. Kernel
- Install linux-zen (main) + linux as fallback.
4. Networking
- Select NetworkManager.
5. Audio
- Use PipeWire.
6. User Accounts
- Set root password.
- Create your main user and add to
wheel.
7. Profile
- Choose Minimal Environment.
8. Additional Packages
base-devel git curl wget nano htop openssh pipewire pipewire-alsa pipewire-pulse pipewire-jack wireplumber
9. Optional Repositories
- Enable multilib.
First Boot Tasks
Example setup with Hyprland + ML4W dotfiles:
sudo pacman -S hyprland vim nvim kitty flatpak timeshift firefox
Managing systemd-boot
List all boot entries:
bootctl list
Create a Windows entry:
# /boot/loader/entries/windows.conf
title Windows 11
efi /EFI/Microsoft/Boot/bootmgfw.efi
Increase boot menu timeout (default is often too fast):
# /boot/loader/loader.conf
default arch-zen.conf
timeout 10
Remove an old/duplicate entry:
sudo bootctl unlink ENTRY_ID
Installing ML4W Dotfiles with Flatpak
As part of my Hyprland setup, I used the ML4W Dotfiles Installer to quickly bring in a pre-configured environment.
Below are the commands and the steps I followed.
flatpak install flathub com.ml4w.dotfilesinstaller
Installation Steps
-
Open Firefox and visit:
https://ml4w.com/os/ -
Run the Flatpak installer:
flatpak run com.ml4w.dotfilesinstaller -
If the website generates a shell script, save it to a local file instead of piping or pasting it directly into a shell. Pin the referenced release where possible and inspect the script and every download it invokes.
-
Run the reviewed local copy only after you understand the changes it will make.
-
Once the script finishes, return to the installer and click Next.
-
Adjust your display resolution.
In my case, I use 2K QHD (2560×1440).
-
Complete the process by selecting Install and Activate.
-
Close the installer and reboot your system.
Remove NVIDIA Host Drivers
Check installed NVIDIA packages:
pacman -Q | grep -i nvidia
Remove them only after confirming the NVIDIA GPU does not drive the host display. This can break the graphical boot, so keep a fallback kernel and console or live-media access ready:
sudo pacman -Rns nvidia-utils nvidia-lts linux-firmware-nvidia
VFIO Setup
Identify GPU IDs
lspci -nnk | grep -A3 NVIDIA
Blacklist NVIDIA
# /etc/modprobe.d/blacklist-nvidia.conf
blacklist nouveau
blacklist nvidia
blacklist nvidia_drm
blacklist nvidia_modeset
Bind to VFIO
Replace these placeholders with every function of the passthrough GPU. Never bind the GPU that drives the host display, and keep a fallback kernel or live environment available.
# /etc/modprobe.d/vfio.conf
options vfio-pci ids=VENDOR_ID:DEVICE_ID,AUDIO_VENDOR_ID:AUDIO_DEVICE_ID
Add vfio_pci vfio vfio_iommu_type1 to the existing MODULES=(...) array in
/etc/mkinitcpio.conf; preserve any modules already listed. This loads VFIO early enough to
claim the device before a host graphics driver.
Rebuild the initramfs, then verify the boot entries:
sudo mkinitcpio -P
bootctl list
Debugging Commands
lsmod | grep amdgpu
ls -l /dev/dri/
lspci -nnk | grep -A3 NVIDIA
Desktop Setup
For a managed setup, use the current upstream instructions for Arch-Hyprland or the ML4W dotfiles. Clone or download a pinned release and inspect the scripts locally rather than piping remote content into a shell.
Conclusion
With this setup:
- Host uses the AMD iGPU (stable, efficient).
- NVIDIA RTX 4090 is isolated for passthrough into a VM.
- Dual boot with Windows is cleanly integrated via systemd-boot.