Home QEMU Run Linux, macOS, Windows Virtual Machines With Quickemu

Run Linux, macOS, Windows Virtual Machines With Quickemu

Use Quickemu To Quickly Spin Up Virtual Machines For Linux, macOS And Windows

By sk
Published: Updated: 10.7K views

This guide explains what is Quickemu and how to create and run Linux, macOS and Windows desktop virtual machines with Quickemu in Linux.

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
Download Alpine Linux ISO Image With Quickget
Download Alpine Linux ISO Image With Quickget

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.

Run Alpine Linux Virtual Machine With Quickemu
Run Alpine Linux Virtual Machine With Quickemu

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"
Create Custom Configuration VM Using Quickemu

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.

Desktop Shortcut For VMs
Desktop Shortcut For VMs

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:

You May Also Like

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

This website uses cookies to improve your experience. By using this site, we will assume that you're OK with it. Accept Read More