This guide explains what is Quickemu and how to create and run Linux, macOS and Windows desktop virtual machines with Quickemu in Linux.
Table of Contents
What is Quickemu?
Quickemu is a command line program to quickly create and run optimized Linux, macOS and Windows desktop virtual machines.
You don't need sudo or root permissions to run virtual machines. You can simply test any Linux, macOS or Windows VMs as a normal user and store the virtual machine configurations in your HOME directory or USB disk.
The Quickemu application consists of two CLI tools namely quickemu and quickget.
The quickget CLI tool downloads the latest ISO image for your OS. By default, the downloaded images are saved in your HOME directory. You can change it to other location for example external USB drive.
And, the Quickemu CLI tool uses QEMU under the hood to create and manage virtual machines. So the VMs are highly optimized and should work out of the box without any additional configuration.
Quickemu Features
Quickemu ships with a lot of features out of the box.
- Over 300 operating systems are supported.
- Supports both EFI (with or without SecureBoot) and Legacy BIOS boot.
- Full SPICE support with host/guest clipboard sharing.
- Enables file sharing for Linux and Windows guests using VirtIO-webdavd.
- Enables file sharing for Linux and macOS guests using VirtIO-9p.
- Enables Samba file sharing between Linux, macOS and Windows guests.
- Configures automatic SSH port-forwarding for guests.
- Network port forwarding.
- Full duplex audio support.
- Smartcard, USB device pass-through.
- VirGL acceleration.
- Braille support.
- Free and Opensource.
Install Quickemu in Linux
Before installing Quickemu, make sure your system's processor supports hardware virtualization(VT-X). We have documented a few different ways to identify whether a Linux system supports Virtualization in the guide given below.
How To Find If A CPU Supports Virtualization Technology (VT)
If your system supports hardware virtualization, continue the following steps.
Quickemu is a new project and has been packaged only for a few operating systems at the moment.
Arch Linux:
Quickemu is available in AUR. If you're on Arch Linux and its variants like EndeavourOS, Manjaro Linux, you can install Quickemu using Paru or Yay helpers.
$ paru -S quickemu
Or,
$ yay -S quickemu
NixOS:
To install Quickemu in NixOS, run:
$ nix-env -i quickemu
Ubuntu:
The developer of Quickemu has created a dedicated PPA for Ubuntu and its derivatives such as Elementary OS, Linux Mint and Pop!_OS.
To install Quickemu in Ubuntu and its derivatives, run the following commands one by one.
$ sudo apt-add-repository ppa:flexiondotorg/quickemu
$ sudo apt update
$ sudo apt install quickemu
For other Linux distributions, refer to the project's GitHub repository given at the end.
Run Linux, MacOS and Windows Virtual Machines with Quickemu
Creating and managing VMs with Quickemu is just two step process.
Download the OS image, for example Alpine Linux, using quickget CLI:
$ quickget alpine latest
You can also download a specific version of the Alpine like below:
$ quickget alpine 3.15
It will create a configuration file for the chosen OS. It will be named based on the selected OS.
alpine-latest/alpin 100%[===================>] 47.00M 3.52MB/s in 14s Checking alpine-latest/alpine-virt-3.16.0-x86_64.iso with sha256sum... Good! Making alpine-latest.conf To start your Alpine Linux virtual machine run: quickemu --vm alpine-latest.conf
Now start your Alpine Linux virtual machine using command:
$ quickemu --vm alpine-latest.conf
This command will create and launch the Alpine Linux virtual machine via Spicy GTK client.
Please note that it is just a live system. You still need to install the OS. You can now start the Alpine OS installation as usual.
Each VM and its associated files(ISO, Qcow2, other configuration files) are stored in a separate directory in your HOME directory. For instance, if you created Alpine VM using the Alpine latest image, a new directory called "alpine-latest" will be created and the VM's related files will be kept in this directory.
$ ls alpine-latest alpine-latest-agent.sock alpine-latest.pid alpine-latest.sh disk.qcow2 alpine-latest.log alpine-latest.ports alpine-virt-3.16.0-x86_64.iso OVMF_VARS.fd
As you see in the above output, my Alpine Linux VM's ISO file, Qcow2 disk file and other config files such as .ports
, .fd
, .sock
etc., are saved inside ~/alpine-latest
directory.
Accessing Virtual Machines from Host via Terminal
Whenever you launch a VM, Quickemu will display the following useful information on your host system's terminal.
Quickemu 3.15 using /usr/bin/qemu-system-x86_64 v6.2.0 - Host: Ubuntu 22.04 LTS running Linux 5.15 (ubuntu2204) - CPU: 11th Gen Intel(R) Core(TM) i3-1115G4 @ 3.00GHz - CPU VM: 1 Socket(s), 1 Core(s), 1 Thread(s), 4G RAM - BOOT: EFI (Linux), OVMF (/usr/share/OVMF/OVMF_CODE_4M.fd), SecureBoot (off). - Disk: alpine-latest/disk.qcow2 (16G) Looks unused, booting from alpine-latest/alpine-virt-3.16.0-x86_64.iso - Boot ISO: alpine-latest/alpine-virt-3.16.0-x86_64.iso - Display: SPICE, qxl-vga, GL (on), VirGL (off) - ssh: On host: ssh user@localhost -p 22220 - SPICE: On host: spicy --title "alpine-latest" --port 5930 --spice-shared-dir /home/ostechnix/Public - WebDAV: On guest: dav://localhost:9843/ - 9P: On guest: sudo mount -t 9p -o trans=virtio,version=9p2000.L,msize=104857600 Public-ostechnix ~/Public - Process: Starting alpine-latest.conf as alpine-latest (11272)
As you see, It displays the configuration details of both host and VM including the other details such as how to access the VM via SSH, access the shared folder via SPICE client etc. You can use these details to access the VM from your host system.
For example, if the SSH service is configured with port 22220 in your VM, you can access the VM from your hosts system like below.
$ ssh -P 22220 vm-user@localhost
You can check the .ports
file in the VM directory to find what SSH and SPICE ports the VM is connected to.
$ cat alpine-latest/alpine-latest.ports ssh,22220 spice,5930
This can be useful when you want to start the VMs in headless mode.
Create VMs with Custom Specification (CPU Core, Disk and Memory)
By default, Quickemu will allocate the number of CPUs cores, and the size of the disk and RAM based on your host computer's specification. You can override this default behavior by using the following parameters.
cpu_cores="2"
- Specify the number of CPU cores(E.g. 2 cores) allocated to the VM.ram="4G"
- Specify the RAM capacity(E.g. 4 GB) to allocate to the VM.disk_size="20G"
- Specify the disk size(E.g. 20 GB) to allocate to the VM.
To create a VM with 2 CPU cores, 4 GB RAM and 20 GB hdd, edit your VM configuration file:
$ nano alpine-latest.conf
Add the following lines:
cpu_cores="2" ram="4G" disk_size="20G"
Now, start the VM using the updated config file:
$ quickemu --vm alpine-latest.conf
Create Desktop Shortcut for VMs
Instead of typing the whole command, you can create a desktop shortcut for your VM like below.
$ quickemu --vm alpine-latest.conf --shortcut
This command will create shortcut for the Alpine VM in ~/.local/share/applications/
location.
$ ls ~/.local/share/applications/ alpine-latest.desktop
A menu entry for the VM is also created for the VM. From now on, you can launch the VM from the Dash or menu.
Start VMs with SPICE Client
Launching VMs with SPICE protocol will offer you the following benefits.
- Share clipboard between host and guest.
- Share files between host and guest.
- Enable USB pass-through.
Make sure the spicy
client is installed and run the following command to
$ quickemu --vm alpine-latest.conf --display spice
Use Existing ISO Images
Sometimes, you might have already downloaded the ISO files. In that case, you don't need to use "quickget" command to download the ISO file. Instead, just edit your VM configuration file:
$ nano alpine-latest.conf
Update the correct ISO file path (E.g. /home/ostechnix/Downloads/) like below:
[...] iso="/home/ostechnix/Downloads/alpine-virt-3.16.0-x86_64.iso"
Now Quickemu will use the ISO file saved in the "Downloads" directory.
Start VMs in Headless Mode
Make sure the spicy client is installed.
Run the following command to start the VM with SPICE, but no display attached:
$ quickemu --vm alpine-latest.conf --display none
Since the VM is started in headless mode, you can access it via SSH only.
Assuming the SSH service is configured with port 22220 in your VM, you can access the VM from your hosts system like below.
$ ssh -P 22220 vm-user@localhost
You can check the .ports
file in the VM directory to lookup what SSH and SPICE ports the VM is connected to.
$ cat alpine-latest/alpine-latest.ports ssh,22220 spice,5930
Configure Networking
Enable Bridge Networking
To allow your VM to a preconfigured network bridge, add the following line to the VM configuration:
bridge="br0"
Port Forwarding
To allow port forwarding, add the following line to VM configuration:
port_forwards=("22:2200" "8800:80"
Here,
- 22:2200 - The port 22 on your host system is forwarded to the port 2200 on your guest system.
- 8800:80 - The port 8800 on your host system is forwarded to the port 80 on your guest system.
Quickemu allows you to do a few other customization. For more details, refer the project's GitHub page given at the end.
Delete Virtual Machine
You can delete a VM if it is no longer required using command:
$ quickemu --vm alpine-latest.conf --delete-vm
This command will the entire virtual machine along with its configuration.
Quickgui - A Graphical Front-end to Quickemu
Quickemu and quickget are command line programs. Not everyone is fan of command line mode. For those who prefer GUI over CLI, take a look at Quickgui, a graphical frontend for Quickemu to create, run and manage virtual machines. Refer the following guide for more details.
Quickgui - A GUI For Quickemu To Create And Run Virtual Machines
Display Help
To view Quickemu help, run:
$ quickemu --help Usage quickemu --vm ubuntu.conf You can also pass optional parameters --braille : Enable braille support. Requires SDL. --delete-disk : Delete the disk image and EFI variables --delete-vm : Delete the entire VM and it's configuration --display : Select display backend. 'sdl' (default), 'gtk', 'none', or 'spice' --fullscreen : Starts VM in full screen mode (Ctl+Alt+f to exit) --ignore-msrs-always : Configure KVM to always ignore unhandled machine-specific registers --screen <screen> : Use specified screen to determine the window size. --shortcut : Create a desktop shortcut --snapshot apply <tag> : Apply/restore a snapshot. --snapshot create <tag> : Create a snapshot. --snapshot delete <tag> : Delete a snapshot. --snapshot info : Show disk/snapshot info. --status-quo : Do not commit any changes to disk/snapshot. --version : Print version
Conclusion
Quickemu provides an easy way to quickly deploy and run Windows, macOS and Linux desktop virtual machines.
One distinct feature of Quickemu, we can download the ISO image directly using the Quickget CLI. I don't think if this feature is included in the other virtualization applications and hypervisors.
Also Quickemu usage is very easy! If you're looking for a simple way to run optimized Virtual machines for Linux, macOS and Windows, Quickemu is perfect choice!
Resource: