- Allow arch override via config (arch="${arch:-x86_64}") and set
ARCH_VM accordingly so aarch64 VMs can be selected from configs.
- Re-detect qemu-system-${ARCH_VM} after sourcing the VM config and
fail fast with a clear error if the appropriate QEMU binary is
missing (e.g. qemu-system-aarch64).
- Use virt machine for ARM64 and enable highmem when required
(MACHINE_TYPE="virt,highmem=on,pflash0=rom,pflash1=efivars").
pflash0/pflash1 reference named blockdev nodes instead of -drive if
using OVMF-style pflash on x86.
- Set CPU selection for ARM64 to "max" when available; fall back to
TCG accel when cross-arch emulation is required (ensures guests
boot on non-ARM hosts).
- Omit x86-only machine options (smm, vmport) for aarch64 builds to
avoid passing unsupported flags to QEMU.
- Add AAVMF/ARM64 firmware search paths and keep OVMF logic for
x86_64 (preserve existing secureboot behaviour for x86 guests).
- Use virtio-gpu-pci for ARM64 (no VGA/virtio-vga on ARM) and add a
ramfb device to provide an early UEFI framebuffer on ARM64 UEFI
boot.
- Use virtio-scsi for CD-ROM on ARM64 (virt has no IDE controller) and
set CD-ROM bootindex=1 so ISO boots before disk when provided.
Set disk bootindex=2 when an ISO is present so disk remains second.
- Implement EFI boot configuration for ARM64 using -blockdev with
named nodes (pflash handled via blockdev) rather than the x86
-drive/secure global approach which is SMM/x86-specific.
- Use the ARM-compatible TPM device (tpm-tis-device) for aarch64
instead of the x86 tpm-tis device where appropriate.
- Fix EFI_CODE condition bug by using -z instead of -n when checking
for empty variables (pre-existing bug surfaced while testing ARM64).
IMPACT:
- Enables running aarch64 guests with proper firmware, machine type,
devices and boot order on both native ARM hosts and non-ARM hosts
(via TCG emulation).
- Maintainers should note the different pflash/blockdev handling and
that -global secure pflash settings used for x86 must NOT be used
for ARM64 virt machines.
Signed-off-by: Martin Wimpress <martin@wimpress.org>
|
||
|---|---|---|
| .github | ||
| build-docs@c5907eae9c | ||
| debian | ||
| docs | ||
| .editorconfig | ||
| .envrc | ||
| .gitignore | ||
| .gitmodules | ||
| AGENTS.md | ||
| CODE_OF_CONDUCT.md | ||
| CONTRIBUTING.md | ||
| LICENSE | ||
| README.md | ||
| SECURITY.md | ||
| chunkcheck | ||
| devshell.nix | ||
| flake.lock | ||
| flake.nix | ||
| package.nix | ||
| quickemu | ||
| quickget | ||
| quickreport | ||
README.md
Quickemu
Quickly create and run optimised Windows, macOS and Linux virtual machines:
Made with 💝 for
& ![]()
Introduction
Quickemu is a wrapper for the excellent QEMU that automatically "does the right thing" when creating virtual machines. No requirement for exhaustive configuration options. You decide what operating system you want to run and Quickemu takes care of the rest 🤖
quickgetautomatically downloads the upstream OS and creates the configuration 📀quickemuenumerates your hardware and launches the virtual machine with the optimum configuration best suited to your computer ⚡️
The original objective of the project was to enable quick testing of Linux distributions where the virtual machines and their configuration can be stored anywhere (such as external USB storage or your home directory) and no elevated permissions are required to run the virtual machines.
Today, Quickemu includes comprehensive support for macOS, Windows, most of the BSDs, novel non-Linux operating systems such as FreeDOS, Haiku, KolibriOS, OpenIndiana, ReactOS, and more.
Features
- Host support for Linux and macOS
- macOS Sequoia, Sonoma, Ventura, Monterey, Big Sur, Catalina & Mojave
- Windows 10 and 11 including TPM 2.0
- Windows Server 2022 2019 2016
- Ubuntu and all the official Ubuntu flavours
- Nearly 1000 operating system editions are supported!
- Full SPICE support including host/guest clipboard sharing
- VirtIO-webdavd file sharing for Linux and Windows guests
- VirtIO-9p file sharing for Linux and macOS guests
- QEMU Guest Agent support; provides access to a system-level agent via standard QMP commands
- Samba file sharing for Linux, macOS and Windows guests (if
smbdis installed on the host) - VirGL acceleration
- USB device pass-through
- Smartcard pass-through
- Automatic SSH port forwarding to guests
- Network port forwarding
- Full duplex audio
- Braille support
- EFI (with or without SecureBoot) and Legacy BIOS boot
As featured on Linux Matters podcast!
The presenters of Linux Matters 🐧🎙️ are the creators of each of the principal Quickemu projects. We discussed Quickemu's 2024 reboot in Episode 30 - Quickemu Rising From the Bashes.
Quick start
Once Quickemu is installed, there are two simple steps to create and run a virtual machine:
quickgetautomatically downloads the ISO image for the operating system you want to run and creates a configuration file for the virtual machine.
quickget nixos unstable minimal
quickemustarts the virtual machine using the configuration file created byquickget.
quickemu --vm nixos-unstable-minimal.conf
Execute quickget (with no arguments) to see a list of all the supported operating systems.
Demo
Documentation
The wiki describes how to get up and running with Quickemu and also covers more advanced configuration and usage.
