This guide walks you through creating a high-performance Windows 11 virtual machine (VM) on Fedora Silverblue using GPU passthrough technology. This setup allows you to run Windows applications that require dedicated graphics performance while keeping your primary system secure with Fedora Silverblue.
GPU passthrough allows your virtual machine to use your dedicated graphics card directly, providing near-native gaming and graphics performance in Windows while running on Linux. This is different from typical virtualization where graphics performance is limited.
Key terms you'll encounter:
- Virtual Machine (VM): A computer that runs inside your computer, like having two computers in one
- IOMMU: Hardware feature that allows safe sharing of devices between your main system and virtual machines
- VFIO: Linux technology that lets virtual machines use hardware devices directly
- Fedora Silverblue: A secure, container-focused version of Fedora Linux
After completing this guide, you'll have:
- Fedora Silverblue as your main, secure operating system
- Windows 11 running in a virtual machine with excellent graphics performance
- Your NVIDIA GPU (any modern NVIDIA card) dedicated to Windows for gaming and professional applications
- The ability to switch between Linux and Windows environments seamlessly
What you can expect:
- Gaming: 90-95% of native Windows performance
- Professional Apps: Near-native performance for CAD, video editing, 3D rendering
- Boot Time: Windows VM starts in 15-30 seconds
- Memory Overhead: ~2GB RAM used by virtualization layer
Common Use Cases:
- Gaming with Windows-exclusive titles
- Adobe Creative Suite (Photoshop, Premiere, After Effects)
- CAD software (AutoCAD, SolidWorks, Fusion 360)
- 3D rendering (Blender with CUDA, 3ds Max)
- Windows-only professional software
Most systems require BIOS changes to enable GPU passthrough. You'll need to restart your computer and access the BIOS setup.
- Restart your computer
- During startup, repeatedly press one of these keys (varies by manufacturer):
- Dell/Alienware: F2 or F12
- HP: F10 or Esc
- Lenovo/ThinkPad: F1, F2, or Enter
- ASUS: F2 or Delete
- MSI: F2 or Delete
- Acer: F2 or Delete
- General rule: Try F2, F10, F12, or Delete
Look for these settings and enable them (names vary by manufacturer):
1. Virtualization Technology:
- Intel CPUs: "Intel VT-x", "Virtualization Technology", or "Intel Virtualization"
- AMD CPUs: "AMD-V", "SVM Mode", or "Secure Virtual Machine"
- Set to: ENABLED
2. IOMMU Support:
- Intel systems: "Intel VT-d", "Intel Directed I/O", or "IOMMU"
- AMD systems: "AMD IOMMU", "AMD-Vi", or "I/O Virtualization"
- Set to: ENABLED
3. Additional Settings (if available):
- Above 4G Decoding: ENABLED (important for modern GPUs)
- Re-Size BAR Support: ENABLED (improves GPU performance)
- CSM (Compatibility Support Module): DISABLED
- Secure Boot: Can be ENABLED or DISABLED (both work)
- Fast Boot: DISABLED (makes troubleshooting easier)
Common BIOS menu locations:
- Advanced → CPU Configuration → Intel VT-x/AMD-V
- Security → Virtualization → Intel VT-d/AMD IOMMU
- Advanced → PCIe Configuration → Above 4G Decoding
- Boot → CSM Support → Disabled
- Save and Exit (usually F10)
- Boot into Fedora normally
- Continue with hardware compatibility check below
After configuring BIOS, verify your system supports GPU passthrough:
-
Check CPU Virtualization Support:
First, detect your CPU type:
lscpu | grep "Vendor ID"
Then check virtualization support:
# For Intel CPUs (if you see "GenuineIntel"): grep -E "vmx|ept" /proc/cpuinfo # For AMD CPUs (if you see "AuthenticAMD"): grep -E "svm|npt" /proc/cpuinfo
You should see output. If not, go back to BIOS and ensure virtualization is enabled.
-
Check IOMMU Support:
# Check if IOMMU is enabled sudo dmesg | grep -i iommu
You should see messages like "IOMMU enabled" or "DMAR: Intel(R) Virtualization Technology". If not, go back to BIOS and enable VT-d/IOMMU.
-
Check IOMMU Groups:
# Comprehensive IOMMU group checker #!/bin/bash shopt -s nullglob for g in $(find /sys/kernel/iommu_groups/* -maxdepth 0 -type d | sort -V); do echo "IOMMU Group ${g##*/}:" for d in $g/devices/*; do echo -e "\t$(lspci -nns ${d##*/})" done done | grep -A5 -B5 -i nvidia
What to look for: Your NVIDIA GPU and its audio device should be in the same IOMMU group, ideally isolated from other devices.
If any of these checks fail:
- Double-check your BIOS settings
- Some older systems may not support IOMMU
- Consult your motherboard/laptop manual for specific BIOS option names
If you previously used NVIDIA drivers on the host:
You may need to clean up old NVIDIA kernel arguments:
# Remove old NVIDIA-specific kernel arguments if they exist
sudo rpm-ostree kargs \
--delete-if-present=rd.driver.blacklist=nouveau \
--delete-if-present=modprobe.blacklist=nouveau \
--delete-if-present=nvidia-drm.modeset=1
sudo reboot- Any computer (laptop or desktop) with a dedicated NVIDIA GPU
- NVIDIA GPU - Works with most modern NVIDIA cards including:
- GTX 1000 series and newer (GTX 1060, 1070, 1080, etc.)
- RTX 2000/3000/4000/5000 series (RTX 2060, 3060, 4070, etc.)
- Professional cards (Quadro, RTX A-series)
- Intel or AMD CPU with IOMMU/virtualization support:
- Intel: Most CPUs from 2010+ (Core i3/i5/i7/i9)
- AMD: Most CPUs from 2011+ (FX, Ryzen, EPYC)
- At least 16GB RAM (32GB recommended for best performance)
- 200GB+ free storage space for the Windows virtual machine
- External monitor (recommended for direct GPU output on laptops)
- This process modifies your system's boot configuration and drivers
- Always backup your important data before starting
- Time Requirements:
- Initial setup: 2-3 hours
- Windows installation: 30-60 minutes
- Driver installation and optimization: 30 minutes
- Some steps cannot be easily undone without reinstalling your system
- You'll need an active internet connection throughout the process
- Expected reboots: 4-5 times during the complete setup
This guide is written for beginners, but you should be comfortable with:
- Opening and using the terminal (we'll show you all commands)
- Following step-by-step instructions carefully
- Rebooting your computer when instructed
Fedora Silverblue needs access to additional software repositories for GPU drivers and virtualization tools.
What this does: Adds RPM Fusion repositories that contain hardware drivers and multimedia codecs not included in Fedora by default.
-
Open the Terminal application (press
Superkey and type "terminal") -
Copy and paste this command, then press Enter:
rpm-ostree install \
https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm \
https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm-
When prompted, type
yand press Enter to confirm -
Restart your computer:
sudo rebootVerification: After restart, open Terminal and run:
rpm -q rpmfusion-free-release rpmfusion-nonfree-releaseYou should see version numbers for both packages.
What this does: Ensures you have the latest kernel and system components before making configuration changes.
- Open Terminal and run:
rpm-ostree upgrade- Restart your computer:
sudo rebootVerification: Check that your system updated successfully:
rpm-ostree statusThe top entry should show a recent date.
What this does: Identifies your graphics card's hardware identifiers needed for GPU passthrough configuration.
- List all your graphics hardware:
lspci | grep -E "VGA|3D|Display"- Find your NVIDIA GPU's detailed information:
lspci -nn | grep -i nvidiaExample outputs for different systems:
Common NVIDIA GPU examples:
RTX 3060 Mobile:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA106M [GeForce RTX 3060 Mobile / Max-Q] [10de:2520]
01:00.1 Audio device [0403]: NVIDIA Corporation GA106 High Definition Audio Controller [10de:228e]
RTX 4070 Desktop:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation AD104 [GeForce RTX 4070] [10de:2783]
01:00.1 Audio device [0403]: NVIDIA Corporation AD104 High Definition Audio Controller [10de:22bc]
GTX 1660 Ti:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU116M [GeForce GTX 1660 Ti Mobile] [10de:2191]
01:00.1 Audio device [0403]: NVIDIA Corporation TU116 High Definition Audio Controller [10de:1aeb]
What to look for:
- Two entries: One for graphics (
VGA compatible controller) and one for audio (Audio device) - Hardware IDs: Numbers in brackets like
[10de:2520]- these are unique to your GPU model - Bus location: Numbers like
01:00.0- this shows where your GPU is connected
If you don't see NVIDIA devices:
- Make sure your laptop is using the dedicated GPU (not just integrated graphics)
- Try:
lspci | grep -i displayto see all graphics devices - Your GPU might be disabled in BIOS - check BIOS settings
Write down your hardware IDs - you'll need them in the next step!
What this does: Tells your system to reserve the NVIDIA GPU for virtual machines instead of using it for Linux.
-
First, detect your CPU type:
lscpu | grep "Vendor ID"
Note whether you have "GenuineIntel" (Intel) or "AuthenticAMD" (AMD).
-
Prepare your hardware IDs:
Take the hardware IDs from Step 3 (the numbers in brackets like
[10de:xxxx]) and remove the brackets.Example: If you saw
[10de:1234]and[10de:5678], use10de:1234,10de:5678 -
Configure kernel parameters for your CPU type:
For Intel CPU users (GenuineIntel):
# Replace YOUR_GPU_ID,YOUR_AUDIO_ID with YOUR actual hardware IDs from Step 3
sudo rpm-ostree kargs --append='intel_iommu=on iommu=pt video=efifb:off rd.driver.pre=vfio-pci modprobe.blacklist=nouveau vfio-pci.ids=YOUR_GPU_ID,YOUR_AUDIO_ID'For AMD CPU users (AuthenticAMD):
# Replace YOUR_GPU_ID,YOUR_AUDIO_ID with YOUR actual hardware IDs from Step 3
sudo rpm-ostree kargs --append='amd_iommu=on iommu=pt video=efifb:off rd.driver.pre=vfio-pci modprobe.blacklist=nouveau vfio-pci.ids=YOUR_GPU_ID,YOUR_AUDIO_ID'What each parameter does:
intel_iommu=on/amd_iommu=on: Enables IOMMU support for device isolation (Intel vs AMD)iommu=pt: Sets IOMMU to passthrough mode for better performancevideo=efifb:off: Disables EFI framebuffer to prevent conflictsrd.driver.pre=vfio-pci: Loads VFIO driver early in boot processmodprobe.blacklist=nouveau: Prevents open-source NVIDIA driver from loadingvfio-pci.ids=...: Assigns your specific NVIDIA GPU to VFIO for passthrough
- Enable VFIO driver in the boot image:
sudo rpm-ostree initramfs --enable --arg=--add-drivers=vfio-pci- Restart your computer:
sudo reboot-
Wait for the boot menu (GRUB)
-
Select the previous deployment (the older entry)
-
Boot into your system
-
Remove the problematic kernel arguments:
# For Intel systems (replace YOUR_GPU_ID,YOUR_AUDIO_ID with your actual IDs): sudo rpm-ostree kargs --delete='intel_iommu=on' --delete='iommu=pt' --delete='video=efifb:off' --delete='rd.driver.pre=vfio-pci' --delete='modprobe.blacklist=nouveau' --delete='vfio-pci.ids=YOUR_GPU_ID,YOUR_AUDIO_ID' # For AMD systems (replace YOUR_GPU_ID,YOUR_AUDIO_ID with your actual IDs): sudo rpm-ostree kargs --delete='amd_iommu=on' --delete='iommu=pt' --delete='video=efifb:off' --delete='rd.driver.pre=vfio-pci' --delete='modprobe.blacklist=nouveau' --delete='vfio-pci.ids=YOUR_GPU_ID,YOUR_AUDIO_ID' sudo reboot
-
Double-check your hardware IDs in Step 3 and try again
Verification: Check that GPU passthrough is working:
# Check VFIO messages in kernel log
sudo dmesg | grep -i vfio
# Verify GPU is using vfio-pci driver
lspci -k | grep -A 3 -i nvidia
# Verify VFIO modules are in initramfs
sudo lsinitrd | grep -i vfioWhat you should see:
Kernel driver in use: vfio-pcifor your NVIDIA devices- VFIO messages in dmesg output
- VFIO kernel modules listed in initramfs output
If verification fails:
- Your hardware IDs might be wrong - double-check Step 3
- Your hardware might not support IOMMU - check the compatibility section
- Try the recovery steps above to restore your system
What this does: Installs the software needed to create and run virtual machines with GPU passthrough.
- Install virtualization packages:
rpm-ostree install libvirt virt-manager qemu-kvm edk2-ovmf swtpm- Restart your computer:
sudo reboot- Enable and start the virtualization service:
sudo systemctl enable --now libvirtd- Add your user account to the virtualization group:
sudo usermod -aG libvirt $USERImportant for Fedora Silverblue: The standard usermod command may not work properly due to the immutable filesystem structure. If the above command doesn't add you to the group, use this manual method:
# Check if libvirt group exists in /etc/group
grep libvirt /etc/group
# If not found, create it manually:
echo "libvirt:x:961:$USER" | sudo tee -a /etc/group
# Verify it was added:
getent group libvirt- Reboot your system (required for Fedora Silverblue):
sudo rebootWhy reboot is necessary on Fedora Silverblue:
- Properly activates libvirt group membership (login/logout is insufficient)
- Ensures all systemd services start correctly (libvirtd, network services)
- Refreshes SELinux contexts for VM networking
- Provides clean environment for VM setup
- Required for immutable filesystem group changes to take effect
Verification: After rebooting, check your permissions:
id
virsh list --allExpected results:
- The
idcommand should showlibvirtin your groups (format:groups: iamchriswick wheel libvirt) - The
virsh list --allcommand should run without errors - On Fedora Silverblue: If
iddoesn't show libvirt butvirshworks without sudo, the permissions are functioning correctly
Verify package installation on Fedora Silverblue:
rpm-ostree statusLook for the packages in the "LayeredPackages" section: libvirt, virt-manager, qemu-kvm, edk2-ovmf, swtpm
What this does: Sets up a dedicated folder for storing your virtual machine files. VM disk images are large (200GB+), so choose a location with plenty of free space.
Option 1: Default System Location (Recommended for most users)
- Location:
/var/lib/libvirt/images/ - Pros: Works out of the box, proper SELinux contexts, managed by libvirt
- Cons: Uses system drive space, may fill up root partition
Option 2: Home Directory
- Location:
~/VirtualMachines/or~/Documents/VMs/ - Pros: Easy access, uses home partition space
- Cons: Requires additional SELinux configuration
Option 3: External Drive/Separate Partition
- Location:
/mnt/storage/VMs/or/home/VMs/ - Pros: Dedicated storage, doesn't affect system performance
- Cons: Requires mounting setup and SELinux configuration
For Option 1 (Default System Location):
# Create directory
sudo mkdir -p /var/lib/libvirt/images/Windows11
# Set proper ownership
sudo chown -R qemu:qemu /var/lib/libvirt/images/
# Remember this path for later steps
echo "Your VM storage path: /var/lib/libvirt/images/"For Option 2 (Home Directory):
# Create directory in your home folder
mkdir -p ~/VirtualMachines/Windows11
# Set SELinux context for libvirt
sudo setsebool -P virt_use_nfs on
sudo semanage fcontext -a -t virt_image_t "~/VirtualMachines(/.*)?"
sudo restorecon -R ~/VirtualMachines/
# Remember this path for later steps
echo "Your VM storage path: $HOME/VirtualMachines/"For Option 3 (Custom Location):
# Replace /your/custom/path with your chosen location
CUSTOM_PATH="/your/custom/path/VMs"
# Create directory (adjust path as needed)
sudo mkdir -p "$CUSTOM_PATH/Windows11"
# Set proper ownership
sudo chown -R qemu:qemu "$CUSTOM_PATH"
# Set SELinux context
sudo semanage fcontext -a -t virt_image_t "$CUSTOM_PATH(/.*)?"
sudo restorecon -R "$CUSTOM_PATH"
# Remember this path for later steps
echo "Your VM storage path: $CUSTOM_PATH"Verification: Check that your chosen directory exists and has correct permissions:
# For default location:
ls -ldZ /var/lib/libvirt/images/Windows11
# For home directory:
ls -ldZ ~/VirtualMachines/Windows11
# For custom location (replace with your path):
ls -ldZ /your/custom/path/VMs/Windows11Important: Write down your chosen storage path - you'll need it in Step 8 when creating the VM!
What this does: Downloads the Windows 11 installer and special drivers needed for optimal virtual machine performance.
- Create a downloads directory:
mkdir -p ~/Downloads/VM-Setup
cd ~/Downloads/VM-Setup-
Download Windows 11 ISO:
- Visit Microsoft's Windows 11 download page
- Select "Download Windows 11 Disk Image (ISO)"
- Choose your language and download the ISO file to
~/Downloads/VM-Setup/
-
Download VirtIO drivers:
wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.isoVerification: Check that both files downloaded:
ls -lh ~/Downloads/VM-Setup/You should see both Win11_*.iso and virtio-win.iso files.
What this does: Uses the graphical VM manager to create a new Windows 11 virtual machine with GPU passthrough.
-
Open Virtual Machine Manager from your applications menu
-
Click "Create a new virtual machine"
-
Step 1 - Installation Method:
- Select "Local install media (ISO image or CDROM)"
- Click "Forward"
-
Step 2 - Choose Installation Media:
- Click "Browse" and navigate to your Windows 11 ISO file
- Uncheck "Automatically detect from the installation media"
- Type "win11" in the search box and select "Microsoft Windows 11"
- Click "Forward"
-
Step 3 - Memory and CPU:
- Memory: 8192 MB (8GB) minimum, 16384 MB (16GB) recommended
- CPUs: 4-8 (leave some for your host system)
- Click "Forward"
-
Step 4 - Storage:
- Create a disk image: 200 GB minimum
- Storage location: Use the path from Step 6 based on your choice:
- Default:
/var/lib/libvirt/images/Windows11/win11.qcow2 - Home directory:
~/VirtualMachines/Windows11/win11.qcow2 - Custom location:
YOUR_CHOSEN_PATH/Windows11/win11.qcow2
- Default:
- Click "Forward"
-
Step 5 - Final Configuration:
- Name: "Windows 11 Gaming"
- Important: Check "Customize configuration before install"
- Click "Finish"
What this does: Configures the virtual machine with the specific settings needed for Windows 11 and GPU passthrough.
The VM configuration window should open automatically. Don't worry if your interface looks slightly different - virt-manager versions vary, but the concepts are the same.
-
Overview Tab:
- Chipset: Q35 (required for modern features)
- Firmware: Look for "OVMF" with "secboot" in the name
- Might be called "OVMF_CODE.secboot.fd" or just "UEFI with Secure Boot"
- If you don't see this option, any OVMF/UEFI option will work
-
CPUs Tab:
- Configuration: "Copy host CPU configuration" (gives best performance)
- Topology: Set based on your system:
- 4-core CPU: Sockets: 1, Cores: 2, Threads: 2
- 6-core CPU: Sockets: 1, Cores: 3, Threads: 2
- 8-core CPU: Sockets: 1, Cores: 4, Threads: 2
- Keep some cores for your Linux host!
-
Memory Tab:
- Set to whatever you chose earlier (8GB minimum, 16GB+ recommended)
-
Add VirtIO Drivers CD:
- Click "Add Hardware" → "Storage"
- Device type: CDROM device
- Select: Browse to your
virtio-win.isofile - Click "Finish"
-
Add Your NVIDIA GPU:
- Click "Add Hardware" → "PCI Host Device"
- Look for: Your NVIDIA graphics card (should show "vfio-pci" in the driver column)
- Select it and click "Finish"
- Note: If you don't see "vfio-pci", your GPU passthrough setup in Step 4 didn't work
-
Add NVIDIA Audio:
- Click "Add Hardware" → "PCI Host Device" again
- Look for: NVIDIA Audio device (also should show "vfio-pci")
- Select it and click "Finish"
Can't find your devices? They should look something like:
0000:01:00.0 GA106M [GeForce RTX 3060 Mobile] vfio-pci0000:01:00.1 GA106 HD Audio Controller vfio-pci
- XML Configuration (Advanced):
- Click on "XML" tab in the configuration window
- Find the
<features>section and ensure it looks like this:
<features>
<acpi/>
<apic/>
<hyperv>
<relaxed state='on'/>
<vapic state='on'/>
<spinlocks state='on' retries='8191'/>
<vpindex state='on'/>
<runtime state='on'/>
<synic state='on'/>
<stimer state='on'/>
<reset state='on'/>
<vendor_id state='on' value='1234567890ab'/>
</hyperv>
<kvm>
<hidden state='on'/>
</kvm>
<vmport state='off'/>
<smm state='on'/>
</features>Important notes:
- The
vendor_idvalue should be exactly 12 characters kvm hidden='on'prevents GPU driver detection of virtualization- These settings help bypass VM detection in games and applications
- Click "Apply" to save all changes
What this does: Runs through the Windows 11 installation process with proper drivers for virtual machine hardware.
-
Click "Begin Installation" in Virtual Machine Manager
-
Windows setup will start. When you reach the disk selection screen:
- Click "Load driver"
- Browse to the VirtIO CD
- Navigate to
viostor→w11→amd64 - Select the Red Hat VirtIO SCSI driver
- Click "OK"
-
Your 200GB virtual disk should now appear. Select it and continue with Windows installation.
-
Complete the Windows 11 setup process normally:
- Create a local account (recommended for gaming VMs)
- Skip privacy options if desired
- Let Windows finish its initial setup
-
Once you reach the Windows desktop, the basic installation is complete.
Verification: Windows should boot to the desktop. The display resolution may be low initially - this is normal.
What this does: Installs optimized drivers for the virtual machine hardware and your NVIDIA GPU.
-
Install VirtIO Guest Tools:
- In Windows, open File Explorer
- Navigate to the VirtIO CD drive
- Run
virtio-win-guest-tools.exe - Follow the installation wizard
- Restart when prompted
-
Install NVIDIA GPU Drivers:
- Download the latest NVIDIA drivers from nvidia.com
- Or use GeForce Experience if you prefer
- Install the drivers normally
- Restart when prompted
-
Verify GPU Installation:
- Right-click on desktop → Display settings
- Check that your display is running at proper resolution
- Open Device Manager (Right-click Start → Device Manager)
- Expand "Display adapters" - you should see your NVIDIA GPU (e.g., "NVIDIA GeForce RTX 3060", "GTX 1660 Ti", etc.)
Verification: Check that everything is working:
- Device Manager shows no errors or unknown devices
- Display resolution is correct
- NVIDIA Control Panel opens and shows your GPU
Keep track of your VM's resource usage:
# Check VM resource usage (replace "Windows 11 Gaming" with your VM name)
virsh domstats "Windows 11 Gaming"
# Monitor CPU and memory
htop
# Check GPU usage (on host)
nvidia-smiIn Windows VM:
- Disable Windows visual effects (Performance Options → "Adjust for best performance")
- Disable Windows Search indexing on VM disk
- Set Windows power plan to "High Performance"
- Disable Windows Defender real-time protection (if using other antivirus)
On Linux Host:
- Set CPU governor to "performance":
sudo cpupower frequency-set -g performance - Disable CPU mitigations (if comfortable with security trade-off): Add
mitigations=offto kernel args
Upgrade your terminal experience with ZSH, Starship prompt, and beautiful Catppuccin theming:
1. Install ZSH:
rpm-ostree install zsh
sudo reboot2. Set ZSH as default shell:
chsh -s /usr/bin/zsh3. Install Starship prompt:
curl -sS https://starship.rs/install.sh | sh4. Configure Starship for ZSH:
echo 'eval "$(starship init zsh)"' >> ~/.zshrc5. Apply Catppuccin preset:
# Use Starship's built-in Catppuccin preset
starship preset catppuccin-macchiato -o ~/.config/starship.toml6. Activate Catppuccin Macchiato palette:
# Add the palette setting to the top of the config file
sed -i '1i palette = '\''catppuccin_macchiato'\''' ~/.config/starship.toml7. Apply the configuration:
# Reload your shell configuration
source ~/.zshrcWhat you get:
- ZSH: Advanced shell with better autocompletion and plugins
- Starship: Fast, customizable prompt with git status, system info, and more
- Catppuccin Macchiato: Beautiful, warm color palette that's easy on the eyes
Restart your terminal to see the new prompt in action!
Add Flathub repository for more applications:
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepoInstall useful applications:
flatpak install -y flathub com.mattjakeman.ExtensionManager
flatpak install -y flathub com.google.Chrome
flatpak install -y flathub org.remmina.RemminaLooking Glass allows you to view your Windows VM in a window on your Linux desktop with very low latency:
-
Install Looking Glass client on Linux Host (FIRST):
Note: Looking Glass is not yet available as a Flatpak on Flathub. For Fedora Silverblue, we'll use the COPR repository:
# Enable the Looking Glass COPR repository sudo ostree remote add copr-rariotrariowario https://download.copr.fedorainfracloud.org/results/rariotrariowario/looking-glass-client/fedora-$(rpm -E %fedora)-x86_64/ # Install Looking Glass client rpm-ostree install looking-glass-client sudo reboot
-
Configure VM in Virtual Machine Manager:
- VM → Add Hardware → Shared Memory
- Name:
looking-glass - Size: 64 MB (increase to 128 MB for 4K displays)
-
Install Looking Glass Host in Windows (AFTER Linux setup):
- Download Looking Glass Host from looking-glass.io
- Install the Looking Glass Host service in Windows
- Configure it to use the
looking-glassshared memory device - Start the Looking Glass Host service
-
Run Looking Glass:
# Start your Windows VM first, then run: looking-glass-client ``` **Pro tips:** - Create a desktop shortcut for easy access - Use `looking-glass-client -F` for fullscreen mode - Press `ScrollLock` to release mouse capture
If you're familiar with GPU passthrough, here's the condensed version:
BIOS Requirements: Intel VT-x/AMD-V, Intel VT-d/AMD IOMMU, Above 4G Decoding enabled
- Enable repos:
rpm-ostree install rpmfusion-free-release rpmfusion-nonfree-release - Get GPU IDs:
lspci -nn | grep -i nvidia - Configure VFIO:
sudo rpm-ostree kargs --append='intel_iommu=on iommu=pt video=efifb:off rd.driver.pre=vfio-pci modprobe.blacklist=nouveau vfio-pci.ids=YOUR_GPU_ID,YOUR_AUDIO_ID' - Enable initramfs:
sudo rpm-ostree initramfs --enable --arg=--add-drivers=vfio-pci - Install packages:
rpm-ostree install libvirt virt-manager qemu-kvm edk2-ovmf swtpm - Add user to group:
sudo usermod -aG libvirt $USER - Create VM: Use virt-manager with Q35, OVMF, and PCI passthrough
- Install Windows: Load VirtIO drivers during installation
- Install NVIDIA drivers in Windows guest
Key files: /proc/cmdline, /var/lib/libvirt/images/, VirtIO ISO from Fedora People
Most laptops have a hybrid graphics setup that can be confusing:
How laptop graphics usually work:
- Intel integrated GPU → Connected to your laptop's internal screen
- NVIDIA dedicated GPU → May or may not connect directly to external ports
- The NVIDIA GPU often renders graphics but sends output through the Intel GPU
After GPU passthrough:
- Your Linux desktop uses the Intel GPU (internal screen works normally)
- Your Windows VM uses the NVIDIA GPU (may not show on internal screen)
Option 1: External Monitor (Recommended)
- Connect a monitor to HDMI, USB-C, or DisplayPort
- If connected to NVIDIA GPU, you'll get direct output
- Check your laptop manual to see which ports connect to which GPU
Option 2: Looking Glass (Advanced)
- Shows Windows VM in a window on your Linux desktop
- Low latency, good for gaming
- More complex to set up
Option 3: Remote Desktop
- Use built-in Windows Remote Desktop or third-party tools
- Access Windows from your Linux desktop
- Higher latency, not ideal for gaming
How to test: After setup, try connecting an external monitor first. If that doesn't work, use Looking Glass or remote desktop.
Problem: groups command doesn't show libvirt group after logging out/in
Solution:
- Reboot the system:
sudo reboot - If
virsh list --allworks without sudo, the permissions are actually functional - This is normal behavior on Fedora Silverblue's immutable filesystem
Problem: Network errors when starting VMs (network 'default' is not active or network 'default' not found)
Root Cause: Fedora Silverblue creates a split between system-level and user-level libvirt sessions, causing network conflicts.
Solution:
-
Use system-level libvirt for network management:
sudo virsh net-start default sudo virsh net-autostart default
-
If VMs were created in user session, migrate them to system level:
virsh dumpxml "VM_NAME" > /tmp/vm-export.xml sudo virsh define /tmp/vm-export.xml
-
Start VMs with sudo:
sudo virsh start "VM_NAME"
Note: This is normal on Silverblue - the sudo requirement is for network bridge creation, not a permission issue.
Alternative GUI Access: You can use virt-manager without sudo to connect to system libvirt:
- Open virt-manager (without sudo)
- File → Add Connection
- Connect to:
qemu:///system - This allows GUI access without sudo for VM management
Problem: lspci -k shows your GPU still using nvidia or nouveau driver
Solution:
- Double-check your GPU hardware IDs in Step 3
- Verify the kernel parameters are correct:
cat /proc/cmdline
- Ensure you rebooted after configuring VFIO
Problem: Windows installer doesn't see the disk
Solution: Make sure you loaded the VirtIO storage driver during installation (Step 10)
Problem: Games or applications run slowly
Solutions:
- Verify NVIDIA drivers are installed in Windows
- Check that your VM has enough RAM and CPU cores
- Ensure GPU passthrough is working in Device Manager
Problem: Error starting virtual machine
Solutions:
- Check that
libvirtdservice is running:systemctl status libvirtd - Verify your user is in the
libvirtgroup:groups - Check VM logs in Virtual Machine Manager
- Common specific errors:
- "Device or resource busy": Another process is using your GPU
- "No IOMMU found": IOMMU not enabled in BIOS or kernel - Go back to BIOS settings
- "Permission denied": User not in libvirt group or SELinux issue
- "VFIO error": GPU not properly bound to VFIO driver
Problem: Hardware compatibility checks fail
Common BIOS Issues:
- Virtualization disabled: Enable Intel VT-x/AMD-V in BIOS
- IOMMU disabled: Enable Intel VT-d/AMD IOMMU in BIOS
- Legacy BIOS mode: Switch to UEFI mode if available
- Above 4G Decoding disabled: Enable for modern GPU support
- Secure Boot conflicts: Try disabling if you have issues
BIOS Reset: If you made changes and can't boot, most systems have a "Load Defaults" or "Reset to Factory" option in BIOS.
Problem: Windows boots to black screen after installing NVIDIA drivers
Solutions:
- Boot Windows in Safe Mode and uninstall NVIDIA drivers
- Check that Hyper-V features are properly configured in VM XML
- Verify
vendor_idis set in XML configuration - Try older NVIDIA driver version
Problem: No audio in Windows VM
Solutions:
- Verify NVIDIA audio device is passed through
- Check Windows Device Manager for audio device errors
- Try adding emulated audio device in VM configuration
- Install latest audio drivers from NVIDIA
If you encounter issues:
- Check Fedora Documentation: docs.fedoraproject.org
- Fedora Forums: discussion.fedoraproject.org
- GPU Passthrough Community: r/VFIO on Reddit
- Virtualization Issues: Check libvirt documentation
Package Management:
- Packages are layered onto the immutable base system with
rpm-ostree - Reboots are required after installing packages
- Use
rpm-ostree statusto verify package installation
Group Management:
- Group membership changes may require manual intervention
- Always reboot (not just logout/login) after group changes
- Use
getent group libvirtto verify group creation
VM Management:
- System-level libvirt is recommended for GPU passthrough
- Some commands require sudo due to network bridge creation
- User-level virt-manager can connect to system libvirt via
qemu:///system
Storage Considerations:
- Custom storage paths may need explicit ownership changes:
# For user access: sudo chown -R $USER:$USER /mnt/files/VMs/Windows # For system-level access: sudo chown -R qemu:qemu /mnt/files/VMs/Windows
Commands That Require Sudo on Silverblue:
virsh net-start defaultvirsh start "VM_NAME"(when using system-level networks)virt-manager(for system-level VM access)
Commands That Work Without Sudo:
virsh list --all(after proper group setup)virsh dumpxml "VM_NAME"- User-level virt-manager connecting to system libvirt
- This setup disables Secure Boot by default for compatibility
- Only download Windows ISOs from official Microsoft sources
- Keep both your Fedora host and Windows guest updated with security patches
- Consider using separate user accounts for different purposes
- Fedora Silverblue's immutable filesystem provides additional security through system integrity
Before considering your setup complete, verify these items:
- NVIDIA GPU shows in Windows Device Manager without errors
- GPU-Z or similar tool shows correct GPU specifications
- NVIDIA Control Panel opens and functions properly
- Run a GPU benchmark (3DMark, Heaven, etc.) and compare to expected scores
- Test a game or GPU-intensive application
- Monitor temperatures and ensure proper cooling
- VM can restart cleanly multiple times
- Host system remains stable during VM operation
- No errors in
dmesgor VM logs
- Display output works (external monitor or Looking Glass)
- Audio output functions correctly
- Resolution and refresh rate are correct
Congratulations! You now have a powerful Windows 11 virtual machine running with dedicated GPU performance on your secure Fedora Silverblue system. Your setup provides near-native gaming and professional application performance while maintaining the security and reliability of Linux.
Next Steps:
- Install your favorite games and applications
- Consider setting up automatic VM startup if desired
- Join the VFIO community for advanced optimization tips
- Keep both systems updated for security and performance improvements