How To Install Incus on Manjaro

Linux containerization has evolved fast. If you have been relying on LXD for system containers, you have probably heard the news — the Linux Containers community forked LXD into a new, community-driven project called Incus. It is cleaner, actively maintained, and for Manjaro users, surprisingly easy to get running. This guide walks you through everything: what Incus is, why it matters on Manjaro, and exactly how to install, configure, and launch your first container from scratch.
What Is Incus?
Incus is a next-generation system container and virtual machine manager built on top of LXC (Linux Containers). It was born in October 2023 when Canonical assumed full ownership of LXD, prompting the original Linux Containers team to fork the project independently. The result is Incus: a community-governed, open-source platform hosted under the linuxcontainers.org umbrella alongside LXC, LXCFS, and Distrobuilder.
Unlike Docker, which manages application containers, Incus manages system containers — full OS-level environments that behave like lightweight virtual machines but share the host kernel. It also supports genuine virtual machines using QEMU. Think of it as a middle ground between Docker’s simplicity and full hypervisor complexity like KVM or VirtualBox.
As of early 2025, Incus has added OCI application container support, meaning you can now run Docker images natively inside Incus. It also ships with clustered LVM storage backends, cross-cluster OVN networking, and automated cluster rebalancing. It is no longer just a fork — it is a mature platform in its own right.
Why Install Incus on Manjaro?
Manjaro Linux is an Arch-based, rolling-release distribution. That matters here for one key reason: Incus is available in the official Arch Linux repositories, which Manjaro inherits directly. You do not need to add a PPA, a Copr repo, or any third-party source. A single pacman command is enough.
The rolling-release model also means you will always have access to the latest stable Incus version as soon as it is packaged upstream — no waiting for point releases or LTS cycles. And if you ever need the bleeding-edge development build, Manjaro’s deep AUR (Arch User Repository) integration makes that equally accessible. For anyone serious about Linux container management, Manjaro is one of the most friction-free environments to run Incus on.
Incus vs. LXD: What Is the Difference?
Both tools are rooted in the same codebase. The split is primarily about governance and long-term direction.
| Feature | Incus | LXD |
|---|---|---|
| Maintainer | Linux Containers (community) | Canonical |
| Arch/Manjaro Package | Official repo via pacman |
Not officially packaged |
| OCI Container Support | Yes (since v6.6) | Limited |
| Migration Tool | lxd-to-incus included |
N/A |
| VM Support | Yes (QEMU) | Yes |
| License | Apache 2.0 | Apache 2.0 |
Incus includes a lxd-to-incus migration utility that supports LXD versions 4.0 through 5.18, making the transition seamless for existing LXD users. If you are starting fresh on Manjaro, Incus is simply the right tool to start with.
Prerequisites and System Requirements
Before running any installation command, make sure your system is properly prepared. Skipping this section is the single most common reason installations fail.
You will need:
- A working Manjaro Linux installation (KDE, GNOME, XFCE, or any edition)
- Linux kernel 5.4 or newer for full cgroup v2 support — verify with
uname -r sudoor root access- An active internet connection
base-develandgitinstalled (required for AUR builds)- At least 2 GB of RAM; 4 GB or more recommended if you plan to run VMs
- 10+ GB of free disk space for container image storage
- A 64-bit CPU with Intel VT-x or AMD-V enabled in BIOS (only required for VM support)
If you are unsure about virtualization support, run the following command to check:
grep -E 'vmx|svm' /proc/cpuinfo
Any output confirms that virtualization is supported by your CPU.
Method 1: Install Incus via Pacman (Recommended)
This is the cleanest, most reliable method for Manjaro users. The incus package lives in the official Arch community repository and is fully maintained upstream.
Step 1: Update Your System
Always start with a full system update on a rolling-release distribution. Outdated dependencies are a leading cause of post-install breakage.
sudo pacman -Syu
Wait for the update to complete, then reboot if the kernel was updated before proceeding.
Step 2: Install the Incus Package
sudo pacman -S incus
Pacman will automatically pull in all required dependencies — including lxc, dnsmasq, iproute2, squashfs-tools, and nftables — without any manual intervention. Accept all prompts and let the installation finish.
Step 3: Install Virtual Machine Support (Optional)
If you only need system containers, skip this step. If you plan to run full virtual machines inside Incus, install the QEMU stack:
sudo pacman -S qemu-desktop edk2-ovmf virtiofsd
qemu-desktop— provides the core QEMU hypervisoredk2-ovmf— supplies UEFI firmware for virtual machinesvirtiofsd— enables shared filesystem access between host and guest VMs
Step 4: Verify the Installation
incus --version
You should see a version string such as 6.x.x. If the command is not found, verify the package installed correctly with pacman -Qi incus.
Method 2: Install Incus via the AUR (Advanced Build)
The AUR method is for users who want the latest git-based development build, or when the official repo has not yet packaged a very recent release. Use this method with awareness — AUR packages are community-maintained and not officially supported by Manjaro.
Using yay (CLI Method)
If yay is not already installed, set it up first:
sudo pacman -S --needed base-devel git
git clone https://aur.archlinux.org/yay.git
cd yay && makepkg -si
Then install Incus from the AUR:
yay -S incus-git
The build process will compile Incus from source. This takes several minutes depending on your hardware specifications.
Using Pamac (GUI Method)
Pamac is Manjaro’s graphical package manager and makes AUR installation straightforward:
- Open Pamac (Add/Remove Software)
- Go to Settings → Third Party → Enable AUR support
- Search for
incus-git - Click Install and follow the prompts
Verify the AUR Installation
pacman -Qi incus-git
This confirms the package version, install date, and that all dependencies resolved successfully.
Configure subUID and subGID for Unprivileged Containers
This step is frequently overlooked by beginners, yet it is critical for Incus to function correctly. Incus launches unprivileged containers by default — containers that run without root privileges inside the namespace. To do this safely, the Linux kernel needs a valid UID and GID mapping range assigned to the root user.
First, check whether entries already exist:
cat /etc/subuid
cat /etc/subgid
If you see root:1000000:65536 (or similar) in both files, you are all set. If not — or if the files are empty — add the entries manually:
echo "root:1000000:65536" | sudo tee -a /etc/subuid
echo "root:1000000:65536" | sudo tee -a /etc/subgid
The format is username:start_uid:count. The range 1000000:65536 provides 65,536 unique UIDs and GIDs — the minimum recommended for secure container isolation. Without this configuration, Incus will either refuse to launch containers or produce confusing namespace errors.
Enable and Start the Incus Service
Incus integrates with systemd and uses socket activation by default — meaning the daemon only starts when a client actually connects to it, keeping idle resource usage minimal.
Enable and start the socket:
sudo systemctl enable --now incus.socket
Alternatively, if you prefer the daemon to run continuously in the background:
sudo systemctl enable --now incus.service
If you installed VM support packages, also enable the VM startup service:
sudo systemctl enable --now incus-startup.service
Verify everything is running cleanly:
sudo systemctl status incus.socket
Look for active (listening) in the output. A failed state at this point typically indicates a missing dependency or a subUID/subGID misconfiguration from the previous step.
Add Your User to the Incus Groups
Running every incus command with sudo is inconvenient and unnecessary. Incus provides two dedicated groups for access control:
incus— for standard container management tasksincus-admin— for administrative operations like initialization and daemon configuration
Add your user to both groups:
sudo usermod -aG incus $USER
sudo usermod -aG incus-admin $USER
Apply group changes immediately without logging out:
newgrp incus
Or log out and back in to ensure both groups are fully active in your session. After this, all incus commands work without sudo.
Initialize Incus with incus admin init
Before launching a single container, Incus needs to be initialized. This one-time setup configures your storage backend and network bridge. Run the interactive wizard:
sudo incus admin init
You will be walked through a series of prompts. Here is how to answer them for a standard single-node setup:
| Prompt | Recommended Answer |
|---|---|
| Use clustering? | No |
| New storage pool name | default |
| Storage backend | dir (simple) or btrfs / zfs for advanced |
| Create a new storage pool? | Yes |
| Use existing bridge? | No |
| Create a new bridge | incusbr0 |
| IPv4 / IPv6 addressing | auto |
Storage backend quick guide:
- dir — simple directory-based storage; no special setup required; best for beginners
- btrfs — supports copy-on-write snapshots efficiently; great for development environments
- zfs — best performance and snapshot support; requires
zfs-utilsinstalled first - lvm — block-level storage; suited for production use with raw disk performance needs
For scripted or automated deployments, skip the wizard entirely:
sudo incus admin init --minimal
This uses safe defaults: dir storage backend, incusbr0 bridge, no clustering. Confirm that initialization was successful:
incus info
The output should display your storage pool, network bridge, and full server environment details.
Creating and Managing Your First Container
Everything is configured. Now comes the rewarding part.
Launch a Container
incus launch images:ubuntu/22.04 my-first-container
Incus contacts the images: remote at linuxcontainers.org, downloads the Ubuntu 22.04 image, creates the container, and starts it — all in one command. The first launch takes a moment for the image download; subsequent launches using the same base image are nearly instant thanks to local image caching.
Access the Container Shell
incus exec my-first-container -- bash
You are now inside a fully isolated Ubuntu environment running on your Manjaro host. Type exit to leave the container and return to your host shell.
List Running Containers
incus list
Launch Additional Containers
incus launch images:debian/12 debian-test
incus launch images:alpine/3.19 alpine-test
The second and third launches are noticeably faster since Incus caches downloaded images locally.
Create a Container Without Autostarting It
incus create images:ubuntu/22.04 staging-box -c boot.autostart=true
The -c boot.autostart=true profile flag ensures this container starts automatically whenever your Manjaro system boots.
Stop and Delete a Container
incus stop my-first-container
incus delete my-first-container
Essential Incus Command Reference
| Command | What It Does |
|---|---|
incus list |
List all containers and VMs |
incus launch images:<distro> <name> |
Create and start a container |
incus exec <name> -- bash |
Open a shell inside a container |
incus stop <name> |
Gracefully stop a container |
incus start <name> |
Start a stopped container |
incus restart <name> |
Restart a running container |
incus delete <name> |
Delete a container permanently |
incus snapshot <name> snap1 |
Create a container snapshot |
incus copy <source> <dest> |
Clone a container |
incus info |
Show server and daemon details |
incus remote list |
View available image remotes |
incus image list images: |
Browse all available images |
incus profile list |
List configuration profiles |
For VM-specific operations, add the --vm flag to the launch command:
incus launch images:ubuntu/22.04 my-vm --vm
Full command documentation is always available via incus help or man incus.
Troubleshooting Common Issues
Even on a clean Manjaro setup, a few issues come up regularly. Here is how to resolve the most common ones.
Error: Failed to Connect to the Daemon
The Incus service is not running. Start it with:
sudo systemctl start incus.socket
Then verify its status with sudo systemctl status incus.socket.
Error: No subuid/subgid Entries for Root
Missing UID/GID mapping. Re-add the entries to both /etc/subuid and /etc/subgid as shown earlier, then restart the service:
sudo systemctl restart incus
incus Command Not Found After AUR Install
The Go binary path is not in your shell’s PATH. Add it temporarily:
export PATH=$PATH:$(go env GOPATH)/bin
Add this line to your ~/.bashrc or ~/.zshrc for a permanent fix.
Container Has No Network Access
The incusbr0 bridge was not created properly during initialization. Re-run the wizard:
sudo incus admin init
Confirm a new bridge (incusbr0) is created and that dnsmasq is active.
KVM/QEMU Errors When Launching Virtual Machines
Either virtualization is not enabled in BIOS, or QEMU packages are missing. Enable Intel VT-x or AMD-V in your BIOS settings, then install the required packages:
sudo pacman -S qemu-desktop edk2-ovmf virtiofsd
Snapshot or Storage Errors
If using btrfs or zfs, make sure the respective kernel modules are loaded:
sudo modprobe btrfs
sudo modprobe zfs
For ZFS, install zfs-utils via pacman before attempting to use the ZFS storage backend.
Congratulations! You have successfully installed Incus. Thanks for using this tutorial for installing Incus container and virtual machine manager on Manjaro Linux system. For additional help or useful information, we recommend you check the official Incus website.