How to Use GNOME Boxes for Quick VM Setup on Fedora

Install GNOME Boxes on Fedora using dnf to quickly set up and manage virtual machines via a graphical interface.

You need a VM but Boxes won't start

You are testing a new service or need to run a Windows-only utility. You want a virtual machine without wrestling with XML files or complex network bridges. You install GNOME Boxes, click the plus button, and the window hangs or throws an error about a missing connection. The issue is rarely the ISO. It is almost always the underlying libvirt daemon or the network configuration that Boxes relies on but hides from you.

What's actually happening

GNOME Boxes is not a standalone hypervisor. It is a graphical frontend for libvirt and QEMU. When you click "New", Boxes talks to the libvirtd service. That service manages the virtualization stack, including network bridges, storage pools, and the QEMU processes that run the guest.

If libvirtd is stopped, Boxes cannot create a VM. If the default network bridge is not active, the VM will have no internet access. Boxes also stores its disk images in your home directory, which means SELinux contexts and disk space matter. The tool abstracts these details to keep the interface simple, but the abstraction breaks if the foundation is missing.

Installation and configuration

Install GNOME Boxes along with the libvirt components. The package libvirt-daemon-config-network is essential. It provides the configuration file for the default NAT network. Without it, the bridge does not exist, and VMs cannot reach the internet. The command below also installs virt-manager. Boxes does not require it, but having virt-manager available helps when Boxes lacks a feature you need or when you need to inspect a VM's XML configuration.

sudo dnf install gnome-boxes virt-manager libvirt-daemon-config-network
# gnome-boxes provides the GUI frontend.
# libvirt-daemon-config-network supplies the default NAT network definition.
# virt-manager offers advanced controls if Boxes is insufficient.

Start the libvirt daemon. Boxes communicates with libvirtd over a Unix socket. The daemon must be running and enabled to persist across reboots.

sudo systemctl enable --now libvirtd
# Enable starts the service immediately and registers it for boot.
# libvirtd manages the QEMU processes and network bridges.

Activate the default network. Boxes expects a network named default to exist and be active. This network uses NAT, allowing VMs to access the internet while keeping them isolated from the local network. Start the network and configure it to autostart so VMs work after a reboot.

sudo virsh net-start default
sudo virsh net-autostart default
# Start the NAT bridge immediately for current sessions.
# Autostart ensures the bridge comes up on boot so VMs retain connectivity.

Verify the setup

Check that the daemon is running and the network is active. The virsh net-list command shows the state of all libvirt networks. You should see default listed as active and autostart.

systemctl is-active libvirtd
virsh net-list --all
# is-active returns 'active' if the daemon is running.
# net-list displays all networks; look for 'default' with state 'active'.

Verify the storage location. Boxes stores disk images in ~/.local/share/gnome-boxes/images/. These are qcow2 files that expand as you write data. Check the directory to confirm Boxes can write there.

ls -lh ~/.local/share/gnome-boxes/images/
# List existing images to verify permissions and disk usage.
# qcow2 files grow dynamically; monitor size on small partitions.

If the directory is empty, create a test VM. Insert an ISO or select a remote OS. Boxes will download the image and create a qcow2 file. Once the VM boots, the setup is complete.

Reboot before you debug. Half the time the symptom is gone.

Common pitfalls and errors

Boxes fails silently or shows generic errors when the underlying stack has issues. Check these common problems before reinstalling.

Permission denied on disk image

If you see an error like Could not open '/home/user/.local/share/gnome-boxes/images/test.qcow2': Permission denied, the issue is often SELinux. Boxes expects specific security contexts in the home directory. If you moved files manually or restored from a backup, the contexts may be wrong.

restorecon -Rv ~/.local/share/gnome-boxes/
# Restore default SELinux contexts recursively.
# This fixes denials caused by missing or incorrect file labels.

Failed to start domain

The error internal error: process exited while connecting to monitor usually indicates a problem with CPU flags or nested virtualization. If you are running Fedora inside a VM and trying to run Boxes, the host may not expose the required CPU extensions. Check the libvirt logs for details.

journalctl -xeu libvirtd
# View recent libvirt logs with explanatory text.
# Look for qemu errors or CPU flag mismatches near the failure time.

Network bridge missing

If VMs cannot reach the internet, the default network may be inactive. This happens if libvirt-daemon-config-network was not installed or if the network was stopped manually.

sudo virsh net-info default
# Show details of the default network including active state.
# If state is 'inactive', run virsh net-start default.

Disk space exhaustion

Boxes allocates disk space dynamically. A VM configured with 50GB can fill a 20GB home partition if the guest writes enough data. Monitor usage regularly.

du -sh ~/.local/share/gnome-boxes/images/
# Summarize disk usage of the Boxes image directory.
# Delete unused qcow2 files to reclaim space.

Run journalctl -xeu libvirtd first. Read the actual error before guessing.

When to use Boxes versus other tools

Fedora provides multiple virtualization interfaces. Choose the tool that matches your workflow.

Use GNOME Boxes when you want a one-click VM for testing or running a guest OS with minimal configuration.

Use virt-manager when you need to configure bridged networking, attach multiple disks, or manage VMs on a remote host.

Use virt-install when you are scripting VM creation or need precise control over CPU pinning and memory ballooning.

Use Cockpit when you are managing servers and want a web-based interface that integrates with firewalld and storage management.

Trust the package manager. Manual file edits drift, snapshots stay.

Where to go next