diff --git a/README.md b/README.md index 3ebbec6..896b282 100644 --- a/README.md +++ b/README.md @@ -8,119 +8,153 @@
Quickemu Screenshot

Made with 💝 for

-# Introduction +Introduction +------------ -Quickly create and run highly optimised desktop virtual machines for Linux, -macOS and Windows; with just two commands. You decide what operating system you -want to run and Quickemu will figure out the best way to do it for you. For -example: +Quickly create and run highly optimised desktop virtual machines for +Linux, macOS and Windows; with just two commands. You decide what +operating system you want to run and Quickemu will figure out the best +way to do it for you. For example: -```bash +``` {.bash} quickget ubuntu-mate impish quickemu --vm ubuntu-mate-impish.conf ``` -The original objective of the project was to enable quick testing of Linux -distributions where the virtual machine configurations can be stored anywhere, -such as external USB storage or your home directory, and no elevated permissions -are required to run the virtual machines. **Quickemu now also includes -comprehensive support for macOS and Windows**. - -## Features - - * **macOS** Monterey, Big Sur, Catalina, Mojave & High Sierra - * **Windows** 8.1, 10 and 11 including TPM 2.0 - * [Ubuntu](https://ubuntu.com/desktop) and all the **[official Ubuntu flavours](https://ubuntu.com/download/flavours)** - * [Debian](https://www.debian.org/) (bullseye with all the official and non-free DE variants) - * [Fedora](https://getfedora.org/) - & openSUSE ([Leap](https://get.opensuse.org/leap/) - , [Tumbleweed](https://get.opensuse.org/tumbleweed/) - , [MicroOS](https://microos.opensuse.org/)) - * [Alma Linux](https://almalinux.org/) - * [Alpine Linux](https://www.alpinelinux.org/) - * [Linux Mint](https://linuxmint.com/) (Cinnamon, MATE, and XFCE) - , [elementary OS](https://elementary.io/) - , [Pop!_OS](https://pop.system76.com/) - * [Arch Linux](https://www.archlinux.org/) - , [ArcoLinux](https://www.arcolinux.info/) - , [CachyOS](https://cachyos.org/) - , [Kali](https://www.kali.org/) - , [Garuda](https://garudalinux.org/) - , [Gentoo Linux](https://www.gentoo.org/) - , [Manjaro](https://manjaro.org) - , [NixOS](https://nixos.org/) - & [ZorinOS](https://zorin.com/os/) - * [Oracle Linux](https://www.oracle.com/linux/) - and [Rocky Linux](https://rockylinux.org/) - * [Regolith Linux](https://regolith-linux.org/) (Release 1.6 and latest 2.0.0 pre-release ) - * [FreeBSD](https://www.freebsd.org/) - & [OpenBSD](https://www.openbsd.org/) - * [Haiku](https://www.haiku-os.org/) - * 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](https://wiki.qemu.org/Features/GuestAgent); provides access to a system-level agent via standard QMP commands - * Samba file sharing for Linux, macOS and Windows guests (*if `smbd` is 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 - * EFI (with or without SecureBoot) and Legacy BIOS boot - * Graphical user interfaces available - -Quickemu is a wrapper for the excellent [QEMU](https://www.qemu.org/) that -attempts to automatically *"do the right thing"*, rather than expose exhaustive -configuration options. - -We have a Discord for this project: [![Discord](https://img.shields.io/discord/712850672223125565?color=0C306A&label=WimpysWorld%20Discord&logo=Discord&logoColor=ffffff&style=flat-square)](https://discord.gg/sNmz3uw) - -See this (old) video where I explain some of my motivations for creating Quickemu. - -[![Replace VirtualBox with Bash & QEMU](https://img.youtube.com/vi/AOTYWEgw0hI/0.jpg)](https://www.youtube.com/watch?v=AOTYWEgw0hI) - -## Requirements - - * [QEMU](https://www.qemu.org/) (*6.0.0 or newer*) **with GTK, SDL, SPICE & VirtFS support** - * [bash](https://www.gnu.org/software/bash/) (*4.0 or newer*) - * [Coreutils](https://www.gnu.org/software/coreutils/) - * [EDK II](https://github.com/tianocore/edk2) - * [grep](https://www.gnu.org/software/grep/) - * [jq](https://stedolan.github.io/jq/) - * [LSB](https://wiki.linuxfoundation.org/lsb/start) - * [procps](https://gitlab.com/procps-ng/procps) - * [python3](https://www.python.org/) - * [macrecovery](https://github.com/acidanthera/OpenCorePkg/tree/master/Utilities/macrecovery) - * [mkisofs](http://cdrtools.sourceforge.net/private/cdrecord.html) - * [usbutils](https://github.com/gregkh/usbutils) - * [util-linux](https://github.com/karelzak/util-linux) - * [sed](https://www.gnu.org/software/sed/) - * [spicy](https://gitlab.freedesktop.org/spice/spice-gtk) - * [swtpm](https://github.com/stefanberger/swtpm) - * [Wget](https://www.gnu.org/software/wget/) - * [xdg-user-dirs](https://www.freedesktop.org/wiki/Software/xdg-user-dirs/) - * [xrandr](https://gitlab.freedesktop.org/xorg/app/xrandr) - * [zsync](http://zsync.moria.org.uk/) - -# Install Quickemu - -## Ubuntu +The original objective of the project was to enable quick testing of +Linux distributions where the virtual machine configurations can be +stored anywhere, such as external USB storage or your home directory, +and no elevated permissions are required to run the virtual machines. +**Quickemu now also includes comprehensive support for macOS and +Windows**. + +Features +-------- + +- **macOS** Monterey, Big Sur, Catalina, Mojave & High Sierra + +- **Windows** 8.1, 10 and 11 including TPM 2.0 + +- [Ubuntu](https://ubuntu.com/desktop) and all the **[official Ubuntu + flavours](https://ubuntu.com/download/flavours)** +- [Fedora](https://getfedora.org/) & openSUSE + ([Leap](https://get.opensuse.org/leap/), + [Tumbleweed](https://get.opensuse.org/tumbleweed/), + [MicroOS](https://microos.opensuse.org/)) +- [Linux Mint](https://linuxmint.com/) (Cinnamon, MATE, and XFCE), + [elementary OS](https://elementary.io/), + [Pop!\_OS](https://pop.system76.com/) +- [Arch Linux](https://www.archlinux.org/), + [Kali](https://www.kali.org/),[Garuda](https://garudalinux.org/), + [ZorinOS](https://zorin.com/os/) & [NixOS](https://nixos.org/) +- [Regolith Linux](https://regolith-linux.org/) (Release 1.6 and + latest 2.0.0 pre-release ) + +- [FreeBSD](https://www.freebsd.org/) & + [OpenBSD](https://www.openbsd.org/) + +- 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](https://wiki.qemu.org/Features/GuestAgent); provides access + to a system-level agent via standard QMP commands +- Samba file sharing for Linux, macOS and Windows guests (*if `smbd` + is 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 +- EFI (with or without SecureBoot) and Legacy BIOS boot +- Graphical user interfaces available + +Quickemu is a wrapper for the excellent [QEMU](https://www.qemu.org/) +that attempts to automatically *"do the right thing"*, rather than +expose exhaustive configuration options. + +We have a Discord for this project: +[![Discord](https://img.shields.io/discord/712850672223125565?color=0C306A&label=WimpysWorld%20Discord&logo=Discord&logoColor=ffffff&style=flat-square)](https://discord.gg/sNmz3uw) + +See this (old) video where I explain some of my motivations for creating +Quickemu. + +[![Replace VirtualBox with Bash & +QEMU](https://img.youtube.com/vi/AOTYWEgw0hI/0.jpg)](https://www.youtube.com/watch?v=AOTYWEgw0hI) + +Requirements +------------ + +- [QEMU](https://www.qemu.org/) (*6.0.0 or newer*) **with GTK, SDL, + SPICE & VirtFS support** +- [bash](https://www.gnu.org/software/bash/) (*4.0 or newer*) +- [Coreutils](https://www.gnu.org/software/coreutils/) +- [EDK II](https://github.com/tianocore/edk2) +- [grep](https://www.gnu.org/software/grep/) +- [jq](https://stedolan.github.io/jq/) +- [LSB](https://wiki.linuxfoundation.org/lsb/start) +- [procps](https://gitlab.com/procps-ng/procps) +- [python3](https://www.python.org/) +- [macrecovery](https://github.com/acidanthera/OpenCorePkg/tree/master/Utilities/macrecovery) +- [mkisofs](http://cdrtools.sourceforge.net/private/cdrecord.html) +- [usbutils](https://github.com/gregkh/usbutils) +- [util-linux](https://github.com/karelzak/util-linux) +- [sed](https://www.gnu.org/software/sed/) +- [spicy](https://gitlab.freedesktop.org/spice/spice-gtk) +- [swtpm](https://github.com/stefanberger/swtpm) +- [Wget](https://www.gnu.org/software/wget/) +- [xdg-user-dirs](https://www.freedesktop.org/wiki/Software/xdg-user-dirs/) +- [xrandr](https://gitlab.freedesktop.org/xorg/app/xrandr) +- [zsync](http://zsync.moria.org.uk/) + +Usage +===== + +Graphical User Interfaces +------------------------- + +While `quickemu` and `quickget` are designed for the terminal, a +graphical user interface is also available: + +- **[Quickgui](https://github.com/quickgui/quickgui)** by [Mark + Johnson](https://github.com/marxjohnson) and [Yannick + Mauray](https://github.com/ymauray). + +Many thanks to [Luke Wesley-Holley](https://github.com/Lukewh) and +[Philipp Kiemle](https://github.com/daPhipz) for creating the +**[Quickemu icons](https://github.com/Lukewh/quickemu-icons)** 🎨 + +### Quickgui for Ubuntu + +``` {.bash} +sudo add-apt-repository ppa:yannick-mauray/quickgui +sudo apt update +sudo apt install quickgui +``` + +Install Quickemu +================ + +Ubuntu +------ Quickemu is available from a PPA for Ubuntu users. The Quickemu PPA also -includes a back port of QEMU 6.0.0 for 20.04 (Focal) and 21.04 (Hirsute). To -install Quickemu and all the dependencies run the following in a terminal: +includes a back port of QEMU 6.0.0 for 20.04 (Focal) and 21.04 +(Hirsute). To install Quickemu and all the dependencies run the +following in a terminal: -```bash +``` {.bash} sudo apt-add-repository ppa:flexiondotorg/quickemu sudo apt update sudo apt install quickemu ``` -## Other Linux +Other Linux +----------- -```bash -git clone --depth=1 https://github.com/quickemu-project/quickemu +``` {.bash} +git clone --depth=1 https://github.com/wimpysworld/quickemu cd quickemu ``` @@ -128,237 +162,262 @@ Now install all the **Requirements** documented above. ### Other sources -[Repology.org](https://repology.org/) found the following releases have been packaged. +[Repology.org](https://repology.org/) found the following releases have +been packaged. #### Quickemu -[![Packaging status](https://repology.org/badge/vertical-allrepos/quickemu.svg)](https://repology.org/project/quickemu/versions) -#### Quickgui -[![Packaging status](https://repology.org/badge/vertical-allrepos/quickgui.svg)](https://repology.org/project/quickgui/versions) - -# Usage - -## Graphical User Interfaces -While `quickemu` and `quickget` are designed for the terminal, a graphical user interface is also available: +[![Packaging +status](https://repology.org/badge/vertical-allrepos/quickemu.svg)](https://repology.org/project/quickemu/versions) - * **[Quickgui](https://github.com/quickemu-project/quickgui)** by [Mark Johnson](https://github.com/marxjohnson) and [Yannick Mauray](https://github.com/ymauray). +#### Quickgui -Many thanks to [Luke Wesley-Holley](https://github.com/Lukewh) and -[Philipp Kiemle](https://github.com/daPhipz) for creating the -**[Quickemu icons](https://github.com/quickemu-project/quickemu-icons)** 🎨 +[![Packaging +status](https://repology.org/badge/vertical-allrepos/quickgui.svg)](https://repology.org/project/quickgui/versions) -### Quickgui for Ubuntu - -```bash -sudo add-apt-repository ppa:yannick-mauray/quickgui -sudo apt update -sudo apt install quickgui -``` - -## Ubuntu Guest +Ubuntu Guest +------------ `quickget` will automatically download an Ubuntu release and create the virtual machine configuration. -```bash +``` {.bash} quickget ubuntu focal quickemu --vm ubuntu-focal.conf ``` - * Complete the installation as normal. - * Post-install: - * Install the SPICE agent (`spice-vdagent`) to enable copy/paste and USB redirection - * `sudo apt install spice-vdagent` - * Install the SPICE WebDAV agent (`spice-webdavd`) to enable file sharing. - * `sudo apt install spice-webdavd` +- Complete the installation as normal. +- Post-install: + - Install the SPICE agent (`spice-vdagent`) to enable copy/paste + and USB redirection + - `sudo apt install spice-vdagent` + - Install the SPICE WebDAV agent (`spice-webdavd`) to enable file + sharing. + - `sudo apt install spice-webdavd` ### Ubuntu devel (daily-live) images `quickget` can also download/refresh devel images via `zsync` for Ubuntu developers and testers. -```bash +``` {.bash} quickget ubuntu devel quickemu --vm ubuntu-devel.conf ``` -You can run `quickget ubuntu devel` to refresh your daily development image as -often as you like, it will even automatically switch to a new series. +You can run `quickget ubuntu devel` to refresh your daily development +image as often as you like, it will even automatically switch to a new +series. ### Ubuntu Flavours -All the official Ubuntu flavours are supported, just replace `ubuntu` with your -preferred flavour. +All the official Ubuntu flavours are supported, just replace `ubuntu` +with your preferred flavour. - * `kubuntu` - * `lubuntu` - * `ubuntu-budgie` - * `ubuntu-kylin` - * `ubuntu-mate` - * `ubuntu-studio` - * `xubuntu` +- `kubuntu` (Kubuntu) +- `lubuntu` (Lubuntu) +- `ubuntu-budgie` (Ubuntu Budgie) +- `ubuntu-kylin` (Ubuntu Kylin) +- `ubuntu-mate` (Ubuntu MATE) +- `ubuntu-studio` (Ubuntu Studio) +- `ubuntu` (Ubuntu) +- `xubuntu` (Xubuntu) -## Other Linux Guests +Other Linux Guests +------------------ `quickget` also supports: - * `alma` - * `alpine` - * `archlinux` - * `arcolinux` - * `cachyos` - * `debian` - * `elementary` - * `fedora` - * `garuda` - * `gentoo` - * `kali` - * `kdeneon` - * `linuxmint` - * `mxlinux` - * `nixos` - * `opensuse` - * `oraclelinux` - * `popos` - * `regolith` - * `rockylinux` - * `zorin` - -Or you can download a Linux image and manually create a VM configuration. - - * Download a .iso image of a Linux distribution - * Create a VM configuration file; for example `debian-bullseye.conf` - -```bash +- `alma` (Alma Linux) +- `alpine` (Alpine Linux) +- `archlinux` (Arch Linux) +- `arcolinux` (Arco Linux) +- `cachyos` (CachyOS) +- `debian` (Debian) +- `elementary` (elementary OS) +- `fedora` (Fedora) +- `garuda` (Garuda Linux) +- `gentoo` (Gentoo) +- `haiku` (Haiku) +- `kali` (Kali) +- `kdeneon` (KDE Neon) +- `kolibrios` (KolibriOS) +- `linuxmint-cinnamon` (Linux Mint Cinnamon) +- `linuxmint-mate` (Linux Mint MATE) +- `linuxmint-xfce` (Linux Mint XFCE) +- `manjaro-budgie` (Manjaro Budgie) +- `manjaro-cinnamon` (Manjaro Cinnamon) +- `manjaro-deepin` (Manjaro Deepin) +- `manjaro-gnome` (Manjaro Gnome) +- `manjaro-i3` (Manjaro i3) +- `manjaro-kde` (Manjaro KDE) +- `manjaro-mate` (Manjaro MATE) +- `manjaro-xfce` (Manjaro XFCE) +- `mxlinux-fluxbox` (MX Linux Fluxbox) +- `mxlinux-kde` (MX Linux KDE) +- `mxlinux-xfce` (MX Linux XFCE) +- `nixos-gnome` (NixOS Gnome) +- `nixos-minimal` (NixOS Minimal) +- `nixos-plasma5` (NixOS KDE) +- `opensuse` (openSUSE) +- `oraclelinux` (Oracle Linux) +- `popos` (Pop!\_OS) +- `regolith` (Regolith Linux) +- `rockylinux` (Rocky Linux) +- `solus` (Solus) +- `tails` (Tails) +- `void` (Void Linux) +- `zorin` (Zorin OS) + +### BSD Guest Support + +- `freebsd` (FreeBSD) +- `openbsd` (OpenBSD) + +Or you can download a Linux image and manually create a VM +configuration. + +- Download a .iso image of a Linux distribution +- Create a VM configuration file; for example `debian-bullseye.conf` + +``` {.bash} guest_os="linux" disk_img="debian-bullseye/disk.qcow2" iso="debian-bullseye/firmware-11.0.0-amd64-DVD-1.iso" ``` -If you already have a collection of ISOs downloaded you can have `quickget` find and copy your existing file into the VM directory. - -~~~~ ---isodir : base path beneath which to find local ISO copy - if a matching file is found it will be copied to the VM directory ---localiso : optional local ISO filename - defaults to target filename -~~~~ +- Use `quickemu` to start the virtual machine: -`quickget` will then continue to `wget` or `zsync` using that file as a prior copy. If the target file exists in the VM directory `quickget` will raise an error if you run it with `--isodir` - - * Use `quickemu` to start the virtual machine: - -```bash +``` {.bash} quickemu --vm debian-bullseye.conf ``` - * Complete the installation as normal. - * Post-install: - * Install the SPICE agent (`spice-vdagent`) to enable copy/paste and USB redirection. - * Install the SPICE WebDAV agent (`spice-webdavd`) to enable file sharing. - -## BSD Guests +- Complete the installation as normal. +- Post-install: + - Install the SPICE agent (`spice-vdagent`) to enable copy/paste + and USB redirection. + - Install the SPICE WebDAV agent (`spice-webdavd`) to enable file + sharing. -`quickget` also supports: - - * `freebsd` - * `openbsd` +macOS Guest +----------- -## macOS Guest - -`quickget` automatically downloads a macOS recovery image and creates a virtual -machine configuration. +`quickget` automatically downloads a macOS recovery image and creates a +virtual machine configuration. -```bash +``` {.bash} quickget macos catalina quickemu --vm macos-catalina.conf ``` -macOS `high-sierra`, `mojave`, `catalina`, `big-sur` and `monterey` are supported. - - * Use cursor keys and enter key to select the **macOS Base System** - * From **macOS Utilities** - * Click **Disk Utility** and **Continue** - * On macOS Catalina, Big Sur & Monterey - * Select `Apple Inc. VirtIO Block Media` from the list and click **Erase**. - * On macOS Mojave and High Sierra - * Select `QEMU HARDDISK Media` (~103.08GB) from the list and click **Erase**. - * Enter a `Name:` for the disk and click **Erase**. - * Click **Done**. - * Close Disk Utility - * From **macOS Utilities** - * Click **Reinstall macOS** and **Continue** - * Complete the installation as you normally would. - * On the first reboot use cursor keys and enter key to select **macOS Installer** - * On the subsequent reboots use cursor keys and enter key to select the disk you named +macOS `high-sierra`, `mojave`, `catalina`, `big-sur` and `monterey` are +supported. + +- Use cursor keys and enter key to select the **macOS Base System** +- From **macOS Utilities** + - Click **Disk Utility** and **Continue** + - On macOS Catalina, Big Sur & Monterey + - Select `Apple Inc. VirtIO Block Media` from the list and + click **Erase**. + - On macOS Mojave and High Sierra + - Select `QEMU HARDDISK Media` (\~103.08GB) from the list + and click **Erase**. + - Enter a `Name:` for the disk and click **Erase**. + - Click **Done**. + - Close Disk Utility +- From **macOS Utilities** + - Click **Reinstall macOS** and **Continue** +- Complete the installation as you normally would. + - On the first reboot use cursor keys and enter key to select + **macOS Installer** + - On the subsequent reboots use cursor keys and enter key to + select the disk you named The default macOS configuration looks like this: -```bash +``` {.bash} guest_os="macos" img="macos-catalina/RecoveryImage.img" disk_img="macos-catalina/disk.qcow2" macos_release="catalina" ``` - * `guest_os="macos"` instructs Quickemu to optimise for macOS. - * `macos_release="catalina"` instructs Quickemu to optimise for a particular macOS release. - * For example VirtIO Network and Memory Ballooning are available in Big Sur and newer, but not previous releases. - * And VirtIO Block Media (disks) are supported/stable in Catalina and newer. +- `guest_os="macos"` instructs Quickemu to optimise for macOS. +- `macos_release="catalina"` instructs Quickemu to optimise for a + particular macOS release. + - For example VirtIO Network and Memory Ballooning are available + in Big Sur and newer, but not previous releases. + - And VirtIO Block Media (disks) are supported/stable in Catalina + and newer. ### macOS compatibility There are some considerations when running macOS via Quickemu. - * Supported macOS releases: - * High Sierra - * Mojave - * Catalina **(Recommended)** - * Big Sur - * Monterey - * `quickemu` will automatically download the required [OpenCore](https://github.com/acidanthera/OpenCorePkg) - bootloader and OVMF firmware from [OSX-KVM](https://github.com/kholia/OSX-KVM). - * Optimised by default, but no GPU acceleration is available. - * Host CPU vendor is detected and guest CPU is optimised accordingly. - * [VirtIO Block Media](https://www.kraxel.org/blog/2019/06/macos-qemu-guest/) is used for the system disk where supported. - * [VirtIO `usb-tablet`](http://philjordan.eu/osx-virt/) is used for the mouse. - * VirtIO Network (`virtio-net`) is supported and enabled on macOS Big Sur and newer but previous releases use `vmxnet3`. - * VirtIO Memory Ballooning is supported and enabled on macOS Big Sur and newer but disabled for other support macOS releases. - * USB host and SPICE pass-through is: - * UHCI (USB 2.0) on macOS Catalina and earlier. - * XHCI (USB 3.0) on macOS Big Sur and newer. - * Display resolution can only be changed via macOS System Preferences. - * Full Duplex audio works on macOS High Sierra, Mojave and Catalina. - * **macOS Big Sur and Monterey have no audio at all**. - * File sharing between guest and host is available via [virtio-9p](https://wiki.qemu.org/Documentation/9psetup) and [SPICE webdavd](https://gitlab.gnome.org/GNOME/phodav/-/merge_requests/24). - * Copy/paste via SPICE agent is **not available on macOS**. - -## Windows 8.1, 10 & 11 Guests - -`quickget` can automatically download Windows 8.1, [Windows 10](https://www.microsoft.com/en-gb/software-download/windows10ISO) -and [Windows 11](https://www.microsoft.com/en-gb/software-download/windows11) -along with the [VirtIO drivers for Windows](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/) +- Supported macOS releases: + - High Sierra + - Mojave + - Catalina **(Recommended)** + - Big Sur + - Monterey +- `quickemu` will automatically download the required + [OpenCore](https://github.com/acidanthera/OpenCorePkg) bootloader + and OVMF firmware from [OSX-KVM](https://github.com/kholia/OSX-KVM). +- Optimised by default, but no GPU acceleration is available. + - Host CPU vendor is detected and guest CPU is optimised + accordingly. + - [VirtIO Block + Media](https://www.kraxel.org/blog/2019/06/macos-qemu-guest/) is + used for the system disk where supported. + - [VirtIO `usb-tablet`](http://philjordan.eu/osx-virt/) is used + for the mouse. + - VirtIO Network (`virtio-net`) is supported and enabled on macOS + Big Sur and newer but previous releases use `vmxnet3`. + - VirtIO Memory Ballooning is supported and enabled on macOS Big + Sur and newer but disabled for other support macOS releases. +- USB host and SPICE pass-through is: + - UHCI (USB 2.0) on macOS Catalina and earlier. + - XHCI (USB 3.0) on macOS Big Sur and newer. +- Display resolution can only be changed via macOS System Preferences. +- Full Duplex audio works on macOS High Sierra, Mojave and Catalina. + - **macOS Big Sur and Monterey have no audio at all**. +- File sharing between guest and host is available via + [virtio-9p](https://wiki.qemu.org/Documentation/9psetup) and [SPICE + webdavd](https://gitlab.gnome.org/GNOME/phodav/-/merge_requests/24). +- Copy/paste via SPICE agent is **not available on macOS**. + +Windows 8.1, 10 & 11 Guests +--------------------------- + +`quickget` can automatically download Windows 8.1, [Windows +10](https://www.microsoft.com/en-gb/software-download/windows10ISO) and +[Windows +11](https://www.microsoft.com/en-gb/software-download/windows11) along +with the [VirtIO drivers for +Windows](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/) and creates a virtual machine configuration. -```bash +``` {.bash} quickget windows 11 quickemu --vm windows-11.conf ``` - * Complete the installation as you normally would. - * All relevant drivers and services should be installed automatically. +- Complete the installation as you normally would. +- All relevant drivers and services should be installed automatically. ### Regional versions -By default `quickget` will download the *"English International"* release, but -you can optionally specify one of the supported languages: For example: +By default `quickget` will download the *"English International"* +release, but you can optionally specify one of the supported languages: +For example: -```bash +``` {.bash} quickget windows 11 "Chinese (Traditional)" ``` The default Windows 11 configuration looks like this: -```bash +``` {.bash} guest_os="windows" disk_img="windows-11/disk.qcow2" iso="windows-11/Win11_EnglishInternational_x64.iso" @@ -366,225 +425,270 @@ fixed_iso="windows-11/virtio-win.iso" tpm="on" ``` - * `guest_os="windows"` instructs `quickemu` to optimise for Windows. - * `fixed_iso=` specifies the ISO image that provides VirtIO drivers. - * `tpm="on"` instructs `quickemu` to create a software emulated TPM device using `swtpm`. +- `guest_os="windows"` instructs `quickemu` to optimise for Windows. +- `fixed_iso=` specifies the ISO image that provides VirtIO drivers. +- `tpm="on"` instructs `quickemu` to create a software emulated TPM + device using `swtpm`. -## BSD Guests +BSD Guests +---------- `quickemu` supports FreeBSD and OpenBSD. -```bash +``` {.bash} quickget freebsd 13_0 quickemu --vm freebsd-13_0.conf ``` -## Haiku Guests +Other Guests +------------ + +- `android` (Android x86) + +Haiku Guests +------------ `quickemu` supports [Haiku](https://www.haiku-os.org/). -```bash +``` {.bash} quickget quickget haiku r1beta3-x86_64 quickemu --vm haiku-r1beta3-x86_64.conf ``` -At the moment the only way to share files between host and a Haiku guest is by -using SSH (having a SSH server running on the host): +At the moment the only way to share files between host and a Haiku guest +is by using SSH (having a SSH server running on the host): On guest: -```bash +``` {.bash} scp example.txt user@host-local-ip:/home/user # sending a file from guest to host scp user@host-local-ip:/home/user/example.txt . # receiving a file from host to guest ``` -`quickget` cannot automatically download and create virtual machines for Haiku -nightly versions, but they work if the ISO and configuration are set up manually. +`quickget` cannot automatically download and create virtual machines for +Haiku nightly versions, but they work if the ISO and configuration are +set up manually. -# SPICE +SPICE +===== The following features are available while using the SPICE protocol: - * Copy/paste between the guest and host - * Host file sharing to the guest - * USB device redirection +- Copy/paste between the guest and host +- Host file sharing to the guest +- USB device redirection -To use SPICE add `--display spice` to the Quickemu invocation, this requires that -the `spicy` client is installed, available from the `spice-client-gtk` package -in Debian/Ubuntu. +To use SPICE add `--display spice` to the Quickemu invocation, this +requires that the `spicy` client is installed, available from the +`spice-client-gtk` package in Debian/Ubuntu. -```bash +``` {.bash} quickemu --vm ubuntu-focal.conf --display spice ``` -## Headless +Headless +-------- -To start a VM with SPICE enabled, but no display attached use `--display none`. -This requires that the `spicy` client is installed, available from the -`spice-client-gtk` package in Debian/Ubuntu to connect to the running VM +To start a VM with SPICE enabled, but no display attached use +`--display none`. This requires that the `spicy` client is installed, +available from the `spice-client-gtk` package in Debian/Ubuntu to +connect to the running VM -```bash +``` {.bash} quickemu --vm ubuntu-focal.conf --display none ``` -You can also use the `.ports` file in the VM directory to lookup what SSH and -SPICE ports the VM is connected to. +You can also use the `.ports` file in the VM directory to lookup what +SSH and SPICE ports the VM is connected to. -```bash +``` {.bash} cat ubuntu-focal/ubuntu-focal.ports ``` -# Accessibility -Qemu provides support for using BrlAPI to display braille output on a real or fake device. +Accessibility +============= +Qemu provides support for using BrlAPI to display braille output on a +real or fake device. -```bash +``` {.bash} quickemu --vm ubuntu-impish.conf --accessibility braille --display sdl ``` + or even -```bash +``` {.bash} quickemu --vm ubuntu-impish.conf --acc brl --display sdl ``` -# BIOS and EFI +BIOS and EFI +============ -Since Quickemu 2.1.0 `efi` is the default boot option. If you want to override -this behaviour then add the following line to you VM configuration to enable -legacy BIOS. +Since Quickemu 2.1.0 `efi` is the default boot option. If you want to +override this behaviour then add the following line to you VM +configuration to enable legacy BIOS. - * `boot="legacy"` - Enable Legacy BIOS boot +- `boot="legacy"` - Enable Legacy BIOS boot -# Tuning CPU cores, RAM & disks +Tuning CPU cores, RAM & disks +============================= -By default, Quickemu will calculate the number of CPUs cores and RAM to allocate -to a VM based on the specifications of your host computer. You can override this -default behaviour and tune the VM configuration to your liking. +By default, Quickemu will calculate the number of CPUs cores and RAM to +allocate to a VM based on the specifications of your host computer. You +can override this default behaviour and tune the VM configuration to +your liking. Add additional lines to your virtual machine configuration: - * `cpu_cores="4"` - Specify the number of CPU cores allocated to the VM - * `ram="4G"` - Specify the amount of RAM to allocate to the VM - * `disk_size="16G"` - Specify the size of the virtual disk allocated to the VM +- `cpu_cores="4"` - Specify the number of CPU cores allocated to the + VM +- `ram="4G"` - Specify the amount of RAM to allocate to the VM +- `disk_size="16G"` - Specify the size of the virtual disk allocated + to the VM -## Disk preallocation +Disk preallocation +------------------ -Preallocation mode (allowed values: `off` (default), `metadata`, `falloc`, `full`). -An image with preallocated metadata is initially larger but can improve performance -when the image needs to grow. +Preallocation mode (allowed values: `off` (default), `metadata`, +`falloc`, `full`). An image with preallocated metadata is initially +larger but can improve performance when the image needs to grow. -Specify what disk preallocation should be used, if any, when creating the system -disk image by adding a line like this to your VM configuration. +Specify what disk preallocation should be used, if any, when creating +the system disk image by adding a line like this to your VM +configuration. - * `preallocation="metadata"` +- `preallocation="metadata"` -## CD-ROM disks +CD-ROM disks +------------ -If you want to expose an ISO image from the host to guest add the following line -to the VM configuration: +If you want to expose an ISO image from the host to guest add the +following line to the VM configuration: - * `fixed_iso="/path/to/image.iso"` +- `fixed_iso="/path/to/image.iso"` -## Floppy disks +Floppy disks +------------ -If you're like [Alan Pope](https://popey.com) you'll probably want to mount a -floppy disk image in the guest. To do so add the following line to the VM -configuration: +If you're like [Alan Pope](https://popey.com) you'll probably want to +mount a floppy disk image in the guest. To do so add the following line +to the VM configuration: - * `floppy="/path/to/floppy.img"` +- `floppy="/path/to/floppy.img"` -# File Sharing +File Sharing +============ -All File Sharing options will only expose `~/Public` (or localised variations) -for the current user to the guest VMs. +All File Sharing options will only expose `~/Public` (or localised +variations) for the current user to the guest VMs. -## Samba 🐧 🍏 🪟 +Samba 🐧 🍏 🪟 +----------- -If `smbd` is available on the host, Quickemu will automatically enable the -built-in QEMU support for exposing a Samba share from the host to the guest. +If `smbd` is available on the host, Quickemu will automatically enable +the built-in QEMU support for exposing a Samba share from the host to +the guest. You can install the minimal Samba components on Ubuntu using: -```bash +``` {.bash} sudo apt install --no-install-recommends samba ``` -## SPICE WebDAV 🐧 🪟 - * TBD +SPICE WebDAV 🐧 🪟 +---------------- -## VirtIO-9P 🐧 🍏 +- TBD - * TBD +VirtIO-9P 🐧 🍏 +------------- -# Network port forwarding +- TBD -Add an additional line to your virtual machine configuration. For example: +Network port forwarding +======================= - * `port_forwards=("8123:8123" "8888:80")` +Add an additional line to your virtual machine configuration. For +example: + +- `port_forwards=("8123:8123" "8888:80")` In the example above: - * Port 8123 on the host is forwarded to port 8123 on the guest. - * Port 8888 on the host is forwarded to port 80 on the guest. +- Port 8123 on the host is forwarded to port 8123 on the guest. +- Port 8888 on the host is forwarded to port 80 on the guest. -# Bridged networking +Bridged networking +================== -Connect your virtual machine to a preconfigured network bridge. -Add an additional line to your virtual machine configuration +Connect your virtual machine to a preconfigured network bridge. Add an +additional line to your virtual machine configuration - * `bridge="br0"` +- `bridge="br0"` -# USB redirection +USB redirection +=============== -Quickemu supports USB redirection via SPICE pass-through and host pass-through. +Quickemu supports USB redirection via SPICE pass-through and host +pass-through. -## SPICE redirection (recommended) +SPICE redirection (recommended) +------------------------------- -Using SPICE for USB pass-through is easiest as it doesn't require any elevated -permission, start Quickemu with `--display spice` and then select `Input` -> -`Select USB Device for redirection` from the menu to choose which device(s) you want -to attach to the guest. +Using SPICE for USB pass-through is easiest as it doesn't require any +elevated permission, start Quickemu with `--display spice` and then +select `Input` -\> `Select USB Device for redirection` from the menu to +choose which device(s) you want to attach to the guest. -## Host redirection +Host redirection **NOT Recommended** +------------------------------------ -**USB host redirection is not recommended**, it is provided purely for backwards -compatibility to older versions of Quickemu. Using SPICE is preferred, see above. +**USB host redirection is not recommended**, it is provided purely for +backwards compatibility to older versions of Quickemu. Using SPICE is +preferred, see above. -Add an additional line to your virtual machine configuration. For example: +Add an additional line to your virtual machine configuration. For +example: - * `usb_devices=("046d:082d" "046d:085e")` +- `usb_devices=("046d:082d" "046d:085e")` In the example above: - * The USB device with vendor_id 046d and product_id 082d will be exposed to the guest. - * The USB device with vendor_id 046d and product_id 085e will be exposed to the guest. +- The USB device with vendor\_id 046d and product\_id 082d will be + exposed to the guest. +- The USB device with vendor\_id 046d and product\_id 085e will be + exposed to the guest. -If the USB devices are not writable, `quickemu` will display the appropriate -commands to modify the USB device(s) access permissions, like this: +If the USB devices are not writable, `quickemu` will display the +appropriate commands to modify the USB device(s) access permissions, +like this: -``` - - USB: Host pass-through requested: - - Sennheiser Communications EPOS GTW 270 on bus 001 device 005 needs permission changes: - sudo chown -v root:user /dev/bus/usb/001/005 - ERROR! USB permission changes are required 👆 -``` + - USB: Host pass-through requested: + - Sennheiser Communications EPOS GTW 270 on bus 001 device 005 needs permission changes: + sudo chown -v root:user /dev/bus/usb/001/005 + ERROR! USB permission changes are required 👆 -# TPM +TPM +=== -Since Quickemu 2.2.0 a software emulated TPM device can be added to guest -virtual machines. Just add `tpm="on"` to your VM configuration. `quickget` will -automatically add this line to Windows 11 virtual machines. +Since Quickemu 2.2.0 a software emulated TPM device can be added to +guest virtual machines. Just add `tpm="on"` to your VM configuration. +`quickget` will automatically add this line to Windows 11 virtual +machines. -# All the options +All the options +=============== Here are the usage instructions: -``` +``` {.bash} + + Usage quickemu --vm ubuntu.conf You can also pass optional parameters - --accessible : Select accessible facilitation. 'braille' (default - currently requires --display sdl )" + --accessible : Select accessible facilitation. 'braille' (default - currently requires --display 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' @@ -598,42 +702,49 @@ You can also pass optional parameters --snapshot info : Show disk/snapshot info. --status-quo : Do not commit any changes to disk/snapshot. --version : Print version + ``` -## Desktop shortcuts +Desktop shortcuts +----------------- -Desktop shortcuts can be created for a VM, the shortcuts are saved in `~/.local/share/applications`. Here is an example of how to create a shortcut. +Desktop shortcuts can be created for a VM, the shortcuts are saved in +`~/.local/share/applications`. Here is an example of how to create a +shortcut. -```bash +``` {.bash} quickemu --vm ubuntu-focal-desktop.conf --shortcut ``` -## Screen and window size (Linux guests only) +Screen and window size (Linux guests only) +------------------------------------------ -`qemu` will always default to the primary monitor to display the VM's window. +`qemu` will always default to the primary monitor to display the VM's +window. -Without the `--screen` option, `quickemu` will look for the size of the smallest -monitor, and use a size that fits on said monitor. +Without the `--screen` option, `quickemu` will look for the size of the +smallest monitor, and use a size that fits on said monitor. -The `--screen` option forces `quickemu` to use the size of the given monitor to -compute the size of the window. **It won't use that monitor to display the VM's -window if it's not the primary monitor**. This is useful if the primary monitor -if not the smallest one, and if the VM's window doesn't need to be moved around. +The `--screen` option forces `quickemu` to use the size of the given +monitor to compute the size of the window. **It won't use that monitor +to display the VM's window if it's not the primary monitor**. This is +useful if the primary monitor if not the smallest one, and if the VM's +window doesn't need to be moved around. -The `--screen` option is also useful with the `--fullscreen` option, again -because `qemu` will always use the primary monitor. In order for the fullscreen -mode to work properly, the resolution of the VM's window must match the -resolution of the screen. +The `--screen` option is also useful with the `--fullscreen` option, +again because `qemu` will always use the primary monitor. In order for +the fullscreen mode to work properly, the resolution of the VM's window +must match the resolution of the screen. To know which screen to use, type: -```bash +``` {.bash} xrandr --listmonitors | grep -v Monitors ``` The command will output something like this: -``` +``` {.bash} 0: +*HDMI-0 2560/597x1440/336+1920+0 HDMI-0 1: +DVI-D-0 1920/527x1080/296+0+0 DVI-D-0 ``` @@ -642,50 +753,49 @@ The first number is what needs to be passed to the `--screen` option. For example: -```bash +``` {.bash} quickemu --vm vm.conf --screen 0 ``` -The above uses the 2560x1440 screen to compute the size of the window, which -Quickemu sizes to 2048x1152. Without the `--screen` option, Quickemu would have -used the 1920x1080 monitor which results in a window size of 1664x936. +The above uses the 2560x1440 screen to compute the size of the window, +which Quickemu sizes to 2048x1152. Without the `--screen` option, +Quickemu would have used the 1920x1080 monitor which results in a window +size of 1664x936. -# References +References +========== Useful reference that assisted the development of Quickemu. - * General - * [QEMU’s documentation!](https://qemu.readthedocs.io/en/latest/) - * - * - - * macOS - * - * - * - * - * - * - * - * - * - * [OpenCore Configurator](https://mackie100projects.altervista.org) - - * Windows - * - * - * - * - * - * - - * TPM - * - * - - * 9p & virtiofs - * - * - * - * - * +- General + - [QEMU's documentation!](https://qemu.readthedocs.io/en/latest/) + - + - +- macOS + - + - + - + - + - + - + - + - + - + - [OpenCore + Configurator](https://mackie100projects.altervista.org) +- Windows + - + - + - + - + - + - +- TPM + - + - +- 9p & virtiofs + - + - + - + - + -