Fedora Silverblue’s immutable filesystem offers incredible stability, but it changes how you install and configure software.

Setting up KVM virtualization is not as straightforward as it is on a traditional Fedora Workstation installation; it requires a few extra steps regarding group permissions and sandboxing.

In this post, I will walk you through the process I used to get KVM running smoothly and how to fix the common “gotchas” encountered on Silverblue.

Prerequisites

Before installing anything, verify that your CPU supports hardware virtualization:

grep -E 'vmx|svm' /proc/cpuinfo

vmx indicates Intel VT-x support, svm indicates AMD-V.

If you see output containing either flag, you are ready to proceed. If the command returns nothing, you may need to enable virtualization in your system’s BIOS/UEFI settings.

Next, check whether the KVM kernel modules are already loaded:

lsmod | grep kvm

You should see either kvm_intel or kvm_amd in the output.

Installing Core Virtualization Packages

On Silverblue, packages are installed as layers on top of the immutable OS using rpm-ostree:

rpm-ostree install qemu-kvm libvirt-daemon-kvm libvirt-daemon-config-network virt-install

Because these are layered system packages, a reboot is required for the changes to take effect:

systemctl reboot

After rebooting, enable the libvirtd service and add your user to the libvirt group:

sudo systemctl enable --now libvirtd
sudo usermod -aG libvirt $(whoami)

Installing virt-manager and virt-viewer

You have two options for the management GUI: Flatpak or rpm-ostree layering. On Silverblue, the Flatpak approach is generally preferred because it avoids adding unnecessary packages to the base OS layer.

flatpak install flathub org.virt_manager.virt-manager org.virt_manager.virt-viewer

Once installed, open virt-manager and add a connection:

  • File -> Add Connection
    • Hypervisor: QEMU/KVM
    • Check Autoconnect

Troubleshooting

virt-manager keeps asking for the root password

If virt-manager prompts for the root password when connecting to qemu:///system, your user was probably not successfully added in the libvirt group. Verify your current groups with:

groups $USER

On Silverblue, this is a known quirk: system groups are stored in the read-only /usr/lib/group, while usermod attempts to modify /etc/group. If the libvirt group definition does not yet exist in /etc/group, the usermod command silently fails.

The fix is to copy the libvirt group entry from /usr/lib/group to /etc/group, then re-run usermod:

grep -E '^libvirt:' /usr/lib/group | sudo tee -a /etc/group
sudo usermod -aG libvirt $USER

You must log out and back in for the group changes to take effect. Now virt-manager should connect without prompting for a password.

Permission denied on ISO files

ISO error

If you get permission errors when attaching an ISO to a virtual machine, it is because the libvirt user doesn’t have access to your home directory. The simplest fix is to move the ISO into the default libvirt images directory:

sudo mv /path/to/iso /var/lib/libvirt/images/

USB device passthrough does not work with Flatpak

USB passthrough error

Because Flatpak applications are sandboxed, they cannot access USB hardware directly. If you need USB passthrough (for example, to use a webcam), you should install virt-viewer via rpm-ostree instead:

flatpak uninstall org.virt_manager.virt-viewer
rpm-ostree install virt-viewer

In my setup, I kept virt-manager as a Flatpak to keep the OS clean, and layered virt-viewer via rpm-ostree to enable full hardware access.