Install KVM on Arch Linux

To install KVM on Arch Linux, install the following packages:

sudo pacman -S qemu virt-manager dnsmasq dmidecode vde2

Check if the qemu package added the kvm group.

$ getent group | grep kvm
kvm:x:992:

Add your user to the kvm group with sudo usermod -aG kvm $USER.

Then, reboot your machine. After that, start the libvirtd service with sudo systemctl start libvirtd.service.

Run sudo systemctl enable libvirtd.service to enable the service from the next boot.


If you check for the service status with sudo systemctl status libvirtd.service. There probably will be the following error:

May 08 16:34:18 transang libvirtd[3528]: /usr/bin/ebtables not available, firewall backend will not function: No such file or directory
May 08 16:34:18 transang libvirtd[3528]: internal error: Failed to initialize a valid firewall backend

You should not worry because ebtables is optional. If you want to suppress this warning, install the package with sudo pacman -S ebtables. However, because it conflicts with iptables-nft in the iptables package, it will ask to remove the iptables package.

:: iptables-nft and iptables are in conflict. Remove iptables? [y/N]

If after the installation, your virtual device does not start, try starting the device from the command line.

From AVD Manager, right-click to the device, and choose "View Details" to get and copy the device name.

Boot the device with the following command:

Android/Sdk/emulator/emulator -avd Pixel_4_XL_API_29

If there are warnings, they will be shown in the command line for debugging/googling.

emulator: Android emulator version 30.6.5.0 (build_id 7324830) (CL:N/A)
handleCpuAcceleration: feature check for hvf
Fontconfig warning: "/usr/share/fontconfig/conf.avail/05-reset-dirs-sample.conf", line 6: unknown element "reset-dirs"
cannot add library /home/transang/Android/Sdk/emulator/qemu/linux-x86_64/lib64/vulkan/libvulkan.so: failed
added library /home/transang/Android/Sdk/emulator/lib64/vulkan/libvulkan.so
cannot add library /home/transang/Android/Sdk/emulator/lib64/vulkan/libvulkan.so.1: full
emulator: INFO: GrpcServices.cpp:315: Started GRPC server at 127.0.0.1:8554, security: Local
emulator: INFO: EmulatorAdvertisement.cpp:93: Advertising in: /run/user/1000/avd/running/pid_2340.ini
emulator: ERROR: AdbHostServer.cpp:102: Unable to connect to adb daemon on port: 5037
emulator: emulator window was out of view and was recentered

emulator: INFO: boot completed
emulator: INFO: boot time 23442 ms
emulator: Increasing screen off timeout, logcat buffer size to 2M.
emulator: ERROR: AdbHostServer.cpp:102: Unable to connect to adb daemon on port: 5037
emulator: Revoking microphone permissions for Google App.
deleteSnapshot: for default_boot
KVM: injection failed, MSI lost (Operation not permitted)

Even though there are the above warnings, the emulator works fine on my machine.


Mostly, you will want the adb command line while developing. If the command is not available, you can install it with sudo pacman -S android-tools.

There are several Vulkan-related packages that might be helpful.

sudo pacman -S nvidia-utils vulkan-icd-loader vulkan-tools
vulkaninfo