GPU passthrough and Windows VM with Looking Glass
GPU passthrough and Windows VM with Looking Glass
TL;DR: Run Windows 11 with dedicated GPU passthrough, Looking Glass for low-latency gaming and hardware spoofing for anti-cheat compatibility. Tested with Fortnite and Counter-Strike 2.
Demo: Omarchy: GPU passthrough + Windows 11 VM installation - Complete setup, gaming with Fortnite and Counter-Strike 2, benchmarks and switching GPU back to host for LM Studio.
See discussion thread for community testing and feedback: https://github.com/basecamp/omarchy/discussions/3455
What's New
This PR adds GPU passthrough automation, Looking Glass integration and Windows VM enhancements:
GPU Passthrough Tools (omarchy-gpu-passthrough)
Automated GPU passthrough with mode switching between VM and host usage.
Commands:
omarchy-gpu-passthrough setup # One-time setup wizard
omarchy-gpu-passthrough setup --uninstall # Remove configuration
omarchy-gpu-passthrough mode vm # Bind GPU for VM passthrough
omarchy-gpu-passthrough mode host # Return GPU to host
omarchy-gpu-passthrough mode none # Unbind GPU (power saving)
omarchy-gpu-passthrough info status # Current system status
omarchy-gpu-passthrough info detect # Hardware compatibility check
omarchy-gpu-passthrough info verify # Verify configuration
omarchy-gpu-passthrough info report # Hardware config
omarchy-gpu-passthrough info diagnose # Full diagnostic report
What it does:
- Interactive setup wizard with GPU detection
- Automatic driver binding (vfio-pci <-> nvidia/amdgpu)
- IOMMU and kernel parameter configuration
- Hyprland iGPU setup (keeps desktop on integrated GPU)
- Diagnostics and safety checks
- Desktop icons for easy access
Files added:
omarchy-gpu-passthrough- Main dispatcheromarchy-gpu-passthrough-bind- Mode controlomarchy-gpu-passthrough-info- Diagnosticsomarchy-gpu-passthrough-setup- Setup wizardomarchy-gpu-passthrough-utils- Shared library
Looking Glass Integration (omarchy-looking-glass-install, omarchy-looking-glass-launch)
Low-latency VM display using shared memory (IVSHMEM). Near-native gaming performance.
Commands:
omarchy-looking-glass-install # Installation
omarchy-looking-glass-launch # Launch client
What it does:
- Installation with dependency management
- IVSHMEM device setup
- Permission management (kvm group)
- Integration with Windows VM
Note: Default escape key is Scroll Lock. If your keyboard lacks this key, configure a different key in ~/.config/looking-glass/client.ini before launching (see Looking Glass documentation for key names).
Files added:
omarchy-looking-glass-install- Installation scriptomarchy-looking-glass-launch- Client launcher
Windows VM Management (omarchy-windows-vm)
Enhanced with GPU passthrough, Looking Glass support and hardware spoofing.
New commands:
omarchy-windows-vm install # Enhanced: GPU passthrough detection, Looking Glass integration
omarchy-windows-vm launch --lg # New: Connect via Looking Glass
Existing commands:
omarchy-windows-vm launch # Interactive connection menu (RDP, LG, VNC)
omarchy-windows-vm launch -k # Keep VM running after disconnect (existing)
omarchy-windows-vm stop # Shutdown VM
omarchy-windows-vm status # Check VM status
omarchy-windows-vm show-compose # Display docker-compose.yml config (testing/debugging)
omarchy-windows-vm remove # Remove VM
What's new:
- GPU passthrough detection and automatic configuration
- Looking Glass integration with automatic installation prompt
- SMBIOS spoofing (auto-detected from host hardware)
- Hardware spoofing for anti-cheat compatibility
- Installation wizard with progress tracking
- Quick reinstall vs Fresh reinstall options
- Desktop icons: "Windows" (RDP) and "Windows [Looking Glass]" (LG)
- Interactive connection menu with multiple options
- Progress display and ETA
show-composecommand for testing docker-compose generation
Installation options:
- Fresh install: Complete Windows reinstall (removes VM disk)
- Quick reinstall: Reconfigure docker-compose and GPU settings (keeps VM disk)
- Shared folder:
~/Windowsis never removed (preserved across reinstalls)
Both installation and uninstall are idempotent (safe to run multiple times).
Files modified:
omarchy-windows-vm
Automatic SPICE Support
Looking Glass requires SPICE for keyboard/mouse input. Upstream dockurr/windows rejected SPICE support (PR #1567) due to image size concerns.
Solution: omarchy-windows-vm automatically builds a custom image with SPICE when needed:
- Detects if local image has SPICE support (via docker history)
- Auto-builds if missing (~5-10 min, first install only)
- Zero user intervention required
Note: See Known Limitations section for previous manual workaround (now obsolete).
Hardware Requirements
BIOS Settings (one-time):
- Enable CPU Virtualization (AMD-V/SVM or Intel VT-x)
- Enable IOMMU (AMD-Vi or Intel VT-d)
- Set Primary Display to IGD (integrated graphics)
- Connect monitor to motherboard ports (not GPU)
Hardware:
- 2 GPUs required: 1 dedicated + 1 integrated
- Dedicated GPU for VM passthrough
- Integrated GPU for host desktop (Hyprland)
Looking Glass Display Requirement:
Looking Glass needs a display connected to your dedicated GPU. Options:
- Second monitor on GPU
- Same monitor with 2 cables (MOBO + GPU) - no input switching needed
- HDMI/DP dummy plug (~$5) - emulates display without real cable
Without display on GPU, only slow RDP will work.
Tested Hardware:
# omarchy-gpu-passthrough info report
=== Hardware Configuration Report ===
SYSTEM
CPU: AMD Ryzen 7 8700G w/ Radeon 780M Graphics (16 cores)
Kernel: 6.17.8-arch1-1
OS: Arch Linux
RAM: 58 GB
Omarchy:
Version: 3.1.7
Branch: feat/omarchy-gpu-passthrough
Bootloader: Limine
MOTHERBOARD
Vendor: Micro-Star International Co., Ltd.
Model: MAG B650M MORTAR WIFI (MS-7D76)
BIOS: A.H0
BIOS SETTINGS
IOMMU: Enabled ✓
AMD-Vi: Active
IOMMU Mode: Passthrough
GPUs
[1] NVIDIA Corporation GB205 [GeForce RTX 5070] (01:00.0)
Type: Dedicated | Driver: vfio-pci | Mode: vm ✓ | vRAM: 16 GB
[2] Advanced Micro Devices, Inc. [AMD/ATI] Phoenix1 (41:00.0)
Type: Integrated | Driver: amdgpu | vRAM: 4 GB (allocated)
DISPLAY CONFIGURATION
Primary GPU: AMD Radeon 780M Graphics (radeonsi, phoenix, LLVM 21.1.5, DRM 3.64, 6.17.8-arch1-1)
Session: Wayland
Compositor: Hyprland
Monitors per GPU:
[1] NVIDIA Corporation GB205 [GeForce RTX 5070]: N/A (bound to vfio-pci for VM)
[2] Advanced Micro Devices, Inc. [AMD/ATI] Phoenix1: 2 monitor(s) via DP,HDMI-A
DRIVER VERSIONS
AMD/Mesa: 4.6
VFIO: Built-in (kernel 6.17.8-arch1-1)
GPU PASSTHROUGH STATUS
Configured: Yes ✓
Dynamic Binding: Enabled
Current Mode: vm
Ready for VM: Yes ✓
Generated: 2025-11-19 00:54:00
Tested on Omarchy versions: 3.1.7, 3.2.0, 3.2.1, 3.2.2
Known working hardware:
- NVIDIA RTX 5070 + AMD Ryzen 8700G (iGPU) - @slawomir-andreasik
- NVIDIA RTX 4090 + Intel i9-13900K (iGPU) - @steventsvetkov
- NVIDIA GTX 1660 SUPER + AMD Ryzen 5 5600G (iGPU) - @Colchito12
- NVIDIA RTX 2060 12GB + AMD Sapphire 4GB (iGPU) - @cosier (zen kernel + ACS patch for AMD 500 series)
Not tested: AMD dedicated GPUs, Intel Arc GPUs
Quick Start
Prerequisites:
- 2 GPUs: 1 dedicated + 1 integrated
- BIOS configured: VT-x/AMD-V enabled, IOMMU enabled, Primary Display = IGD
1. Install GPU Passthrough
# Configure BIOS (see requirements above)
omarchy-gpu-passthrough info detect # Verify hardware compatibility
omarchy-gpu-passthrough setup # Run setup wizard
sudo reboot # Apply kernel parameters
2. Verify Configuration (after reboot)
omarchy-gpu-passthrough info verify # Check everything is configured correctly
# Optional: generate reports (helpful for troubleshooting)
omarchy-gpu-passthrough info report # Hardware configuration summary
omarchy-gpu-passthrough info diagnose # Full diagnostic report
If you encounter issues, please share the output of these commands in the discussion thread.
3. Install Windows VM
omarchy-windows-vm install # Interactive wizard (~20 min)
During installation you'll be prompted to install Looking Glass. Installation is automated if you choose yes. You can also install manually with omarchy-looking-glass-install.
4. Launch Windows VM
omarchy-windows-vm launch --lg # Looking Glass (low-latency)
# OR
omarchy-windows-vm launch # Interactive menu (RDP, LG, VNC)
5. Switch GPU back to host (optional)
omarchy-windows-vm stop
omarchy-gpu-passthrough mode host # Use GPU on host (CUDA, LM Studio, etc.)
Known Limitations
Experimental Status
Tested on author and community hardware configurations (see Known working hardware). Backup your system before installation.
Black Screen Risk
Can occur after first GPU passthrough setup (first boot with blacklisted GPU). System blacklists dedicated GPU for VM passthrough. If Hyprland configuration fails, desktop won't start.
Recovery:
- Press
Ctrl+Alt+F2to switch to TTY2 - Login with credentials
- Run:
omarchy-gpu-passthrough setup(re-configure) OR:omarchy-gpu-passthrough setup --uninstall(remove) - Reboot
Prevention: Set "Primary Display = IGD" in BIOS before setup.
Anti-Cheat Compatibility
Hardware spoofing included (SMBIOS, CPU flags).
Tested: Fortnite/EasyAntiCheat, Counter-Strike 2 Not tested: Valorant/Vanguard, BattlEye, other anti-cheat systems
~~Upstream Dependency~~ SOLVED: Automatic SPICE Build
~~Upstream Dependency (Temporary)~~
~~Waiting for new dockurr/windows release. SPICE support fix merged to qemus/qemu (PR #978) but dockurr/windows hasn't released new version yet.~~
~~Workaround (for testing now):~~
~~bash~~ ~~git clone https://github.com/dockur/windows.git~~ ~~cd windows~~ ~~git fetch origin pull/1567/head:spice-support~~ ~~git checkout spice-support~~ ~~docker build -t dockurr/windows:latest .~~ ~~~~
~~This creates local dockurr/windows:latest image. Scripts will use this local image. Workaround won't be needed after new release.~~
Update: Manual workaround no longer needed. omarchy-windows-vm now automatically builds custom image with SPICE support when Looking Glass is enabled. Build happens transparently during installation. See "Automatic SPICE Support" in What's New section.
Other Limitations
- GPU compatibility: Tested with NVIDIA (RTX 5070, RTX 4090, RTX 2060, GTX 1660 SUPER) + AMD/Intel iGPU
- AMD 500 series motherboards may require zen kernel + ACS patch for proper IOMMU groups
- Uninstall:
omarchy-gpu-passthrough setup --uninstall
Testing This PR
Want to test GPU passthrough before it's merged? Follow these steps:
# 1. Fetch PR branch
git -C "$OMARCHY_PATH" fetch origin pull/3454/head
git -C "$OMARCHY_PATH" checkout -B feat/omarchy-gpu-passthrough FETCH_HEAD
# 2. Switch to test branch
omarchy-update-branch feat/omarchy-gpu-passthrough
# 3. Test features
omarchy-gpu-passthrough info detect # Check hardware compatibility
omarchy-gpu-passthrough setup # Run setup (backs up config files)
sudo reboot # Apply kernel parameters
# 4. Verify configuration (after reboot)
omarchy-gpu-passthrough info verify # Check everything is configured correctly
# Optional: generate reports (helpful for troubleshooting)
omarchy-gpu-passthrough info report # Hardware configuration summary
omarchy-gpu-passthrough info diagnose # Full diagnostic report
# 5. Install Windows VM
omarchy-windows-vm install # Install Windows VM with Looking Glass
# 6. Return to master
omarchy-update-branch master
git -C "$OMARCHY_PATH" branch -D feat/omarchy-gpu-passthrough
Notes:
omarchy-update-branchautomatically creates snapshot and updates system- Setup creates backups in
/var/backups/omarchy-gpu-passthrough/ - System modifications can be reverted with
omarchy-gpu-passthrough setup --uninstall - Menu update (SUPER+SPACE) won't work on PR branch - this is normal, just fetch once and test
Related Discussion
This addresses the feature request from https://github.com/basecamp/omarchy/discussions/3307
Community testing and feedback welcome in the discussion thread.
Credits
Thanks to @sspaeti for the original omarchy-windows-vm implementation and @dhh for Omarchy and inspiration.
Wow, this seems amazing! Thanks for making this! 🙌 The black-screen risk is real. I had to turn off GPU acceleration in Brave/Chromium because I got black screens during Google Meet meetings regularly. I assume this could be related (don't have to be). Do you think this is a one-off, or that could happen again? Or is that a misconfiguration or a bug in the latest packages? (I didn't have that before, so when I troubleshooted, I thought it could be because of a Mesa or similar update, but I'm not sure.
The black screen risk I mentioned is specifically about the first boot after GPU passthrough setup - it happened to me during testing when something didn't configure correctly (kernel params or Hyprland trying to start on the wrong GPU). I've fixed those installer bugs, but since I only tested on my hardware, there's still a chance someone with different hardware might hit it. That's why I documented the recovery steps.
Your Brave/Chromium issue sounds different.
This is truly amazing. I would never have believed I would see GPU-heavy tasks like playing Counter-Strike 2 in a Windows VM running via Docker on Linux, in a home setting. Good job!
This is just awesome, hope this gets implemented into the main branch!
If you want to merge this it would make sense to point this to dev branch.
Hi! Pretty awesome stuff Tried it on my laptop, but the vm fails because the IOMMU group isn't correct: I have 5 devices on my setup (2018 MSI GS65 stealth), which runs on intel and nvidia, and the script seems to assume 2 of them Will try fixing it and suggesting a few changes
If you want to merge this it would make sense to point this to
devbranch.
Done
Hi! Pretty awesome stuff Tried it on my laptop, but the vm fails because the IOMMU group isn't correct: I have 5 devices on my setup (2018 MSI GS65 stealth), which runs on intel and nvidia, and the script seems to assume 2 of them Will try fixing it and suggesting a few changes
Hey @hngrdev, give it another shot - should handle more IOMMU configurations now. If it still doesn't work, drop a diagnostic report here.
Recent changes:
- Rebased to v3.2.0
- Automatic SPICE build - Looking Glass needs it for keyboard/mouse, but qemus/qemu reverted it due to image size, so
omarchy-windows-vmbuilds a custom image when needed - Fixed SPICE socket permissions and group membership
- UX improvements - cleaner log output, better installation flow
Want to help test GPU passthrough?
# Fetch PR branch
git -C "$OMARCHY_PATH" fetch origin pull/3454/head:feat/omarchy-gpu-passthrough
# Switch to test branch
omarchy-update-branch feat/omarchy-gpu-passthrough
# Test it out
omarchy-gpu-passthrough info detect # Check hardware compatibility
omarchy-gpu-passthrough setup # Run setup
omarchy-windows-vm install # Install Windows VM with Looking Glass
Any feedback welcome.
It would be useful to be able to point this at a raw block device instead of a virtual volume. Use case would be having a dual boot that could be bootable or could be loaded as VM.
minor fixes and rebase from v3.2.1
It would be useful to be able to point this at a raw block device instead of a virtual volume. Use case would be having a dual boot that could be bootable or could be loaded as VM.
Interesting idea. Should be possible since QEMU supports raw block devices. Main challenge would be configuring docker-compose correctly to prevent accidental overwrites - you'd want the disk passed through as read-write but with installation disabled. Would need to detect existing OS and skip the Windows installation flow entirely.
Gave it another try on my laptop, didn't work, here are the results: docker logs give me: ERROR: qemu-system-x86_64: -device vfio-pci,host=0000:00:01.0: vfio 0000:00:01.0 group 2 is not viable Please ensure all devices within the iommu_group are bound to their vfio bus driver
0000:00:01.0 is the PCI bridge, and it seems like it can't be bound to vfio-pci, but can be bound to pci-stub 0000:01:00.2 is the USB controller and keeps getting bound to xhci_hcd for some reason Once I bind my stuff manually, it seems to work Oh, in my case, the bridge shouldn't be passed to the vm it seems, so I don't even know if it should be bound to vfio-pci or pci-stub
if [ ! -d "/sys/kernel/iommu_groups/2/devices/" ]; then echo "IOMMU Group 2 does not exist." exit 1 fi
for device in /sys/kernel/iommu_groups/2/devices/*; do pci_addr=$(basename "$device")
driver=$(lspci -k -s "$pci_addr" | grep -i "Kernel driver in use" | awk -F': ' '{print $2}')
echo "Device: $pci_addr" if [ -n "$driver" ]; then echo " Driver: $driver" else echo " No driver assigned." fi echo "" done Device: 0000:00:01.0 Driver: pcieport
Device: 0000:01:00.0 Driver: vfio-pci
Device: 0000:01:00.1 Driver: vfio-pci
Device: 0000:01:00.2 Driver: xhci_hcd
Device: 0000:01:00.3 Driver: vfio-pci
GPU Passthrough Diagnostics
ℹ️ Collecting system information... [GPU PASSTHROUGH DIAGNOSTICS REPORT] Generated: Sat Nov 29 04:01:37 PM CET 2025 Hostname: laptop
[SYSTEM INFORMATION]
[CPU] Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz CPU Vendor: intel
[Operating System] Kernel: 6.17.9-arch1-1
[Bootloader] Limine
[Motherboard] Vendor: Micro-Star International Co., Ltd. Model: MS-16Q4 BIOS: E16Q4IMS.107
[Display Session] Session Type: wayland Wayland Display: wayland-1 Desktop: Hyprland
[GPU INFORMATION]
[GPU 1: Intel Corporation CoffeeLake-H GT2 [UHD Graphics 630]] PCI Address: 00:02.0 Vendor:Device ID: 8086:3e9b Type: integrated Current Driver: i915
DRM Card: card1 Display Connectors: card1-DP-1: disconnected card1-eDP-1: connected card1-HDMI-A-1: disconnected
[GPU 2: NVIDIA Corporation TU106M [GeForce RTX 2060 Mobile]] PCI Address: 01:00.0 Vendor:Device ID: 10de:1f11 Type: dedicated Current Driver: vfio-pci Audio Device: 01:00.1
[IOMMU INFORMATION]
IOMMU Status: Enabled IOMMU Devices: 2
Active VFIO IOMMU Groups: 1
[GPU 1: Intel Corporation CoffeeLake-H GT2 [UHD Graphics 630]] PCI Address: 00:02.0 IOMMU Group: 0 Devices in group (1): 00:02.0 VGA compatible controller [0300]: Intel Corporation CoffeeLake-H GT2 [UHD Graphics 630] [8086:3e9b]
[GPU 2: NVIDIA Corporation TU106M [GeForce RTX 2060 Mobile]] PCI Address: 01:00.0 IOMMU Group: 2 Devices in group (5): 00:01.0 PCI bridge [0604]: Intel Corporation 6th-10th Gen Core Processor PCIe Controller (x16) [8086:1901] (rev 07) 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU106M [GeForce RTX 2060 Mobile] [10de:1f11] (rev a1) 01:00.1 Audio device [0403]: NVIDIA Corporation TU106 High Definition Audio Controller [10de:10f9] (rev a1) 01:00.2 USB controller [0c03]: NVIDIA Corporation TU106 USB 3.1 Host Controller [10de:1ada] (rev a1) 01:00.3 Serial bus controller [0c80]: NVIDIA Corporation TU106 USB Type-C UCSI Controller [10de:1adb] (rev a1)
[KERNEL CONFIGURATION]
[Kernel Command Line] intel_iommu=on iommu=pt quiet splash cryptdevice=PARTUUID=07ed398a-2891-49ca-9f07-fb5277651248:root root=/dev/mapper/root zswap.enabled=0 rootflags=subvol=@ rw rootfstype=btrfs
[IOMMU Parameters] intel_iommu=on Status: ✓ Enabled
iommu=pt: ✓ Enabled
[LOADED KERNEL MODULES]
[VFIO Modules] vfio_pci 20480 0 vfio_pci_core 98304 1 vfio_pci vfio_iommu_type1 45056 0 vfio 77824 4 vfio_pci_core,vfio_iommu_type1,vfio_pci
[NVIDIA Modules] None loaded
[AMD GPU Modules] None loaded
[DRIVER VERSIONS]
[NVIDIA Driver] Not loaded
[AMD GPU Driver] Not loaded
[VFIO Driver] Version: Built-in (kernel 6.17.9-arch1-1)
[GPU PASSTHROUGH CONFIGURATION]
[GPU Configuration: /etc/omarchy-gpu-passthrough.conf]
GPU Passthrough Config - Generated 2025-11-29
GPU_PCI_ADDR="01:00.0" GPU_VENDOR_ID="10de" GPU_DEVICE_ID="1f11" GPU_NAME="NVIDIA Corporation TU106M [GeForce RTX 2060 Mobile]" GPU_DRIVER_ORIGINAL="nvidia" GPU_AUDIO_PCI="01:00.1" GPU_AUDIO_IDS="10de:10f9" GPU_IOMMU_GROUP="unknown" GPU_IOMMU_DEVICES=""
[Limine Configuration: /etc/default/limine] (Showing KERNEL_CMDLINE entries only) KERNEL_CMDLINE[default]="cryptdevice=PARTUUID=07ed398a-2891-49ca-9f07-fb5277651248:root root=/dev/mapper/root zswap.enabled=0 rootflags=subvol=@ rw rootfstype=btrfs" KERNEL_CMDLINE[default]+="quiet splash" KERNEL_CMDLINE[default]+=" intel_iommu=on iommu=pt"
[VFIO Configuration: /etc/modprobe.d/vfio.conf]
VFIO GPU Passthrough - Generated 2025-11-29
options vfio-pci disable_vga=1 options vfio-pci disable_idle_d3=1
[Driver Blacklist: /etc/modprobe.d/blacklist-gpu-passthrough.conf]
GPU Passthrough - Prevent NVIDIA auto-load at boot
install nvidia /bin/false
[System Environment (/etc/environment)] (GPU-related variables only) No GPU-related variables found
[PROCESSES USING GPU]
[NVIDIA GPU Processes] NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
[DRI Device Handles] /dev/dri/card1: user 1407 F.... Hyprland user 1495 F.... Xwayland /dev/dri/renderD128: user 1407 F.... Hyprland user 1495 F.... Xwayland user 1539 F.... walker user 1630 F.... xdg-desktop-por user 1828 F.... chromium user 1913 F.... chromium user 2150 F.... alacritty user 34020 F.... alacritty user 34373 F.... alacritty
[NVIDIA Device Handles] Specified filename /dev/nvidia* does not exist. No NVIDIA devices or no processes
[RECENT GPU PASSTHROUGH LOGS]
[Last 50 lines of /var/log/omarchy-gpu-passthrough/gpu-passthrough.log] [2025-11-29 15:51:00] [INFO] === SETUP WIZARD START === [2025-11-29 15:51:00] [INFO] User: user [2025-11-29 15:51:00] [INFO] System: 6.17.9-arch1-1 [2025-11-29 15:51:04] [INFO] User user added to kvm group [2025-11-29 15:51:04] [INFO] User user added to video group [2025-11-29 15:51:21] [INFO] Monitor setup: 1 iGPU, 0 dGPU [2025-11-29 15:51:24] [INFO] User confirmed monitor setup [2025-11-29 15:51:24] [INFO] User selected GPU for passthrough: NVIDIA Corporation TU106M [GeForce RTX 2060 Mobile] (01:00.0) [2025-11-29 15:51:25] [INFO] GPU for passthrough: NVIDIA Corporation TU106M [GeForce RTX 2060 Mobile] (01:00.0) - 10de:1f11 [2025-11-29 15:51:25] [INFO] Host GPU (iGPU): Intel Corporation CoffeeLake-H GT2 [UHD Graphics 630] (00:02.0) [2025-11-29 15:51:26] [INFO] Snapshot: GPU Passthrough: NVIDIA Corporation TU106M [GeForce RTX 2060 Mobile] [2025-11-29 15:51:26] [INFO] Backup snapshot created: /var/backups/omarchy-gpu-passthrough/setup-20251129-155126 (4 files) [2025-11-29 15:51:27] [INFO] Configuring system environment for iGPU: 00:02.0 [2025-11-29 15:51:27] [INFO] Configuring Hyprland for iGPU: 00:02.0 [2025-11-29 15:51:27] [INFO] Rebuilding initramfs and UKI... [2025-11-29 15:51:45] [INFO] limine-mkinitcpio completed successfully [2025-11-29 15:51:45] [INFO] === SETUP WIZARD COMPLETED SUCCESSFULLY === [2025-11-29 15:51:45] [INFO] GPU configured: NVIDIA Corporation TU106M [GeForce RTX 2060 Mobile] (01:00.0) - 10de:1f11 [2025-11-29 15:56:45] [INFO] === BIND OPERATION START === [2025-11-29 15:56:45] [INFO] GPU: NVIDIA Corporation TU106M [GeForce RTX 2060 Mobile] (01:00.0) [2025-11-29 15:56:45] [INFO] Current driver: none [2025-11-29 15:56:45] [INFO] GPU: NVIDIA Corporation TU106M [GeForce RTX 2060 Mobile] (01:00.0), Current: none [2025-11-29 15:56:45] [INFO] IOMMU group contains 5 device(s): 00:01.0 01:00.0 01:00.1 01:00.2 01:00.3 [2025-11-29 15:56:45] [INFO] Bound 00:01.0 to vfio-pci [2025-11-29 15:56:45] [INFO] Bound 01:00.0 to vfio-pci [2025-11-29 15:56:46] [INFO] Bound 01:00.1 to vfio-pci [2025-11-29 15:56:46] [INFO] Bound 01:00.2 to vfio-pci [2025-11-29 15:56:46] [INFO] Bound 01:00.3 to vfio-pci [2025-11-29 15:56:46] [SUCCESS] All IOMMU group devices bound to vfio-pci [2025-11-29 15:56:47] [SUCCESS] === BIND SUCCESS: GPU ready for VM passthrough ===
RELEVANT BOOT MESSAGES (dmesg)
[IOMMU Messages] [ 0.000000] Command line: intel_iommu=on iommu=pt quiet splash cryptdevice=PARTUUID=07ed398a-2891-49ca-9f07-fb5277651248:root root=/dev/mapper/root zswap.enabled=0 rootflags=subvol=@ rw rootfstype=btrfs [ 0.060592] Kernel command line: intel_iommu=on iommu=pt quiet splash cryptdevice=PARTUUID=07ed398a-2891-49ca-9f07-fb5277651248:root root=/dev/mapper/root zswap.enabled=0 rootflags=subvol=@ rw rootfstype=btrfs [ 0.060622] DMAR: IOMMU enabled [ 0.141964] DMAR-IR: IOAPIC id 2 under DRHD base 0xfed91000 IOMMU 1 [ 0.496588] iommu: Default domain type: Passthrough (set via kernel command line) [ 0.613394] pci 0000:00:02.0: Adding to iommu group 0 [ 0.613446] pci 0000:00:00.0: Adding to iommu group 1 [ 0.613470] pci 0000:00:01.0: Adding to iommu group 2 [ 0.613492] pci 0000:00:12.0: Adding to iommu group 3 [ 0.613516] pci 0000:00:14.0: Adding to iommu group 4 [ 0.613528] pci 0000:00:14.2: Adding to iommu group 4 [ 0.613542] pci 0000:00:14.3: Adding to iommu group 5 [ 0.613571] pci 0000:00:15.0: Adding to iommu group 6 [ 0.613584] pci 0000:00:15.2: Adding to iommu group 6 [ 0.613602] pci 0000:00:16.0: Adding to iommu group 7 [ 0.613627] pci 0000:00:1b.0: Adding to iommu group 8 [ 0.613654] pci 0000:00:1d.0: Adding to iommu group 9 [ 0.613678] pci 0000:00:1d.4: Adding to iommu group 10 [ 0.613711] pci 0000:00:1f.0: Adding to iommu group 11 [ 0.613726] pci 0000:00:1f.3: Adding to iommu group 11
[VFIO Messages] [ 0.979080] VFIO - User Level meta-driver version: 0.3 [ 267.593067] vfio-pci 0000:01:00.0: vgaarb: VGA decodes changed: olddecodes=io+mem,decodes=none:owns=none [ 267.626638] vfio-pci 0000:01:00.0: vgaarb: VGA decodes changed: olddecodes=none,decodes=io+mem:owns=none [ 267.641199] vfio-pci 0000:01:00.0: vgaarb: VGA decodes changed: olddecodes=io+mem,decodes=none:owns=none
[Boot VGA Device] [ 0.569602] pci 0000:00:02.0: vgaarb: setting as boot VGA device
[PCI Passthrough Messages] [ 267.593067] vfio-pci 0000:01:00.0: vgaarb: VGA decodes changed: olddecodes=io+mem,decodes=none:owns=none [ 267.626638] vfio-pci 0000:01:00.0: vgaarb: VGA decodes changed: olddecodes=none,decodes=io+mem:owns=none [ 267.641199] vfio-pci 0000:01:00.0: vgaarb: VGA decodes changed: olddecodes=io+mem,decodes=none:owns=none
[END OF DIAGNOSTICS REPORT]
Report saved to: /tmp/omarchy-gpu-passthrough-diagnostics-20251129_160137.txt Generated: Sat Nov 29 04:01:37 PM CET 2025
✓ Report saved: /tmp/omarchy-gpu-passthrough-diagnostics-20251129_160137.txt
minor doc updates and rebase from v3.2.2
@hngrdev thanks for the detailed diagnostic report!
0000:00:01.0is the PCI bridge, and it seems like it can't be bound to vfio-pci
You're right - the script shouldn't try to pass PCI bridges to the VM. They're host-side infrastructure that connects the PCIe slot to the CPU. I've pushed a fix that filters out devices with class 0604 (PCI bridge).
Could you update and try again?
git -C "$OMARCHY_PATH" fetch origin pull/3454/head:feat/omarchy-gpu-passthrough
omarchy-update-branch feat/omarchy-gpu-passthrough
# Re-run setup to regenerate config
omarchy-gpu-passthrough setup
# Remove old VM completely
omarchy-windows-vm remove
rm -rf ~/.config/windows/
# Reinstall VM with new config
omarchy-windows-vm install
If you have time, could you share (paste to https://pastebin.com if too long):
omarchy-gpu-passthrough info detect
omarchy-gpu-passthrough info report
omarchy-gpu-passthrough info diagnose
Let's move this to the discussion thread: https://github.com/basecamp/omarchy/discussions/3455
I tried it on an ASUS Proart P16 which has Optimus but not a MUX switch. WIth IOMMU enabled, the setup worked except for it telling me to set the display to use the iGPU in BIOS which is not possible on this laptop. Upon rebooting, as expected I got a black screen. This isn't my area of expertise, is it possible to achieve GPU passthrough on a laptop like this?
I tried it on an ASUS Proart P16 which has Optimus but not a MUX switch. WIth IOMMU enabled, the setup worked except for it telling me to set the display to use the iGPU in BIOS which is not possible on this laptop. Upon rebooting, as expected I got a black screen. This isn't my area of expertise, is it possible to achieve GPU passthrough on a laptop like this?
@RyanLatimer thanks for the feedback!
If you're stuck at black screen, press Ctrl+Alt+F2 to switch to TTY2, login, and run:
omarchy-gpu-passthrough setup --uninstall
sudo reboot
If you can get back to a working system, could you share (paste to https://pastebin.com if too long):
omarchy-gpu-passthrough info detect
omarchy-gpu-passthrough info report
omarchy-gpu-passthrough info diagnose
This will help me understand whether iGPU is detected with monitor connection and your current IOMMU configuration.
Let's move this to the main discussion thread: https://github.com/basecamp/omarchy/discussions/3455
bump, rebase from v3.2.3