Merge branch 'master' into add-openindiana
This commit is contained in:
commit
e5b3e974ee
292
README.md
292
README.md
@ -8,17 +8,16 @@
|
||||
<div align="center"><img src=".github/screenshot.png" alt="Quickemu Screenshot" /></div>
|
||||
<p align="center">Made with 💝 for <img src=".github/tux.png" align="top" width="18" /></p>
|
||||
|
||||
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:
|
||||
|
||||
``` {.bash}
|
||||
quickget ubuntu-mate 21.10
|
||||
quickemu --vm ubuntu-mate-21.10-.conf
|
||||
``` bash
|
||||
quickget ubuntu-mate 22.04
|
||||
quickemu --vm ubuntu-mate-22.04-.conf
|
||||
```
|
||||
|
||||
The original objective of the project was to enable quick testing of
|
||||
@ -28,8 +27,7 @@ and no elevated permissions are required to run the virtual machines.
|
||||
**Quickemu now also includes comprehensive support for macOS and
|
||||
Windows**.
|
||||
|
||||
Features
|
||||
--------
|
||||
## Features
|
||||
|
||||
- **macOS** Monterey, Big Sur, Catalina, Mojave & High Sierra
|
||||
- **Windows** 8.1, 10 and 11 including TPM 2.0
|
||||
@ -67,8 +65,7 @@ Quickemu.
|
||||
[](https://www.youtube.com/watch?v=AOTYWEgw0hI)
|
||||
|
||||
Requirements
|
||||
------------
|
||||
## Requirements
|
||||
|
||||
- [QEMU](https://www.qemu.org/) (*6.0.0 or newer*) **with GTK, SDL,
|
||||
SPICE & VirtFS support**
|
||||
@ -93,11 +90,37 @@ Requirements
|
||||
- [zsync](http://zsync.moria.org.uk/)
|
||||
- [unzip](http://www.info-zip.org/UnZip.html)
|
||||
|
||||
Usage
|
||||
=====
|
||||
### Installing Requirements
|
||||
|
||||
Graphical User Interfaces
|
||||
-------------------------
|
||||
For Ubuntu, Arch and nixos systems the
|
||||
[ppa](https://launchpad.net/~flexiondotorg/+archive/ubuntu/quickemu),
|
||||
[AUR](https://aur.archlinux.org/packages/quickemu) or
|
||||
[nix](https://github.com/NixOS/nixpkgs/tree/master/pkgs/development/quickemu)
|
||||
packaging will take care of the dependencies. For other host
|
||||
distributions or operating systems it will be necessary to install the
|
||||
above requirements or their equivalents.
|
||||
|
||||
These examples may save a little typing
|
||||
|
||||
Debian:
|
||||
|
||||
sudo apt install qemu bash coreutils ovmf grep jq lsb procps python3 genisoimage usbutils util-linux sed spice-client-gtk swtpm wget xdg-user-dirs zsync unzip
|
||||
|
||||
Fedora:
|
||||
|
||||
sudo dnf install qemu bash coreutils edk2-tools grep jq lsb procps python3 genisoimage usbutils util-linux sed spice-gtk-tools swtpm wget xdg-user-dirs xrandr unzip
|
||||
|
||||
MacOS:
|
||||
|
||||
This is a work in progress (see [issue
|
||||
248](https://github.com/quickemu-project/quickemu/issues/248) for other
|
||||
steps and changes that may enable running on MacOS)
|
||||
|
||||
brew install qemu bash coreutils grep jq python@3.10 cdrtools gnu-sed spice-gtk wget zsync
|
||||
|
||||
# Usage
|
||||
|
||||
## Graphical User Interfaces
|
||||
|
||||
While `quickemu` and `quickget` are designed for the terminal, a
|
||||
graphical user interface is also available:
|
||||
@ -112,33 +135,30 @@ Many thanks to [Luke Wesley-Holley](https://github.com/Lukewh) and
|
||||
|
||||
### Quickgui for Ubuntu
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
sudo add-apt-repository ppa:yannick-mauray/quickgui
|
||||
sudo apt update
|
||||
sudo apt install quickgui
|
||||
```
|
||||
|
||||
Install Quickemu
|
||||
================
|
||||
# Install Quickemu
|
||||
|
||||
Ubuntu
|
||||
------
|
||||
## 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:
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
sudo apt-add-repository ppa:flexiondotorg/quickemu
|
||||
sudo apt update
|
||||
sudo apt install quickemu
|
||||
```
|
||||
|
||||
Other Linux
|
||||
-----------
|
||||
## Other Linux
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
git clone --depth=1 https://github.com/wimpysworld/quickemu
|
||||
cd quickemu
|
||||
```
|
||||
@ -160,15 +180,14 @@ status](https://repology.org/badge/vertical-allrepos/quickemu.svg)](https://repo
|
||||
[](https://repology.org/project/quickgui/versions)
|
||||
|
||||
Ubuntu Guest
|
||||
------------
|
||||
## Ubuntu Guest
|
||||
|
||||
`quickget` will automatically download an Ubuntu release and create the
|
||||
virtual machine configuration.
|
||||
|
||||
``` {.bash}
|
||||
quickget ubuntu 20.04
|
||||
quickemu --vm ubuntu-20.04.conf
|
||||
``` bash
|
||||
quickget ubuntu 22.04
|
||||
quickemu --vm ubuntu-22.04.conf
|
||||
```
|
||||
|
||||
- Complete the installation as normal.
|
||||
@ -185,7 +204,7 @@ quickemu --vm ubuntu-20.04.conf
|
||||
`quickget` can also download/refresh devel images via `zsync` for Ubuntu
|
||||
developers and testers.
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
quickget ubuntu devel
|
||||
quickemu --vm ubuntu-devel.conf
|
||||
```
|
||||
@ -208,8 +227,11 @@ with your preferred flavour.
|
||||
- `ubuntu` (Ubuntu)
|
||||
- `xubuntu` (Xubuntu)
|
||||
|
||||
Other Operating Systems
|
||||
-----------------------
|
||||
## Other Operating Systems
|
||||
|
||||
`quickget` also supports:
|
||||
|
||||
## Other Operating Systems
|
||||
|
||||
`quickget` also supports:
|
||||
|
||||
@ -218,11 +240,15 @@ Other Operating Systems
|
||||
- `android` (Android x86)
|
||||
- `archlinux` (Arch Linux)
|
||||
- `arcolinux` (Arco Linux)
|
||||
- `batocera` (Batocera)
|
||||
- `cachyos` (CachyOS)
|
||||
- `centos-stream` (CentOS Stream)
|
||||
- `debian` (Debian)
|
||||
- `deepin` (Deepin)
|
||||
- `devuan` (Devuan)
|
||||
- `dragonflybsd` (DragonFlyBSD)
|
||||
- `elementary` (elementary OS)
|
||||
- `endeavouros` (EndeavourOS)
|
||||
- `fedora` (Fedora)
|
||||
- `freebsd` (FreeBSD)
|
||||
- `freedos` (FreeDOS)
|
||||
@ -234,6 +260,7 @@ Other Operating Systems
|
||||
- `kdeneon` (KDE Neon)
|
||||
- `kolibrios` (KolibriOS)
|
||||
- `linuxmint` (Linux Mint)
|
||||
- `lmde` (Linux Mint Debian Edition)
|
||||
- `manjaro` (Manjaro)
|
||||
- `mxlinux` (MX Linux)
|
||||
- `netboot` (netboot.xyz)
|
||||
@ -257,7 +284,7 @@ configuration.
|
||||
- Download a .iso image of a Linux distribution
|
||||
- Create a VM configuration file; for example `debian-bullseye.conf`
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
guest_os="linux"
|
||||
disk_img="debian-bullseye/disk.qcow2"
|
||||
iso="debian-bullseye/firmware-11.0.0-amd64-DVD-1.iso"
|
||||
@ -265,7 +292,7 @@ iso="debian-bullseye/firmware-11.0.0-amd64-DVD-1.iso"
|
||||
|
||||
- Use `quickemu` to start the virtual machine:
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
quickemu --vm debian-bullseye.conf
|
||||
```
|
||||
|
||||
@ -276,13 +303,12 @@ quickemu --vm debian-bullseye.conf
|
||||
- Install the SPICE WebDAV agent (`spice-webdavd`) to enable file
|
||||
sharing.
|
||||
|
||||
macOS Guest
|
||||
-----------
|
||||
## macOS Guest
|
||||
|
||||
`quickget` automatically downloads a macOS recovery image and creates a
|
||||
virtual machine configuration.
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
quickget macos catalina
|
||||
quickemu --vm macos-catalina.conf
|
||||
```
|
||||
@ -312,7 +338,7 @@ supported.
|
||||
|
||||
The default macOS configuration looks like this:
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
guest_os="macos"
|
||||
img="macos-catalina/RecoveryImage.img"
|
||||
disk_img="macos-catalina/disk.qcow2"
|
||||
@ -363,8 +389,7 @@ There are some considerations when running macOS via Quickemu.
|
||||
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
|
||||
---------------------------
|
||||
## 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
|
||||
@ -374,13 +399,17 @@ 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.
|
||||
- A local adminstrator user account is automatically created, with
|
||||
these credentials:
|
||||
- Username: `Quickemu`
|
||||
- Password: `quickemu`
|
||||
|
||||
### Regional versions
|
||||
|
||||
@ -388,18 +417,19 @@ 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"
|
||||
fixed_iso="windows-11/virtio-win.iso"
|
||||
tpm="on"
|
||||
secureboot="on"
|
||||
```
|
||||
|
||||
- `guest_os="windows"` instructs `quickemu` to optimise for Windows.
|
||||
@ -407,8 +437,7 @@ tpm="on"
|
||||
- `tpm="on"` instructs `quickemu` to create a software emulated TPM
|
||||
device using `swtpm`.
|
||||
|
||||
SPICE
|
||||
=====
|
||||
# SPICE
|
||||
|
||||
The following features are available while using the SPICE protocol:
|
||||
|
||||
@ -420,49 +449,49 @@ 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}
|
||||
quickemu --vm ubuntu-20.04.conf --display spice
|
||||
``` bash
|
||||
quickemu --vm ubuntu-22.04.conf --display spice
|
||||
```
|
||||
|
||||
Headless
|
||||
--------
|
||||
To enable copy/paste with a Windows guest, install [SPICE Windows guest
|
||||
tools](https://www.spice-space.org/download.html) in the guest VM.
|
||||
|
||||
## 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
|
||||
|
||||
``` {.bash}
|
||||
quickemu --vm ubuntu-20.04.conf --display none
|
||||
``` bash
|
||||
quickemu --vm ubuntu-22.04.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.
|
||||
|
||||
``` {.bash}
|
||||
cat ubuntu-20.04/ubuntu-20.04.ports
|
||||
``` bash
|
||||
cat ubuntu-22.04/ubuntu-22.04.ports
|
||||
```
|
||||
|
||||
If, for example, the SSH port is set to 22220, and assuming your VM has
|
||||
a started SSH service (details vary by OS), you can typically SSH into
|
||||
it from the host as follows:
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
ssh -p 22220 your_vm_user@localhost
|
||||
```
|
||||
|
||||
Accessibility
|
||||
=============
|
||||
# Accessibility
|
||||
|
||||
Qemu provides support for using BrlAPI to display braille output on a
|
||||
real or fake device.
|
||||
|
||||
``` {.bash}
|
||||
quickemu --vm ubuntu-21.10.conf --braille --display sdl
|
||||
``` bash
|
||||
quickemu --vm ubuntu-22.04.conf --braille --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
|
||||
@ -470,8 +499,7 @@ configuration to enable legacy BIOS.
|
||||
|
||||
- `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
|
||||
@ -486,8 +514,7 @@ Add additional lines to your virtual machine configuration:
|
||||
- `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
|
||||
@ -499,16 +526,14 @@ configuration.
|
||||
|
||||
- `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:
|
||||
|
||||
- `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
|
||||
@ -516,14 +541,12 @@ to the VM configuration:
|
||||
|
||||
- `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.
|
||||
|
||||
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
|
||||
@ -531,22 +554,28 @@ the guest.
|
||||
|
||||
You can install the minimal Samba components on Ubuntu using:
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
sudo apt install --no-install-recommends samba
|
||||
```
|
||||
|
||||
SPICE WebDAV 🐧 🪟
|
||||
----------------
|
||||
If everything is set up correctly, the `smbd` address will be printed
|
||||
when the virtual machine is started. For example:
|
||||
|
||||
- smbd: On guest: smb://10.0.2.4/qemu
|
||||
|
||||
If using a Windows guest, right-click on "This PC", click "Add a network
|
||||
location", and paste this address, removing `smb:` and replacing forward
|
||||
slashes with backslashes (in this example `\\10.0.2.4\qemu`).
|
||||
|
||||
## SPICE WebDAV 🐧 🪟
|
||||
|
||||
- TBD
|
||||
|
||||
VirtIO-9P 🐧 🍏
|
||||
-------------
|
||||
## VirtIO-9P 🐧 🍏
|
||||
|
||||
- TBD
|
||||
|
||||
Network port forwarding
|
||||
=======================
|
||||
# Network port forwarding
|
||||
|
||||
Add an additional line to your virtual machine configuration. For
|
||||
example:
|
||||
@ -558,30 +587,26 @@ 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.
|
||||
|
||||
Bridged networking
|
||||
==================
|
||||
# Bridged networking
|
||||
|
||||
Connect your virtual machine to a preconfigured network bridge. Add an
|
||||
additional line to your virtual machine configuration
|
||||
|
||||
- `bridge="br0"`
|
||||
|
||||
USB redirection
|
||||
===============
|
||||
# USB redirection
|
||||
|
||||
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.
|
||||
|
||||
Host redirection **NOT Recommended**
|
||||
------------------------------------
|
||||
## 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
|
||||
@ -594,9 +619,9 @@ example:
|
||||
|
||||
In the example above:
|
||||
|
||||
- The USB device with vendor\_id 046d and product\_id 082d will be
|
||||
- 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
|
||||
- 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
|
||||
@ -608,55 +633,79 @@ like this:
|
||||
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.
|
||||
|
||||
All the options
|
||||
===============
|
||||
# All the options
|
||||
|
||||
Here are the usage instructions:
|
||||
|
||||
``` {.bash}
|
||||
|
||||
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
|
||||
<!-- [[[cog
|
||||
import subprocess
|
||||
|
||||
import cog
|
||||
# cannot use check_result() because of non-zero return
|
||||
result=subprocess.run(["./quickemu", "--help"], capture_output=True, text=True)
|
||||
help=result.stdout
|
||||
cog.out(f"```\n\n{help}\n\n```\n\n")
|
||||
]]] -->
|
||||
```
|
||||
|
||||
Desktop shortcuts
|
||||
-----------------
|
||||
|
||||
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', 'spice' or 'spice-app'
|
||||
--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.
|
||||
--viewer <viewer> : Choose an alternative viewer. @Options: 'spicy' (default), 'remote-viewer', 'none'
|
||||
--ssh-port <port> : Set ssh-port manually
|
||||
--spice-port <port> : Set spice-port manually
|
||||
--public-dir <path> : expose share directory. @Options: '' (default: xdg-user-dir PUBLICSHARE), '<directory>', 'none'
|
||||
--monitor <type> : Set monitor connection type. @Options: 'socket' (default), 'telnet', 'none'
|
||||
--monitor-telnet-host <ip/host> : Set telnet host for monitor. (default: 'localhost')
|
||||
--monitor-telnet-port <port> : Set telnet port for monitor. (default: '4440')
|
||||
--monitor-cmd <cmd> : Send command to monitor if available. (Example: system_powerdown)
|
||||
--serial <type> : Set serial connection type. @Options: 'socket' (default), 'telnet', 'none'
|
||||
--serial-telnet-host <ip/host> : Set telnet host for serial. (default: 'localhost')
|
||||
--serial-telnet-port <port> : Set telnet port for serial. (default: '6660')
|
||||
--keyboard <type> : Set keyboard. @Options: 'usb' (default), 'ps2', 'virtio'
|
||||
--keyboard_layout <layout> : Set keyboard layout.
|
||||
--mouse <type> : Set mouse. @Options: 'tablet' (default), 'ps2', 'usb', 'virtio'
|
||||
--usb-controller <type> : Set usb-controller. @Options: 'ehci' (default), 'xhci', 'none'
|
||||
--extra_args <arguments> : Pass additional arguments to qemu
|
||||
--version : Print version
|
||||
|
||||
|
||||
```
|
||||
<!-- [[[end]]] -->
|
||||
|
||||
## 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.
|
||||
|
||||
``` {.bash}
|
||||
quickemu --vm ubuntu-20.04-desktop.conf --shortcut
|
||||
``` bash
|
||||
quickemu --vm ubuntu-22.04-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.
|
||||
@ -677,13 +726,13 @@ 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}
|
||||
``` bash
|
||||
0: +*HDMI-0 2560/597x1440/336+1920+0 HDMI-0
|
||||
1: +DVI-D-0 1920/527x1080/296+0+0 DVI-D-0
|
||||
```
|
||||
@ -692,7 +741,7 @@ The first number is what needs to be passed to the `--screen` option.
|
||||
|
||||
For example:
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
quickemu --vm vm.conf --screen 0
|
||||
```
|
||||
|
||||
@ -701,8 +750,7 @@ 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.
|
||||
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 3ede604a11b7a666f91bb19705d32d73fb0bd4d7
|
||||
Subproject commit c881d8e4862a5810a4793f34626181667fde8f89
|
314
docs/quickemu.1
314
docs/quickemu.1
@ -1,6 +1,20 @@
|
||||
.\" Automatically generated by Pandoc 2.9.2.1
|
||||
.\" Automatically generated by Pandoc 2.18
|
||||
.\"
|
||||
.TH "QUICKEMU" "1" "February 20, 2022" "quickemu" "Quickemu User Manual"
|
||||
.\" Define V font for inline verbatim, using C font in formats
|
||||
.\" that render this, and otherwise B font.
|
||||
.ie "\f[CB]x\f[]"x" \{\
|
||||
. ftr V B
|
||||
. ftr VI BI
|
||||
. ftr VB B
|
||||
. ftr VBI BI
|
||||
.\}
|
||||
.el \{\
|
||||
. ftr V CR
|
||||
. ftr VI CI
|
||||
. ftr VB CB
|
||||
. ftr VBI CBI
|
||||
.\}
|
||||
.TH "QUICKEMU" "1" "August 1, 2022" "quickemu" "Quickemu User Manual"
|
||||
.hy
|
||||
.SH NAME
|
||||
.PP
|
||||
@ -61,8 +75,8 @@ Do not commit any changes to disk/snapshot.
|
||||
Print version
|
||||
.SH EXAMPLES
|
||||
.TP
|
||||
\f[B]quickemu \[en]vm ubuntu-mate-21.10-.conf\f[R]
|
||||
Launches the VM specified in the file \f[I]ubuntu-mate-21.10-.conf\f[R]
|
||||
\f[B]quickemu \[en]vm ubuntu-mate-22.04-.conf\f[R]
|
||||
Launches the VM specified in the file \f[I]ubuntu-mate-22.04-.conf\f[R]
|
||||
.SS Introduction
|
||||
.PP
|
||||
Quickly create and run highly optimised desktop virtual machines for
|
||||
@ -73,8 +87,8 @@ For example:
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
quickget ubuntu-mate 21.10
|
||||
quickemu --vm ubuntu-mate-21.10-.conf
|
||||
quickget ubuntu-mate 22.04
|
||||
quickemu --vm ubuntu-mate-22.04-.conf
|
||||
\f[R]
|
||||
.fi
|
||||
.PP
|
||||
@ -105,7 +119,7 @@ QEMU Guest Agent support (https://wiki.qemu.org/Features/GuestAgent);
|
||||
provides access to a system-level agent via standard QMP commands
|
||||
.IP \[bu] 2
|
||||
Samba file sharing for Linux, macOS and Windows guests (\f[I]if
|
||||
\f[CI]smbd\f[I] is installed on the host\f[R])
|
||||
\f[VI]smbd\f[I] is installed on the host\f[R])
|
||||
.IP \[bu] 2
|
||||
VirGL acceleration
|
||||
.IP \[bu] 2
|
||||
@ -181,10 +195,49 @@ xrandr (https://gitlab.freedesktop.org/xorg/app/xrandr)
|
||||
zsync (http://zsync.moria.org.uk/)
|
||||
.IP \[bu] 2
|
||||
unzip (http://www.info-zip.org/UnZip.html)
|
||||
.SS Installing Requirements
|
||||
.PP
|
||||
For Ubuntu, Arch and nixos systems the
|
||||
ppa (https://launchpad.net/~flexiondotorg/+archive/ubuntu/quickemu),
|
||||
AUR (https://aur.archlinux.org/packages/quickemu) or
|
||||
nix (https://github.com/NixOS/nixpkgs/tree/master/pkgs/development/quickemu)
|
||||
packaging will take care of the dependencies.
|
||||
For other host distributions or operating systems it will be necessary
|
||||
to install the above requirements or their equivalents.
|
||||
.PP
|
||||
These examples may save a little typing
|
||||
.PP
|
||||
Debian:
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
sudo apt install qemu bash coreutils ovmf grep jq lsb procps python3 genisoimage usbutils util-linux sed spice-client-gtk swtpm wget xdg-user-dirs zsync unzip
|
||||
\f[R]
|
||||
.fi
|
||||
.PP
|
||||
Fedora:
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
sudo dnf install qemu bash coreutils edk2-tools grep jq lsb procps python3 genisoimage usbutils util-linux sed spice-gtk-tools swtpm wget xdg-user-dirs xrandr unzip
|
||||
\f[R]
|
||||
.fi
|
||||
.PP
|
||||
MacOS:
|
||||
.PP
|
||||
This is a work in progress (see issue
|
||||
248 (https://github.com/quickemu-project/quickemu/issues/248) for other
|
||||
steps and changes that may enable running on MacOS)
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
brew install qemu bash coreutils grep jq python\[at]3.10 cdrtools gnu-sed spice-gtk wget zsync
|
||||
\f[R]
|
||||
.fi
|
||||
.SH Usage
|
||||
.SS Graphical User Interfaces
|
||||
.PP
|
||||
While \f[C]quickemu\f[R] and \f[C]quickget\f[R] are designed for the
|
||||
While \f[V]quickemu\f[R] and \f[V]quickget\f[R] are designed for the
|
||||
terminal, a graphical user interface is also available:
|
||||
.IP \[bu] 2
|
||||
\f[B]Quickgui (https://github.com/quickgui/quickgui)\f[R] by Mark
|
||||
@ -206,13 +259,13 @@ sudo apt install quickgui
|
||||
.fi
|
||||
.SS Ubuntu Guest
|
||||
.PP
|
||||
\f[C]quickget\f[R] will automatically download an Ubuntu release and
|
||||
\f[V]quickget\f[R] will automatically download an Ubuntu release and
|
||||
create the virtual machine configuration.
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
quickget ubuntu 20.04
|
||||
quickemu --vm ubuntu-20.04.conf
|
||||
quickget ubuntu 22.04
|
||||
quickemu --vm ubuntu-22.04.conf
|
||||
\f[R]
|
||||
.fi
|
||||
.IP \[bu] 2
|
||||
@ -221,24 +274,24 @@ Complete the installation as normal.
|
||||
Post-install:
|
||||
.RS 2
|
||||
.IP \[bu] 2
|
||||
Install the SPICE agent (\f[C]spice-vdagent\f[R]) to enable copy/paste
|
||||
Install the SPICE agent (\f[V]spice-vdagent\f[R]) to enable copy/paste
|
||||
and USB redirection
|
||||
.RS 2
|
||||
.IP \[bu] 2
|
||||
\f[C]sudo apt install spice-vdagent\f[R]
|
||||
\f[V]sudo apt install spice-vdagent\f[R]
|
||||
.RE
|
||||
.IP \[bu] 2
|
||||
Install the SPICE WebDAV agent (\f[C]spice-webdavd\f[R]) to enable file
|
||||
Install the SPICE WebDAV agent (\f[V]spice-webdavd\f[R]) to enable file
|
||||
sharing.
|
||||
.RS 2
|
||||
.IP \[bu] 2
|
||||
\f[C]sudo apt install spice-webdavd\f[R]
|
||||
\f[V]sudo apt install spice-webdavd\f[R]
|
||||
.RE
|
||||
.RE
|
||||
.SS Ubuntu devel (daily-live) images
|
||||
.PP
|
||||
\f[C]quickget\f[R] can also download/refresh devel images via
|
||||
\f[C]zsync\f[R] for Ubuntu developers and testers.
|
||||
\f[V]quickget\f[R] can also download/refresh devel images via
|
||||
\f[V]zsync\f[R] for Ubuntu developers and testers.
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
@ -247,106 +300,119 @@ quickemu --vm ubuntu-devel.conf
|
||||
\f[R]
|
||||
.fi
|
||||
.PP
|
||||
You can run \f[C]quickget ubuntu devel\f[R] to refresh your daily
|
||||
You can run \f[V]quickget ubuntu devel\f[R] to refresh your daily
|
||||
development image as often as you like, it will even automatically
|
||||
switch to a new series.
|
||||
.SS Ubuntu Flavours
|
||||
.PP
|
||||
All the official Ubuntu flavours are supported, just replace
|
||||
\f[C]ubuntu\f[R] with your preferred flavour.
|
||||
\f[V]ubuntu\f[R] with your preferred flavour.
|
||||
.IP \[bu] 2
|
||||
\f[C]kubuntu\f[R] (Kubuntu)
|
||||
\f[V]kubuntu\f[R] (Kubuntu)
|
||||
.IP \[bu] 2
|
||||
\f[C]lubuntu\f[R] (Lubuntu)
|
||||
\f[V]lubuntu\f[R] (Lubuntu)
|
||||
.IP \[bu] 2
|
||||
\f[C]ubuntu-budgie\f[R] (Ubuntu Budgie)
|
||||
\f[V]ubuntu-budgie\f[R] (Ubuntu Budgie)
|
||||
.IP \[bu] 2
|
||||
\f[C]ubuntukylin\f[R] (Ubuntu Kylin)
|
||||
\f[V]ubuntukylin\f[R] (Ubuntu Kylin)
|
||||
.IP \[bu] 2
|
||||
\f[C]ubuntu-mate\f[R] (Ubuntu MATE)
|
||||
\f[V]ubuntu-mate\f[R] (Ubuntu MATE)
|
||||
.IP \[bu] 2
|
||||
\f[C]ubuntustudio\f[R] (Ubuntu Studio)
|
||||
\f[V]ubuntustudio\f[R] (Ubuntu Studio)
|
||||
.IP \[bu] 2
|
||||
\f[C]ubuntu\f[R] (Ubuntu)
|
||||
\f[V]ubuntu\f[R] (Ubuntu)
|
||||
.IP \[bu] 2
|
||||
\f[C]xubuntu\f[R] (Xubuntu)
|
||||
\f[V]xubuntu\f[R] (Xubuntu)
|
||||
.SS Other Operating Systems
|
||||
.PP
|
||||
\f[C]quickget\f[R] also supports:
|
||||
\f[V]quickget\f[R] also supports:
|
||||
.SS Other Operating Systems
|
||||
.PP
|
||||
\f[V]quickget\f[R] also supports:
|
||||
.IP \[bu] 2
|
||||
\f[C]alma\f[R] (Alma Linux)
|
||||
\f[V]alma\f[R] (Alma Linux)
|
||||
.IP \[bu] 2
|
||||
\f[C]alpine\f[R] (Alpine Linux)
|
||||
\f[V]alpine\f[R] (Alpine Linux)
|
||||
.IP \[bu] 2
|
||||
\f[C]android\f[R] (Android x86)
|
||||
\f[V]android\f[R] (Android x86)
|
||||
.IP \[bu] 2
|
||||
\f[C]archlinux\f[R] (Arch Linux)
|
||||
\f[V]archlinux\f[R] (Arch Linux)
|
||||
.IP \[bu] 2
|
||||
\f[C]arcolinux\f[R] (Arco Linux)
|
||||
\f[V]arcolinux\f[R] (Arco Linux)
|
||||
.IP \[bu] 2
|
||||
\f[C]cachyos\f[R] (CachyOS)
|
||||
\f[V]batocera\f[R] (Batocera)
|
||||
.IP \[bu] 2
|
||||
\f[C]debian\f[R] (Debian)
|
||||
\f[V]cachyos\f[R] (CachyOS)
|
||||
.IP \[bu] 2
|
||||
\f[C]devuan\f[R] (Devuan)
|
||||
\f[V]centos-stream\f[R] (CentOS Stream)
|
||||
.IP \[bu] 2
|
||||
\f[C]dragonflybsd\f[R] (DragonFlyBSD)
|
||||
\f[V]debian\f[R] (Debian)
|
||||
.IP \[bu] 2
|
||||
\f[C]elementary\f[R] (elementary OS)
|
||||
\f[V]deepin\f[R] (Deepin)
|
||||
.IP \[bu] 2
|
||||
\f[C]fedora\f[R] (Fedora)
|
||||
\f[V]devuan\f[R] (Devuan)
|
||||
.IP \[bu] 2
|
||||
\f[C]freebsd\f[R] (FreeBSD)
|
||||
\f[V]dragonflybsd\f[R] (DragonFlyBSD)
|
||||
.IP \[bu] 2
|
||||
\f[C]freedos\f[R] (FreeDOS)
|
||||
\f[V]elementary\f[R] (elementary OS)
|
||||
.IP \[bu] 2
|
||||
\f[C]garuda\f[R] (Garuda Linux)
|
||||
\f[V]endeavouros\f[R] (EndeavourOS)
|
||||
.IP \[bu] 2
|
||||
\f[C]gentoo\f[R] (Gentoo)
|
||||
\f[V]fedora\f[R] (Fedora)
|
||||
.IP \[bu] 2
|
||||
\f[C]ghostbsd\f[R] (GhostBSD)
|
||||
\f[V]freebsd\f[R] (FreeBSD)
|
||||
.IP \[bu] 2
|
||||
\f[C]haiku\f[R] (Haiku)
|
||||
\f[V]freedos\f[R] (FreeDOS)
|
||||
.IP \[bu] 2
|
||||
\f[C]kali\f[R] (Kali)
|
||||
\f[V]garuda\f[R] (Garuda Linux)
|
||||
.IP \[bu] 2
|
||||
\f[C]kdeneon\f[R] (KDE Neon)
|
||||
\f[V]gentoo\f[R] (Gentoo)
|
||||
.IP \[bu] 2
|
||||
\f[C]kolibrios\f[R] (KolibriOS)
|
||||
\f[V]ghostbsd\f[R] (GhostBSD)
|
||||
.IP \[bu] 2
|
||||
\f[C]linuxmint\f[R] (Linux Mint)
|
||||
\f[V]haiku\f[R] (Haiku)
|
||||
.IP \[bu] 2
|
||||
\f[C]manjaro\f[R] (Manjaro)
|
||||
\f[V]kali\f[R] (Kali)
|
||||
.IP \[bu] 2
|
||||
\f[C]mxlinux\f[R] (MX Linux)
|
||||
\f[V]kdeneon\f[R] (KDE Neon)
|
||||
.IP \[bu] 2
|
||||
\f[C]netboot\f[R] (netboot.xyz)
|
||||
\f[V]kolibrios\f[R] (KolibriOS)
|
||||
.IP \[bu] 2
|
||||
\f[C]netbsd\f[R] (NetBSD)
|
||||
\f[V]linuxmint\f[R] (Linux Mint)
|
||||
.IP \[bu] 2
|
||||
\f[C]nixos\f[R] (NixOS)
|
||||
\f[V]lmde\f[R] (Linux Mint Debian Edition)
|
||||
.IP \[bu] 2
|
||||
\f[C]openbsd\f[R] (OpenBSD)
|
||||
\f[V]manjaro\f[R] (Manjaro)
|
||||
.IP \[bu] 2
|
||||
\f[C]opensuse\f[R] (openSUSE)
|
||||
\f[V]mxlinux\f[R] (MX Linux)
|
||||
.IP \[bu] 2
|
||||
\f[C]oraclelinux\f[R] (Oracle Linux)
|
||||
\f[V]netboot\f[R] (netboot.xyz)
|
||||
.IP \[bu] 2
|
||||
\f[C]popos\f[R] (Pop!_OS)
|
||||
\f[V]netbsd\f[R] (NetBSD)
|
||||
.IP \[bu] 2
|
||||
\f[C]regolith\f[R] (Regolith Linux)
|
||||
\f[V]nixos\f[R] (NixOS)
|
||||
.IP \[bu] 2
|
||||
\f[C]rockylinux\f[R] (Rocky Linux)
|
||||
\f[V]openbsd\f[R] (OpenBSD)
|
||||
.IP \[bu] 2
|
||||
\f[C]slackware\f[R] (Slackware)
|
||||
\f[V]opensuse\f[R] (openSUSE)
|
||||
.IP \[bu] 2
|
||||
\f[C]solus\f[R] (Solus)
|
||||
\f[V]oraclelinux\f[R] (Oracle Linux)
|
||||
.IP \[bu] 2
|
||||
\f[C]tails\f[R] (Tails)
|
||||
\f[V]popos\f[R] (Pop!_OS)
|
||||
.IP \[bu] 2
|
||||
\f[C]void\f[R] (Void Linux)
|
||||
\f[V]regolith\f[R] (Regolith Linux)
|
||||
.IP \[bu] 2
|
||||
\f[C]zorin\f[R] (Zorin OS)
|
||||
\f[V]rockylinux\f[R] (Rocky Linux)
|
||||
.IP \[bu] 2
|
||||
\f[V]slackware\f[R] (Slackware)
|
||||
.IP \[bu] 2
|
||||
\f[V]solus\f[R] (Solus)
|
||||
.IP \[bu] 2
|
||||
\f[V]tails\f[R] (Tails)
|
||||
.IP \[bu] 2
|
||||
\f[V]void\f[R] (Void Linux)
|
||||
.IP \[bu] 2
|
||||
\f[V]zorin\f[R] (Zorin OS)
|
||||
.PP
|
||||
Or you can download a Linux image and manually create a VM
|
||||
configuration.
|
||||
@ -354,7 +420,7 @@ configuration.
|
||||
Download a .iso image of a Linux distribution
|
||||
.IP \[bu] 2
|
||||
Create a VM configuration file; for example
|
||||
\f[C]debian-bullseye.conf\f[R]
|
||||
\f[V]debian-bullseye.conf\f[R]
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
@ -364,7 +430,7 @@ iso=\[dq]debian-bullseye/firmware-11.0.0-amd64-DVD-1.iso\[dq]
|
||||
\f[R]
|
||||
.fi
|
||||
.IP \[bu] 2
|
||||
Use \f[C]quickemu\f[R] to start the virtual machine:
|
||||
Use \f[V]quickemu\f[R] to start the virtual machine:
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
@ -377,15 +443,15 @@ Complete the installation as normal.
|
||||
Post-install:
|
||||
.RS 2
|
||||
.IP \[bu] 2
|
||||
Install the SPICE agent (\f[C]spice-vdagent\f[R]) to enable copy/paste
|
||||
Install the SPICE agent (\f[V]spice-vdagent\f[R]) to enable copy/paste
|
||||
and USB redirection.
|
||||
.IP \[bu] 2
|
||||
Install the SPICE WebDAV agent (\f[C]spice-webdavd\f[R]) to enable file
|
||||
Install the SPICE WebDAV agent (\f[V]spice-webdavd\f[R]) to enable file
|
||||
sharing.
|
||||
.RE
|
||||
.SS macOS Guest
|
||||
.PP
|
||||
\f[C]quickget\f[R] automatically downloads a macOS recovery image and
|
||||
\f[V]quickget\f[R] automatically downloads a macOS recovery image and
|
||||
creates a virtual machine configuration.
|
||||
.IP
|
||||
.nf
|
||||
@ -395,8 +461,8 @@ quickemu --vm macos-catalina.conf
|
||||
\f[R]
|
||||
.fi
|
||||
.PP
|
||||
macOS \f[C]high-sierra\f[R], \f[C]mojave\f[R], \f[C]catalina\f[R],
|
||||
\f[C]big-sur\f[R] and \f[C]monterey\f[R] are supported.
|
||||
macOS \f[V]high-sierra\f[R], \f[V]mojave\f[R], \f[V]catalina\f[R],
|
||||
\f[V]big-sur\f[R] and \f[V]monterey\f[R] are supported.
|
||||
.IP \[bu] 2
|
||||
Use cursor keys and enter key to select the \f[B]macOS Base System\f[R]
|
||||
.IP \[bu] 2
|
||||
@ -409,19 +475,19 @@ Click \f[B]Disk Utility\f[R] and \f[B]Continue\f[R]
|
||||
On macOS Catalina, Big Sur & Monterey
|
||||
.RS 2
|
||||
.IP \[bu] 2
|
||||
Select \f[C]Apple Inc. VirtIO Block Media\f[R] from the list and click
|
||||
Select \f[V]Apple Inc. VirtIO Block Media\f[R] from the list and click
|
||||
\f[B]Erase\f[R].
|
||||
.RE
|
||||
.IP \[bu] 2
|
||||
On macOS Mojave and High Sierra
|
||||
.RS 2
|
||||
.IP \[bu] 2
|
||||
Select \f[C]QEMU HARDDISK Media\f[R] (\[ti]103.08GB) from the list and
|
||||
Select \f[V]QEMU HARDDISK Media\f[R] (\[ti]103.08GB) from the list and
|
||||
click \f[B]Erase\f[R].
|
||||
.RE
|
||||
.RE
|
||||
.IP \[bu] 2
|
||||
Enter a \f[C]Name:\f[R] for the disk and click \f[B]Erase\f[R].
|
||||
Enter a \f[V]Name:\f[R] for the disk and click \f[B]Erase\f[R].
|
||||
.IP \[bu] 2
|
||||
Click \f[B]Done\f[R].
|
||||
.IP \[bu] 2
|
||||
@ -455,10 +521,10 @@ macos_release=\[dq]catalina\[dq]
|
||||
\f[R]
|
||||
.fi
|
||||
.IP \[bu] 2
|
||||
\f[C]guest_os=\[dq]macos\[dq]\f[R] instructs Quickemu to optimise for
|
||||
\f[V]guest_os=\[dq]macos\[dq]\f[R] instructs Quickemu to optimise for
|
||||
macOS.
|
||||
.IP \[bu] 2
|
||||
\f[C]macos_release=\[dq]catalina\[dq]\f[R] instructs Quickemu to
|
||||
\f[V]macos_release=\[dq]catalina\[dq]\f[R] instructs Quickemu to
|
||||
optimise for a particular macOS release.
|
||||
.RS 2
|
||||
.IP \[bu] 2
|
||||
@ -486,7 +552,7 @@ Big Sur
|
||||
Monterey
|
||||
.RE
|
||||
.IP \[bu] 2
|
||||
\f[C]quickemu\f[R] will automatically download the required
|
||||
\f[V]quickemu\f[R] will automatically download the required
|
||||
OpenCore (https://github.com/acidanthera/OpenCorePkg) bootloader and
|
||||
OVMF firmware from OSX-KVM (https://github.com/kholia/OSX-KVM).
|
||||
.IP \[bu] 2
|
||||
@ -499,11 +565,11 @@ VirtIO Block
|
||||
Media (https://www.kraxel.org/blog/2019/06/macos-qemu-guest/) is used
|
||||
for the system disk where supported.
|
||||
.IP \[bu] 2
|
||||
VirtIO \f[C]usb-tablet\f[R] (http://philjordan.eu/osx-virt/) is used for
|
||||
VirtIO \f[V]usb-tablet\f[R] (http://philjordan.eu/osx-virt/) is used for
|
||||
the mouse.
|
||||
.IP \[bu] 2
|
||||
VirtIO Network (\f[C]virtio-net\f[R]) is supported and enabled on macOS
|
||||
Big Sur and newer but previous releases use \f[C]vmxnet3\f[R].
|
||||
VirtIO Network (\f[V]virtio-net\f[R]) is supported and enabled on macOS
|
||||
Big Sur and newer but previous releases use \f[V]vmxnet3\f[R].
|
||||
.IP \[bu] 2
|
||||
VirtIO Memory Ballooning is supported and enabled on macOS Big Sur and
|
||||
newer but disabled for other support macOS releases.
|
||||
@ -532,7 +598,7 @@ webdavd (https://gitlab.gnome.org/GNOME/phodav/-/merge_requests/24).
|
||||
Copy/paste via SPICE agent is \f[B]not available on macOS\f[R].
|
||||
.SS Windows 8.1, 10 & 11 Guests
|
||||
.PP
|
||||
\f[C]quickget\f[R] can automatically download Windows 8.1, Windows
|
||||
\f[V]quickget\f[R] 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
|
||||
@ -549,9 +615,18 @@ quickemu --vm windows-11.conf
|
||||
Complete the installation as you normally would.
|
||||
.IP \[bu] 2
|
||||
All relevant drivers and services should be installed automatically.
|
||||
.IP \[bu] 2
|
||||
A local adminstrator user account is automatically created, with these
|
||||
credentials:
|
||||
.RS 2
|
||||
.IP \[bu] 2
|
||||
Username: \f[V]Quickemu\f[R]
|
||||
.IP \[bu] 2
|
||||
Password: \f[V]quickemu\f[R]
|
||||
.RE
|
||||
.SS Regional versions
|
||||
.PP
|
||||
By default \f[C]quickget\f[R] will download the \f[I]\[lq]English
|
||||
By default \f[V]quickget\f[R] will download the \f[I]\[lq]English
|
||||
International\[rq]\f[R] release, but you can optionally specify one of
|
||||
the supported languages: For example:
|
||||
.IP
|
||||
@ -570,74 +645,89 @@ disk_img=\[dq]windows-11/disk.qcow2\[dq]
|
||||
iso=\[dq]windows-11/Win11_EnglishInternational_x64.iso\[dq]
|
||||
fixed_iso=\[dq]windows-11/virtio-win.iso\[dq]
|
||||
tpm=\[dq]on\[dq]
|
||||
secureboot=\[dq]on\[dq]
|
||||
\f[R]
|
||||
.fi
|
||||
.IP \[bu] 2
|
||||
\f[C]guest_os=\[dq]windows\[dq]\f[R] instructs \f[C]quickemu\f[R] to
|
||||
\f[V]guest_os=\[dq]windows\[dq]\f[R] instructs \f[V]quickemu\f[R] to
|
||||
optimise for Windows.
|
||||
.IP \[bu] 2
|
||||
\f[C]fixed_iso=\f[R] specifies the ISO image that provides VirtIO
|
||||
\f[V]fixed_iso=\f[R] specifies the ISO image that provides VirtIO
|
||||
drivers.
|
||||
.IP \[bu] 2
|
||||
\f[C]tpm=\[dq]on\[dq]\f[R] instructs \f[C]quickemu\f[R] to create a
|
||||
software emulated TPM device using \f[C]swtpm\f[R].
|
||||
\f[V]tpm=\[dq]on\[dq]\f[R] instructs \f[V]quickemu\f[R] to create a
|
||||
software emulated TPM device using \f[V]swtpm\f[R].
|
||||
.SH All the options
|
||||
.PP
|
||||
Here are the usage instructions:
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
|
||||
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\[aq]s configuration
|
||||
--display : Select display backend. \[aq]sdl\[aq] (default), \[aq]gtk\[aq], \[aq]none\[aq], or \[aq]spice\[aq]
|
||||
--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
|
||||
|
||||
--braille : Enable braille support. Requires SDL.
|
||||
--delete-disk : Delete the disk image and EFI variables
|
||||
--delete-vm : Delete the entire VM and it\[aq]s configuration
|
||||
--display : Select display backend. \[aq]sdl\[aq] (default), \[aq]gtk\[aq], \[aq]none\[aq], \[aq]spice\[aq] or \[aq]spice-app\[aq]
|
||||
--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.
|
||||
--viewer <viewer> : Choose an alternative viewer. \[at]Options: \[aq]spicy\[aq] (default), \[aq]remote-viewer\[aq], \[aq]none\[aq]
|
||||
--ssh-port <port> : Set ssh-port manually
|
||||
--spice-port <port> : Set spice-port manually
|
||||
--public-dir <path> : expose share directory. \[at]Options: \[aq]\[aq] (default: xdg-user-dir PUBLICSHARE), \[aq]<directory>\[aq], \[aq]none\[aq]
|
||||
--monitor <type> : Set monitor connection type. \[at]Options: \[aq]socket\[aq] (default), \[aq]telnet\[aq], \[aq]none\[aq]
|
||||
--monitor-telnet-host <ip/host> : Set telnet host for monitor. (default: \[aq]localhost\[aq])
|
||||
--monitor-telnet-port <port> : Set telnet port for monitor. (default: \[aq]4440\[aq])
|
||||
--monitor-cmd <cmd> : Send command to monitor if available. (Example: system_powerdown)
|
||||
--serial <type> : Set serial connection type. \[at]Options: \[aq]socket\[aq] (default), \[aq]telnet\[aq], \[aq]none\[aq]
|
||||
--serial-telnet-host <ip/host> : Set telnet host for serial. (default: \[aq]localhost\[aq])
|
||||
--serial-telnet-port <port> : Set telnet port for serial. (default: \[aq]6660\[aq])
|
||||
--keyboard <type> : Set keyboard. \[at]Options: \[aq]usb\[aq] (default), \[aq]ps2\[aq], \[aq]virtio\[aq]
|
||||
--keyboard_layout <layout> : Set keyboard layout.
|
||||
--mouse <type> : Set mouse. \[at]Options: \[aq]tablet\[aq] (default), \[aq]ps2\[aq], \[aq]usb\[aq], \[aq]virtio\[aq]
|
||||
--usb-controller <type> : Set usb-controller. \[at]Options: \[aq]ehci\[aq] (default), \[aq]xhci\[aq], \[aq]none\[aq]
|
||||
--extra_args <arguments> : Pass additional arguments to qemu
|
||||
--version : Print version
|
||||
\f[R]
|
||||
.fi
|
||||
.SS Desktop shortcuts
|
||||
.PP
|
||||
Desktop shortcuts can be created for a VM, the shortcuts are saved in
|
||||
\f[C]\[ti]/.local/share/applications\f[R].
|
||||
\f[V]\[ti]/.local/share/applications\f[R].
|
||||
Here is an example of how to create a shortcut.
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
quickemu --vm ubuntu-20.04-desktop.conf --shortcut
|
||||
quickemu --vm ubuntu-22.04-desktop.conf --shortcut
|
||||
\f[R]
|
||||
.fi
|
||||
.SS Screen and window size (Linux guests only)
|
||||
.PP
|
||||
\f[C]qemu\f[R] will always default to the primary monitor to display the
|
||||
\f[V]qemu\f[R] will always default to the primary monitor to display the
|
||||
VM\[cq]s window.
|
||||
.PP
|
||||
Without the \f[C]--screen\f[R] option, \f[C]quickemu\f[R] will look for
|
||||
Without the \f[V]--screen\f[R] option, \f[V]quickemu\f[R] will look for
|
||||
the size of the smallest monitor, and use a size that fits on said
|
||||
monitor.
|
||||
.PP
|
||||
The \f[C]--screen\f[R] option forces \f[C]quickemu\f[R] to use the size
|
||||
The \f[V]--screen\f[R] option forces \f[V]quickemu\f[R] to use the size
|
||||
of the given monitor to compute the size of the window.
|
||||
\f[B]It won\[cq]t use that monitor to display the VM\[cq]s window if
|
||||
it\[cq]s not the primary monitor\f[R].
|
||||
This is useful if the primary monitor if not the smallest one, and if
|
||||
the VM\[cq]s window doesn\[cq]t need to be moved around.
|
||||
.PP
|
||||
The \f[C]--screen\f[R] option is also useful with the
|
||||
\f[C]--fullscreen\f[R] option, again because \f[C]qemu\f[R] will always
|
||||
The \f[V]--screen\f[R] option is also useful with the
|
||||
\f[V]--fullscreen\f[R] option, again because \f[V]qemu\f[R] will always
|
||||
use the primary monitor.
|
||||
In order for the fullscreen mode to work properly, the resolution of the
|
||||
VM\[cq]s window must match the resolution of the screen.
|
||||
@ -659,7 +749,7 @@ The command will output something like this:
|
||||
\f[R]
|
||||
.fi
|
||||
.PP
|
||||
The first number is what needs to be passed to the \f[C]--screen\f[R]
|
||||
The first number is what needs to be passed to the \f[V]--screen\f[R]
|
||||
option.
|
||||
.PP
|
||||
For example:
|
||||
@ -672,7 +762,7 @@ quickemu --vm vm.conf --screen 0
|
||||
.PP
|
||||
The above uses the 2560x1440 screen to compute the size of the window,
|
||||
which Quickemu sizes to 2048x1152.
|
||||
Without the \f[C]--screen\f[R] option, Quickemu would have used the
|
||||
Without the \f[V]--screen\f[R] option, Quickemu would have used the
|
||||
1920x1080 monitor which results in a window size of 1664x936.
|
||||
.SH References
|
||||
.PP
|
||||
|
@ -1,30 +1,26 @@
|
||||
---
|
||||
author: Martin Wimpress
|
||||
date: 'February 20, 2022'
|
||||
date: August 1, 2022
|
||||
footer: quickemu
|
||||
header: Quickemu User Manual
|
||||
section: 1
|
||||
title: QUICKEMU
|
||||
---
|
||||
|
||||
NAME
|
||||
====
|
||||
# NAME
|
||||
|
||||
quickemu - A quick VM builder and manager
|
||||
|
||||
SYNOPSIS
|
||||
========
|
||||
# SYNOPSIS
|
||||
|
||||
**quickemu** \[*OPTION*\]...
|
||||
|
||||
DESCRIPTION
|
||||
===========
|
||||
# DESCRIPTION
|
||||
|
||||
**quickemu** will create and run highly optimised desktop virtual
|
||||
machines for Linux, macOS and Windows
|
||||
|
||||
OPTIONS
|
||||
=======
|
||||
# OPTIONS
|
||||
|
||||
**--vm**
|
||||
: vm configuration file
|
||||
@ -70,23 +66,21 @@ You can also pass optional parameters
|
||||
**--version**
|
||||
: Print version
|
||||
|
||||
EXAMPLES
|
||||
========
|
||||
# EXAMPLES
|
||||
|
||||
**quickemu --vm ubuntu-mate-21.10-.conf**
|
||||
: Launches the VM specified in the file *ubuntu-mate-21.10-.conf*
|
||||
**quickemu --vm ubuntu-mate-22.04-.conf**
|
||||
: Launches the VM specified in the file *ubuntu-mate-22.04-.conf*
|
||||
|
||||
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:
|
||||
|
||||
``` {.bash}
|
||||
quickget ubuntu-mate 21.10
|
||||
quickemu --vm ubuntu-mate-21.10-.conf
|
||||
``` bash
|
||||
quickget ubuntu-mate 22.04
|
||||
quickemu --vm ubuntu-mate-22.04-.conf
|
||||
```
|
||||
|
||||
The original objective of the project was to enable quick testing of
|
||||
@ -96,8 +90,7 @@ and no elevated permissions are required to run the virtual machines.
|
||||
**Quickemu now also includes comprehensive support for macOS and
|
||||
Windows**.
|
||||
|
||||
Features
|
||||
--------
|
||||
## Features
|
||||
|
||||
- **macOS** Monterey, Big Sur, Catalina, Mojave & High Sierra
|
||||
- **Windows** 8.1, 10 and 11 including TPM 2.0
|
||||
@ -135,8 +128,7 @@ Quickemu.
|
||||
[](https://www.youtube.com/watch?v=AOTYWEgw0hI)
|
||||
|
||||
Requirements
|
||||
------------
|
||||
## Requirements
|
||||
|
||||
- [QEMU](https://www.qemu.org/) (*6.0.0 or newer*) **with GTK, SDL,
|
||||
SPICE & VirtFS support**
|
||||
@ -161,11 +153,37 @@ Requirements
|
||||
- [zsync](http://zsync.moria.org.uk/)
|
||||
- [unzip](http://www.info-zip.org/UnZip.html)
|
||||
|
||||
Usage
|
||||
=====
|
||||
### Installing Requirements
|
||||
|
||||
Graphical User Interfaces
|
||||
-------------------------
|
||||
For Ubuntu, Arch and nixos systems the
|
||||
[ppa](https://launchpad.net/~flexiondotorg/+archive/ubuntu/quickemu),
|
||||
[AUR](https://aur.archlinux.org/packages/quickemu) or
|
||||
[nix](https://github.com/NixOS/nixpkgs/tree/master/pkgs/development/quickemu)
|
||||
packaging will take care of the dependencies. For other host
|
||||
distributions or operating systems it will be necessary to install the
|
||||
above requirements or their equivalents.
|
||||
|
||||
These examples may save a little typing
|
||||
|
||||
Debian:
|
||||
|
||||
sudo apt install qemu bash coreutils ovmf grep jq lsb procps python3 genisoimage usbutils util-linux sed spice-client-gtk swtpm wget xdg-user-dirs zsync unzip
|
||||
|
||||
Fedora:
|
||||
|
||||
sudo dnf install qemu bash coreutils edk2-tools grep jq lsb procps python3 genisoimage usbutils util-linux sed spice-gtk-tools swtpm wget xdg-user-dirs xrandr unzip
|
||||
|
||||
MacOS:
|
||||
|
||||
This is a work in progress (see [issue
|
||||
248](https://github.com/quickemu-project/quickemu/issues/248) for other
|
||||
steps and changes that may enable running on MacOS)
|
||||
|
||||
brew install qemu bash coreutils grep jq python@3.10 cdrtools gnu-sed spice-gtk wget zsync
|
||||
|
||||
# Usage
|
||||
|
||||
## Graphical User Interfaces
|
||||
|
||||
While `quickemu` and `quickget` are designed for the terminal, a
|
||||
graphical user interface is also available:
|
||||
@ -180,21 +198,20 @@ Many thanks to [Luke Wesley-Holley](https://github.com/Lukewh) and
|
||||
|
||||
### Quickgui for Ubuntu
|
||||
|
||||
``` {.bash}
|
||||
``` 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}
|
||||
quickget ubuntu 20.04
|
||||
quickemu --vm ubuntu-20.04.conf
|
||||
``` bash
|
||||
quickget ubuntu 22.04
|
||||
quickemu --vm ubuntu-22.04.conf
|
||||
```
|
||||
|
||||
- Complete the installation as normal.
|
||||
@ -211,7 +228,7 @@ quickemu --vm ubuntu-20.04.conf
|
||||
`quickget` can also download/refresh devel images via `zsync` for Ubuntu
|
||||
developers and testers.
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
quickget ubuntu devel
|
||||
quickemu --vm ubuntu-devel.conf
|
||||
```
|
||||
@ -234,8 +251,11 @@ with your preferred flavour.
|
||||
- `ubuntu` (Ubuntu)
|
||||
- `xubuntu` (Xubuntu)
|
||||
|
||||
Other Operating Systems
|
||||
-----------------------
|
||||
## Other Operating Systems
|
||||
|
||||
`quickget` also supports:
|
||||
|
||||
## Other Operating Systems
|
||||
|
||||
`quickget` also supports:
|
||||
|
||||
@ -244,11 +264,15 @@ Other Operating Systems
|
||||
- `android` (Android x86)
|
||||
- `archlinux` (Arch Linux)
|
||||
- `arcolinux` (Arco Linux)
|
||||
- `batocera` (Batocera)
|
||||
- `cachyos` (CachyOS)
|
||||
- `centos-stream` (CentOS Stream)
|
||||
- `debian` (Debian)
|
||||
- `deepin` (Deepin)
|
||||
- `devuan` (Devuan)
|
||||
- `dragonflybsd` (DragonFlyBSD)
|
||||
- `elementary` (elementary OS)
|
||||
- `endeavouros` (EndeavourOS)
|
||||
- `fedora` (Fedora)
|
||||
- `freebsd` (FreeBSD)
|
||||
- `freedos` (FreeDOS)
|
||||
@ -260,6 +284,7 @@ Other Operating Systems
|
||||
- `kdeneon` (KDE Neon)
|
||||
- `kolibrios` (KolibriOS)
|
||||
- `linuxmint` (Linux Mint)
|
||||
- `lmde` (Linux Mint Debian Edition)
|
||||
- `manjaro` (Manjaro)
|
||||
- `mxlinux` (MX Linux)
|
||||
- `netboot` (netboot.xyz)
|
||||
@ -283,7 +308,7 @@ configuration.
|
||||
- Download a .iso image of a Linux distribution
|
||||
- Create a VM configuration file; for example `debian-bullseye.conf`
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
guest_os="linux"
|
||||
disk_img="debian-bullseye/disk.qcow2"
|
||||
iso="debian-bullseye/firmware-11.0.0-amd64-DVD-1.iso"
|
||||
@ -291,7 +316,7 @@ iso="debian-bullseye/firmware-11.0.0-amd64-DVD-1.iso"
|
||||
|
||||
- Use `quickemu` to start the virtual machine:
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
quickemu --vm debian-bullseye.conf
|
||||
```
|
||||
|
||||
@ -302,13 +327,12 @@ quickemu --vm debian-bullseye.conf
|
||||
- Install the SPICE WebDAV agent (`spice-webdavd`) to enable file
|
||||
sharing.
|
||||
|
||||
macOS Guest
|
||||
-----------
|
||||
## macOS Guest
|
||||
|
||||
`quickget` automatically downloads a macOS recovery image and creates a
|
||||
virtual machine configuration.
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
quickget macos catalina
|
||||
quickemu --vm macos-catalina.conf
|
||||
```
|
||||
@ -338,7 +362,7 @@ supported.
|
||||
|
||||
The default macOS configuration looks like this:
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
guest_os="macos"
|
||||
img="macos-catalina/RecoveryImage.img"
|
||||
disk_img="macos-catalina/disk.qcow2"
|
||||
@ -389,8 +413,7 @@ There are some considerations when running macOS via Quickemu.
|
||||
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
|
||||
---------------------------
|
||||
## 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
|
||||
@ -400,13 +423,17 @@ 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.
|
||||
- A local adminstrator user account is automatically created, with
|
||||
these credentials:
|
||||
- Username: `Quickemu`
|
||||
- Password: `quickemu`
|
||||
|
||||
### Regional versions
|
||||
|
||||
@ -414,18 +441,19 @@ 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"
|
||||
fixed_iso="windows-11/virtio-win.iso"
|
||||
tpm="on"
|
||||
secureboot="on"
|
||||
```
|
||||
|
||||
- `guest_os="windows"` instructs `quickemu` to optimise for Windows.
|
||||
@ -433,47 +461,60 @@ tpm="on"
|
||||
- `tpm="on"` instructs `quickemu` to create a software emulated TPM
|
||||
device using `swtpm`.
|
||||
|
||||
All the options
|
||||
===============
|
||||
# All the options
|
||||
|
||||
Here are the usage instructions:
|
||||
|
||||
``` {.bash}
|
||||
|
||||
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
|
||||
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', 'spice' or 'spice-app'
|
||||
--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.
|
||||
--viewer <viewer> : Choose an alternative viewer. @Options: 'spicy' (default), 'remote-viewer', 'none'
|
||||
--ssh-port <port> : Set ssh-port manually
|
||||
--spice-port <port> : Set spice-port manually
|
||||
--public-dir <path> : expose share directory. @Options: '' (default: xdg-user-dir PUBLICSHARE), '<directory>', 'none'
|
||||
--monitor <type> : Set monitor connection type. @Options: 'socket' (default), 'telnet', 'none'
|
||||
--monitor-telnet-host <ip/host> : Set telnet host for monitor. (default: 'localhost')
|
||||
--monitor-telnet-port <port> : Set telnet port for monitor. (default: '4440')
|
||||
--monitor-cmd <cmd> : Send command to monitor if available. (Example: system_powerdown)
|
||||
--serial <type> : Set serial connection type. @Options: 'socket' (default), 'telnet', 'none'
|
||||
--serial-telnet-host <ip/host> : Set telnet host for serial. (default: 'localhost')
|
||||
--serial-telnet-port <port> : Set telnet port for serial. (default: '6660')
|
||||
--keyboard <type> : Set keyboard. @Options: 'usb' (default), 'ps2', 'virtio'
|
||||
--keyboard_layout <layout> : Set keyboard layout.
|
||||
--mouse <type> : Set mouse. @Options: 'tablet' (default), 'ps2', 'usb', 'virtio'
|
||||
--usb-controller <type> : Set usb-controller. @Options: 'ehci' (default), 'xhci', 'none'
|
||||
--extra_args <arguments> : Pass additional arguments to qemu
|
||||
--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.
|
||||
|
||||
``` {.bash}
|
||||
quickemu --vm ubuntu-20.04-desktop.conf --shortcut
|
||||
``` bash
|
||||
quickemu --vm ubuntu-22.04-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.
|
||||
@ -494,13 +535,13 @@ 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}
|
||||
``` bash
|
||||
0: +*HDMI-0 2560/597x1440/336+1920+0 HDMI-0
|
||||
1: +DVI-D-0 1920/527x1080/296+0+0 DVI-D-0
|
||||
```
|
||||
@ -509,7 +550,7 @@ The first number is what needs to be passed to the `--screen` option.
|
||||
|
||||
For example:
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
quickemu --vm vm.conf --screen 0
|
||||
```
|
||||
|
||||
@ -518,8 +559,7 @@ 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.
|
||||
|
||||
@ -556,20 +596,17 @@ Useful reference that assisted the development of Quickemu.
|
||||
- <https://superuser.com/questions/628169/how-to-share-a-directory-with-the-host-without-networking-in-qemu>
|
||||
- <https://virtio-fs.gitlab.io/>
|
||||
|
||||
AUTHORS
|
||||
=======
|
||||
# AUTHORS
|
||||
|
||||
Written by Martin Wimpress.
|
||||
|
||||
BUGS
|
||||
====
|
||||
# BUGS
|
||||
|
||||
Submit bug reports online at:
|
||||
<https://github.com/quickemu-project/quickemu/issues>
|
||||
|
||||
SEE ALSO
|
||||
========
|
||||
# SEE ALSO
|
||||
|
||||
Full sources at: <https://github.com/quickemu-project/quickemu>
|
||||
|
||||
quickemu\_conf(1), quickget(1), quickgui(1)
|
||||
quickemu_conf(1), quickget(1), quickgui(1)
|
||||
|
@ -1,6 +1,20 @@
|
||||
.\" Automatically generated by Pandoc 2.9.2.1
|
||||
.\" Automatically generated by Pandoc 2.18
|
||||
.\"
|
||||
.TH "QUICKEMU_CONF" "1" "February 20, 2022" "quickemu_conf" "Quickemu Configuration Manual"
|
||||
.\" Define V font for inline verbatim, using C font in formats
|
||||
.\" that render this, and otherwise B font.
|
||||
.ie "\f[CB]x\f[]"x" \{\
|
||||
. ftr V B
|
||||
. ftr VI BI
|
||||
. ftr VB B
|
||||
. ftr VBI BI
|
||||
.\}
|
||||
.el \{\
|
||||
. ftr V CR
|
||||
. ftr VI CI
|
||||
. ftr VB CB
|
||||
. ftr VBI CBI
|
||||
.\}
|
||||
.TH "QUICKEMU_CONF" "1" "August 1, 2022" "quickemu_conf" "Quickemu Configuration Manual"
|
||||
.hy
|
||||
.SH NAME
|
||||
.PP
|
||||
@ -60,10 +74,10 @@ macos_release=\[dq]catalina\[dq]
|
||||
\f[R]
|
||||
.fi
|
||||
.IP \[bu] 2
|
||||
\f[C]guest_os=\[dq]macos\[dq]\f[R] instructs Quickemu to optimise for
|
||||
\f[V]guest_os=\[dq]macos\[dq]\f[R] instructs Quickemu to optimise for
|
||||
macOS.
|
||||
.IP \[bu] 2
|
||||
\f[C]macos_release=\[dq]catalina\[dq]\f[R] instructs Quickemu to
|
||||
\f[V]macos_release=\[dq]catalina\[dq]\f[R] instructs Quickemu to
|
||||
optimise for a particular macOS release.
|
||||
.RS 2
|
||||
.IP \[bu] 2
|
||||
@ -86,21 +100,21 @@ tpm=\[dq]on\[dq]
|
||||
\f[R]
|
||||
.fi
|
||||
.IP \[bu] 2
|
||||
\f[C]guest_os=\[dq]windows\[dq]\f[R] instructs \f[C]quickemu\f[R] to
|
||||
\f[V]guest_os=\[dq]windows\[dq]\f[R] instructs \f[V]quickemu\f[R] to
|
||||
optimise for Windows.
|
||||
.IP \[bu] 2
|
||||
\f[C]fixed_iso=\f[R] specifies the ISO image that provides VirtIO
|
||||
\f[V]fixed_iso=\f[R] specifies the ISO image that provides VirtIO
|
||||
drivers.
|
||||
.IP \[bu] 2
|
||||
\f[C]tpm=\[dq]on\[dq]\f[R] instructs \f[C]quickemu\f[R] to create a
|
||||
software emulated TPM device using \f[C]swtpm\f[R].
|
||||
\f[V]tpm=\[dq]on\[dq]\f[R] instructs \f[V]quickemu\f[R] to create a
|
||||
software emulated TPM device using \f[V]swtpm\f[R].
|
||||
.SH BIOS and EFI
|
||||
.PP
|
||||
Since Quickemu 2.1.0 \f[C]efi\f[R] is the default boot option.
|
||||
Since Quickemu 2.1.0 \f[V]efi\f[R] 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.
|
||||
.IP \[bu] 2
|
||||
\f[C]boot=\[dq]legacy\[dq]\f[R] - Enable Legacy BIOS boot
|
||||
\f[V]boot=\[dq]legacy\[dq]\f[R] - Enable Legacy BIOS boot
|
||||
.SH Tuning CPU cores, RAM & disks
|
||||
.PP
|
||||
By default, Quickemu will calculate the number of CPUs cores and RAM to
|
||||
@ -110,18 +124,18 @@ your liking.
|
||||
.PP
|
||||
Add additional lines to your virtual machine configuration:
|
||||
.IP \[bu] 2
|
||||
\f[C]cpu_cores=\[dq]4\[dq]\f[R] - Specify the number of CPU cores
|
||||
\f[V]cpu_cores=\[dq]4\[dq]\f[R] - Specify the number of CPU cores
|
||||
allocated to the VM
|
||||
.IP \[bu] 2
|
||||
\f[C]ram=\[dq]4G\[dq]\f[R] - Specify the amount of RAM to allocate to
|
||||
\f[V]ram=\[dq]4G\[dq]\f[R] - Specify the amount of RAM to allocate to
|
||||
the VM
|
||||
.IP \[bu] 2
|
||||
\f[C]disk_size=\[dq]16G\[dq]\f[R] - Specify the size of the virtual disk
|
||||
\f[V]disk_size=\[dq]16G\[dq]\f[R] - Specify the size of the virtual disk
|
||||
allocated to the VM
|
||||
.SS Disk preallocation
|
||||
.PP
|
||||
Preallocation mode (allowed values: \f[C]off\f[R] (default),
|
||||
\f[C]metadata\f[R], \f[C]falloc\f[R], \f[C]full\f[R]).
|
||||
Preallocation mode (allowed values: \f[V]off\f[R] (default),
|
||||
\f[V]metadata\f[R], \f[V]falloc\f[R], \f[V]full\f[R]).
|
||||
An image with preallocated metadata is initially larger but can improve
|
||||
performance when the image needs to grow.
|
||||
.PP
|
||||
@ -129,27 +143,27 @@ 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.
|
||||
.IP \[bu] 2
|
||||
\f[C]preallocation=\[dq]metadata\[dq]\f[R]
|
||||
\f[V]preallocation=\[dq]metadata\[dq]\f[R]
|
||||
.SS CD-ROM disks
|
||||
.PP
|
||||
If you want to expose an ISO image from the host to guest add the
|
||||
following line to the VM configuration:
|
||||
.IP \[bu] 2
|
||||
\f[C]fixed_iso=\[dq]/path/to/image.iso\[dq]\f[R]
|
||||
\f[V]fixed_iso=\[dq]/path/to/image.iso\[dq]\f[R]
|
||||
.SS Floppy disks
|
||||
.PP
|
||||
If you\[cq]re like Alan Pope (https://popey.com) you\[cq]ll probably
|
||||
want to mount a floppy disk image in the guest.
|
||||
To do so add the following line to the VM configuration:
|
||||
.IP \[bu] 2
|
||||
\f[C]floppy=\[dq]/path/to/floppy.img\[dq]\f[R]
|
||||
\f[V]floppy=\[dq]/path/to/floppy.img\[dq]\f[R]
|
||||
.SH File Sharing
|
||||
.PP
|
||||
All File Sharing options will only expose \f[C]\[ti]/Public\f[R] (or
|
||||
All File Sharing options will only expose \f[V]\[ti]/Public\f[R] (or
|
||||
localised variations) for the current user to the guest VMs.
|
||||
.SS Samba \[u1F427] \[u1F34F] \[u1FA9F]
|
||||
.PP
|
||||
If \f[C]smbd\f[R] is available on the host, Quickemu will automatically
|
||||
If \f[V]smbd\f[R] 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.
|
||||
.PP
|
||||
@ -160,6 +174,21 @@ You can install the minimal Samba components on Ubuntu using:
|
||||
sudo apt install --no-install-recommends samba
|
||||
\f[R]
|
||||
.fi
|
||||
.PP
|
||||
If everything is set up correctly, the \f[V]smbd\f[R] address will be
|
||||
printed when the virtual machine is started.
|
||||
For example:
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
- smbd: On guest: smb://10.0.2.4/qemu
|
||||
\f[R]
|
||||
.fi
|
||||
.PP
|
||||
If using a Windows guest, right-click on \[lq]This PC\[rq], click
|
||||
\[lq]Add a network location\[rq], and paste this address, removing
|
||||
\f[V]smb:\f[R] and replacing forward slashes with backslashes (in this
|
||||
example \f[V]\[rs]\[rs]10.0.2.4\[rs]qemu\f[R]).
|
||||
.SS SPICE WebDAV \[u1F427] \[u1FA9F]
|
||||
.IP \[bu] 2
|
||||
TBD
|
||||
@ -171,7 +200,7 @@ TBD
|
||||
Add an additional line to your virtual machine configuration.
|
||||
For example:
|
||||
.IP \[bu] 2
|
||||
\f[C]port_forwards=(\[dq]8123:8123\[dq] \[dq]8888:80\[dq])\f[R]
|
||||
\f[V]port_forwards=(\[dq]8123:8123\[dq] \[dq]8888:80\[dq])\f[R]
|
||||
.PP
|
||||
In the example above:
|
||||
.IP \[bu] 2
|
||||
@ -183,7 +212,7 @@ Port 8888 on the host is forwarded to port 80 on the guest.
|
||||
Connect your virtual machine to a preconfigured network bridge.
|
||||
Add an additional line to your virtual machine configuration
|
||||
.IP \[bu] 2
|
||||
\f[C]bridge=\[dq]br0\[dq]\f[R]
|
||||
\f[V]bridge=\[dq]br0\[dq]\f[R]
|
||||
.SH USB redirection
|
||||
.PP
|
||||
Quickemu supports USB redirection via SPICE pass-through and host
|
||||
@ -191,9 +220,9 @@ pass-through.
|
||||
.SS SPICE redirection (recommended)
|
||||
.PP
|
||||
Using SPICE for USB pass-through is easiest as it doesn\[cq]t require
|
||||
any elevated permission, start Quickemu with \f[C]--display spice\f[R]
|
||||
and then select \f[C]Input\f[R] ->
|
||||
\f[C]Select USB Device for redirection\f[R] from the menu to choose
|
||||
any elevated permission, start Quickemu with \f[V]--display spice\f[R]
|
||||
and then select \f[V]Input\f[R] ->
|
||||
\f[V]Select USB Device for redirection\f[R] from the menu to choose
|
||||
which device(s) you want to attach to the guest.
|
||||
.SS Host redirection \f[B]NOT Recommended\f[R]
|
||||
.PP
|
||||
@ -204,7 +233,7 @@ Using SPICE is preferred, see above.
|
||||
Add an additional line to your virtual machine configuration.
|
||||
For example:
|
||||
.IP \[bu] 2
|
||||
\f[C]usb_devices=(\[dq]046d:082d\[dq] \[dq]046d:085e\[dq])\f[R]
|
||||
\f[V]usb_devices=(\[dq]046d:082d\[dq] \[dq]046d:085e\[dq])\f[R]
|
||||
.PP
|
||||
In the example above:
|
||||
.IP \[bu] 2
|
||||
@ -214,7 +243,7 @@ to the guest.
|
||||
The USB device with vendor_id 046d and product_id 085e will be exposed
|
||||
to the guest.
|
||||
.PP
|
||||
If the USB devices are not writable, \f[C]quickemu\f[R] will display the
|
||||
If the USB devices are not writable, \f[V]quickemu\f[R] will display the
|
||||
appropriate commands to modify the USB device(s) access permissions,
|
||||
like this:
|
||||
.IP
|
||||
@ -230,8 +259,8 @@ like this:
|
||||
.PP
|
||||
Since Quickemu 2.2.0 a software emulated TPM device can be added to
|
||||
guest virtual machines.
|
||||
Just add \f[C]tpm=\[dq]on\[dq]\f[R] to your VM configuration.
|
||||
\f[C]quickget\f[R] will automatically add this line to Windows 11
|
||||
Just add \f[V]tpm=\[dq]on\[dq]\f[R] to your VM configuration.
|
||||
\f[V]quickget\f[R] will automatically add this line to Windows 11
|
||||
virtual machines.
|
||||
.SH AUTHORS
|
||||
.PP
|
||||
|
@ -1,19 +1,17 @@
|
||||
---
|
||||
author: Martin Wimpress
|
||||
date: 'February 20, 2022'
|
||||
footer: quickemu\_conf
|
||||
date: August 1, 2022
|
||||
footer: quickemu_conf
|
||||
header: Quickemu Configuration Manual
|
||||
section: 1
|
||||
title: QUICKEMU\_CONF
|
||||
title: QUICKEMU_CONF
|
||||
---
|
||||
|
||||
NAME
|
||||
====
|
||||
# NAME
|
||||
|
||||
quickemu\_conf - Options and parameters in the quickemu \<vm\>.conf
|
||||
quickemu_conf - Options and parameters in the quickemu \<vm\>.conf
|
||||
|
||||
DESCRIPTION
|
||||
===========
|
||||
# DESCRIPTION
|
||||
|
||||
**quickemu** will create and run highly optimised desktop virtual
|
||||
machines for Linux, macOS and Windows. It uses sensible defaults, but
|
||||
@ -21,12 +19,11 @@ many configuration options can be overridden in the required
|
||||
configuration file, which will as a minimum specify the path to the
|
||||
installation ISO and QEMU disk for the installed VM
|
||||
|
||||
OPTIONS
|
||||
=======
|
||||
# OPTIONS
|
||||
|
||||
These are the options and defaults for the \<vm\>.conf file
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
# Lowercase variables are used in the VM config file only
|
||||
boot="efi"
|
||||
bridge=""
|
||||
@ -47,10 +44,9 @@ tpm="off"
|
||||
usb_devices=()
|
||||
```
|
||||
|
||||
EXAMPLES
|
||||
========
|
||||
# EXAMPLES
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
guest_os="linux"
|
||||
disk_img="debian-bullseye/disk.qcow2"
|
||||
iso="debian-bullseye/firmware-11.0.0-amd64-DVD-1.iso"
|
||||
@ -58,7 +54,7 @@ iso="debian-bullseye/firmware-11.0.0-amd64-DVD-1.iso"
|
||||
|
||||
The default macOS configuration looks like this:
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
guest_os="macos"
|
||||
img="macos-catalina/RecoveryImage.img"
|
||||
disk_img="macos-catalina/disk.qcow2"
|
||||
@ -75,7 +71,7 @@ macos_release="catalina"
|
||||
|
||||
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"
|
||||
@ -88,8 +84,7 @@ tpm="on"
|
||||
- `tpm="on"` instructs `quickemu` to create a software emulated TPM
|
||||
device using `swtpm`.
|
||||
|
||||
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
|
||||
@ -97,8 +92,7 @@ configuration to enable legacy BIOS.
|
||||
|
||||
- `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
|
||||
@ -113,8 +107,7 @@ Add additional lines to your virtual machine configuration:
|
||||
- `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
|
||||
@ -126,16 +119,14 @@ configuration.
|
||||
|
||||
- `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:
|
||||
|
||||
- `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
|
||||
@ -143,14 +134,12 @@ to the VM configuration:
|
||||
|
||||
- `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.
|
||||
|
||||
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
|
||||
@ -158,22 +147,28 @@ the guest.
|
||||
|
||||
You can install the minimal Samba components on Ubuntu using:
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
sudo apt install --no-install-recommends samba
|
||||
```
|
||||
|
||||
SPICE WebDAV 🐧 🪟
|
||||
----------------
|
||||
If everything is set up correctly, the `smbd` address will be printed
|
||||
when the virtual machine is started. For example:
|
||||
|
||||
- smbd: On guest: smb://10.0.2.4/qemu
|
||||
|
||||
If using a Windows guest, right-click on "This PC", click "Add a network
|
||||
location", and paste this address, removing `smb:` and replacing forward
|
||||
slashes with backslashes (in this example `\\10.0.2.4\qemu`).
|
||||
|
||||
## SPICE WebDAV 🐧 🪟
|
||||
|
||||
- TBD
|
||||
|
||||
VirtIO-9P 🐧 🍏
|
||||
-------------
|
||||
## VirtIO-9P 🐧 🍏
|
||||
|
||||
- TBD
|
||||
|
||||
Network port forwarding
|
||||
=======================
|
||||
# Network port forwarding
|
||||
|
||||
Add an additional line to your virtual machine configuration. For
|
||||
example:
|
||||
@ -185,30 +180,26 @@ 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.
|
||||
|
||||
Bridged networking
|
||||
==================
|
||||
# Bridged networking
|
||||
|
||||
Connect your virtual machine to a preconfigured network bridge. Add an
|
||||
additional line to your virtual machine configuration
|
||||
|
||||
- `bridge="br0"`
|
||||
|
||||
USB redirection
|
||||
===============
|
||||
# USB redirection
|
||||
|
||||
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.
|
||||
|
||||
Host redirection **NOT Recommended**
|
||||
------------------------------------
|
||||
## 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
|
||||
@ -221,9 +212,9 @@ example:
|
||||
|
||||
In the example above:
|
||||
|
||||
- The USB device with vendor\_id 046d and product\_id 082d will be
|
||||
- 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
|
||||
- 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
|
||||
@ -235,27 +226,23 @@ like this:
|
||||
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.
|
||||
|
||||
AUTHORS
|
||||
=======
|
||||
# AUTHORS
|
||||
|
||||
Written by Martin Wimpress.
|
||||
|
||||
BUGS
|
||||
====
|
||||
# BUGS
|
||||
|
||||
Submit bug reports online at:
|
||||
<https://github.com/quickemu-project/quickemu/issues>
|
||||
|
||||
SEE ALSO
|
||||
========
|
||||
# SEE ALSO
|
||||
|
||||
Full sources at: <https://github.com/quickemu-project/quickemu>
|
||||
|
||||
|
201
docs/quickget.1
201
docs/quickget.1
@ -1,6 +1,20 @@
|
||||
.\" Automatically generated by Pandoc 2.9.2.1
|
||||
.\" Automatically generated by Pandoc 2.18
|
||||
.\"
|
||||
.TH "QUICKGET" "1" "February 20, 2022" "quickget" "Quickget User Manual"
|
||||
.\" Define V font for inline verbatim, using C font in formats
|
||||
.\" that render this, and otherwise B font.
|
||||
.ie "\f[CB]x\f[]"x" \{\
|
||||
. ftr V B
|
||||
. ftr VI BI
|
||||
. ftr VB B
|
||||
. ftr VBI BI
|
||||
.\}
|
||||
.el \{\
|
||||
. ftr V CR
|
||||
. ftr VI CI
|
||||
. ftr VB CB
|
||||
. ftr VBI CBI
|
||||
.\}
|
||||
.TH "QUICKGET" "1" "August 1, 2022" "quickget" "Quickget User Manual"
|
||||
.hy
|
||||
.SH NAME
|
||||
.PP
|
||||
@ -12,7 +26,7 @@ quickget - download and prepare materials for building a quickemu VM
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
\f[B]quickget\f[R] will download the requisite materials and prepare a
|
||||
configuration for \f[C]quickemu\f[R] to use to build and run
|
||||
configuration for \f[V]quickemu\f[R] to use to build and run
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
\f[B]version | -version | \[en]version\f[R]
|
||||
@ -29,13 +43,13 @@ Editions may not apply and will be defaulted if not provided.
|
||||
.SH NOTES
|
||||
.SS Ubuntu Guest
|
||||
.PP
|
||||
\f[C]quickget\f[R] will automatically download an Ubuntu release and
|
||||
\f[V]quickget\f[R] will automatically download an Ubuntu release and
|
||||
create the virtual machine configuration.
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
quickget ubuntu 20.04
|
||||
quickemu --vm ubuntu-20.04.conf
|
||||
quickget ubuntu 22.04
|
||||
quickemu --vm ubuntu-22.04.conf
|
||||
\f[R]
|
||||
.fi
|
||||
.IP \[bu] 2
|
||||
@ -44,24 +58,24 @@ Complete the installation as normal.
|
||||
Post-install:
|
||||
.RS 2
|
||||
.IP \[bu] 2
|
||||
Install the SPICE agent (\f[C]spice-vdagent\f[R]) to enable copy/paste
|
||||
Install the SPICE agent (\f[V]spice-vdagent\f[R]) to enable copy/paste
|
||||
and USB redirection
|
||||
.RS 2
|
||||
.IP \[bu] 2
|
||||
\f[C]sudo apt install spice-vdagent\f[R]
|
||||
\f[V]sudo apt install spice-vdagent\f[R]
|
||||
.RE
|
||||
.IP \[bu] 2
|
||||
Install the SPICE WebDAV agent (\f[C]spice-webdavd\f[R]) to enable file
|
||||
Install the SPICE WebDAV agent (\f[V]spice-webdavd\f[R]) to enable file
|
||||
sharing.
|
||||
.RS 2
|
||||
.IP \[bu] 2
|
||||
\f[C]sudo apt install spice-webdavd\f[R]
|
||||
\f[V]sudo apt install spice-webdavd\f[R]
|
||||
.RE
|
||||
.RE
|
||||
.SS Ubuntu devel (daily-live) images
|
||||
.PP
|
||||
\f[C]quickget\f[R] can also download/refresh devel images via
|
||||
\f[C]zsync\f[R] for Ubuntu developers and testers.
|
||||
\f[V]quickget\f[R] can also download/refresh devel images via
|
||||
\f[V]zsync\f[R] for Ubuntu developers and testers.
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
@ -70,106 +84,119 @@ quickemu --vm ubuntu-devel.conf
|
||||
\f[R]
|
||||
.fi
|
||||
.PP
|
||||
You can run \f[C]quickget ubuntu devel\f[R] to refresh your daily
|
||||
You can run \f[V]quickget ubuntu devel\f[R] to refresh your daily
|
||||
development image as often as you like, it will even automatically
|
||||
switch to a new series.
|
||||
.SS Ubuntu Flavours
|
||||
.PP
|
||||
All the official Ubuntu flavours are supported, just replace
|
||||
\f[C]ubuntu\f[R] with your preferred flavour.
|
||||
\f[V]ubuntu\f[R] with your preferred flavour.
|
||||
.IP \[bu] 2
|
||||
\f[C]kubuntu\f[R] (Kubuntu)
|
||||
\f[V]kubuntu\f[R] (Kubuntu)
|
||||
.IP \[bu] 2
|
||||
\f[C]lubuntu\f[R] (Lubuntu)
|
||||
\f[V]lubuntu\f[R] (Lubuntu)
|
||||
.IP \[bu] 2
|
||||
\f[C]ubuntu-budgie\f[R] (Ubuntu Budgie)
|
||||
\f[V]ubuntu-budgie\f[R] (Ubuntu Budgie)
|
||||
.IP \[bu] 2
|
||||
\f[C]ubuntukylin\f[R] (Ubuntu Kylin)
|
||||
\f[V]ubuntukylin\f[R] (Ubuntu Kylin)
|
||||
.IP \[bu] 2
|
||||
\f[C]ubuntu-mate\f[R] (Ubuntu MATE)
|
||||
\f[V]ubuntu-mate\f[R] (Ubuntu MATE)
|
||||
.IP \[bu] 2
|
||||
\f[C]ubuntustudio\f[R] (Ubuntu Studio)
|
||||
\f[V]ubuntustudio\f[R] (Ubuntu Studio)
|
||||
.IP \[bu] 2
|
||||
\f[C]ubuntu\f[R] (Ubuntu)
|
||||
\f[V]ubuntu\f[R] (Ubuntu)
|
||||
.IP \[bu] 2
|
||||
\f[C]xubuntu\f[R] (Xubuntu)
|
||||
\f[V]xubuntu\f[R] (Xubuntu)
|
||||
.SS Other Operating Systems
|
||||
.PP
|
||||
\f[C]quickget\f[R] also supports:
|
||||
\f[V]quickget\f[R] also supports:
|
||||
.SS Other Operating Systems
|
||||
.PP
|
||||
\f[V]quickget\f[R] also supports:
|
||||
.IP \[bu] 2
|
||||
\f[C]alma\f[R] (Alma Linux)
|
||||
\f[V]alma\f[R] (Alma Linux)
|
||||
.IP \[bu] 2
|
||||
\f[C]alpine\f[R] (Alpine Linux)
|
||||
\f[V]alpine\f[R] (Alpine Linux)
|
||||
.IP \[bu] 2
|
||||
\f[C]android\f[R] (Android x86)
|
||||
\f[V]android\f[R] (Android x86)
|
||||
.IP \[bu] 2
|
||||
\f[C]archlinux\f[R] (Arch Linux)
|
||||
\f[V]archlinux\f[R] (Arch Linux)
|
||||
.IP \[bu] 2
|
||||
\f[C]arcolinux\f[R] (Arco Linux)
|
||||
\f[V]arcolinux\f[R] (Arco Linux)
|
||||
.IP \[bu] 2
|
||||
\f[C]cachyos\f[R] (CachyOS)
|
||||
\f[V]batocera\f[R] (Batocera)
|
||||
.IP \[bu] 2
|
||||
\f[C]debian\f[R] (Debian)
|
||||
\f[V]cachyos\f[R] (CachyOS)
|
||||
.IP \[bu] 2
|
||||
\f[C]devuan\f[R] (Devuan)
|
||||
\f[V]centos-stream\f[R] (CentOS Stream)
|
||||
.IP \[bu] 2
|
||||
\f[C]dragonflybsd\f[R] (DragonFlyBSD)
|
||||
\f[V]debian\f[R] (Debian)
|
||||
.IP \[bu] 2
|
||||
\f[C]elementary\f[R] (elementary OS)
|
||||
\f[V]deepin\f[R] (Deepin)
|
||||
.IP \[bu] 2
|
||||
\f[C]fedora\f[R] (Fedora)
|
||||
\f[V]devuan\f[R] (Devuan)
|
||||
.IP \[bu] 2
|
||||
\f[C]freebsd\f[R] (FreeBSD)
|
||||
\f[V]dragonflybsd\f[R] (DragonFlyBSD)
|
||||
.IP \[bu] 2
|
||||
\f[C]freedos\f[R] (FreeDOS)
|
||||
\f[V]elementary\f[R] (elementary OS)
|
||||
.IP \[bu] 2
|
||||
\f[C]garuda\f[R] (Garuda Linux)
|
||||
\f[V]endeavouros\f[R] (EndeavourOS)
|
||||
.IP \[bu] 2
|
||||
\f[C]gentoo\f[R] (Gentoo)
|
||||
\f[V]fedora\f[R] (Fedora)
|
||||
.IP \[bu] 2
|
||||
\f[C]ghostbsd\f[R] (GhostBSD)
|
||||
\f[V]freebsd\f[R] (FreeBSD)
|
||||
.IP \[bu] 2
|
||||
\f[C]haiku\f[R] (Haiku)
|
||||
\f[V]freedos\f[R] (FreeDOS)
|
||||
.IP \[bu] 2
|
||||
\f[C]kali\f[R] (Kali)
|
||||
\f[V]garuda\f[R] (Garuda Linux)
|
||||
.IP \[bu] 2
|
||||
\f[C]kdeneon\f[R] (KDE Neon)
|
||||
\f[V]gentoo\f[R] (Gentoo)
|
||||
.IP \[bu] 2
|
||||
\f[C]kolibrios\f[R] (KolibriOS)
|
||||
\f[V]ghostbsd\f[R] (GhostBSD)
|
||||
.IP \[bu] 2
|
||||
\f[C]linuxmint\f[R] (Linux Mint)
|
||||
\f[V]haiku\f[R] (Haiku)
|
||||
.IP \[bu] 2
|
||||
\f[C]manjaro\f[R] (Manjaro)
|
||||
\f[V]kali\f[R] (Kali)
|
||||
.IP \[bu] 2
|
||||
\f[C]mxlinux\f[R] (MX Linux)
|
||||
\f[V]kdeneon\f[R] (KDE Neon)
|
||||
.IP \[bu] 2
|
||||
\f[C]netboot\f[R] (netboot.xyz)
|
||||
\f[V]kolibrios\f[R] (KolibriOS)
|
||||
.IP \[bu] 2
|
||||
\f[C]netbsd\f[R] (NetBSD)
|
||||
\f[V]linuxmint\f[R] (Linux Mint)
|
||||
.IP \[bu] 2
|
||||
\f[C]nixos\f[R] (NixOS)
|
||||
\f[V]lmde\f[R] (Linux Mint Debian Edition)
|
||||
.IP \[bu] 2
|
||||
\f[C]openbsd\f[R] (OpenBSD)
|
||||
\f[V]manjaro\f[R] (Manjaro)
|
||||
.IP \[bu] 2
|
||||
\f[C]opensuse\f[R] (openSUSE)
|
||||
\f[V]mxlinux\f[R] (MX Linux)
|
||||
.IP \[bu] 2
|
||||
\f[C]oraclelinux\f[R] (Oracle Linux)
|
||||
\f[V]netboot\f[R] (netboot.xyz)
|
||||
.IP \[bu] 2
|
||||
\f[C]popos\f[R] (Pop!_OS)
|
||||
\f[V]netbsd\f[R] (NetBSD)
|
||||
.IP \[bu] 2
|
||||
\f[C]regolith\f[R] (Regolith Linux)
|
||||
\f[V]nixos\f[R] (NixOS)
|
||||
.IP \[bu] 2
|
||||
\f[C]rockylinux\f[R] (Rocky Linux)
|
||||
\f[V]openbsd\f[R] (OpenBSD)
|
||||
.IP \[bu] 2
|
||||
\f[C]slackware\f[R] (Slackware)
|
||||
\f[V]opensuse\f[R] (openSUSE)
|
||||
.IP \[bu] 2
|
||||
\f[C]solus\f[R] (Solus)
|
||||
\f[V]oraclelinux\f[R] (Oracle Linux)
|
||||
.IP \[bu] 2
|
||||
\f[C]tails\f[R] (Tails)
|
||||
\f[V]popos\f[R] (Pop!_OS)
|
||||
.IP \[bu] 2
|
||||
\f[C]void\f[R] (Void Linux)
|
||||
\f[V]regolith\f[R] (Regolith Linux)
|
||||
.IP \[bu] 2
|
||||
\f[C]zorin\f[R] (Zorin OS)
|
||||
\f[V]rockylinux\f[R] (Rocky Linux)
|
||||
.IP \[bu] 2
|
||||
\f[V]slackware\f[R] (Slackware)
|
||||
.IP \[bu] 2
|
||||
\f[V]solus\f[R] (Solus)
|
||||
.IP \[bu] 2
|
||||
\f[V]tails\f[R] (Tails)
|
||||
.IP \[bu] 2
|
||||
\f[V]void\f[R] (Void Linux)
|
||||
.IP \[bu] 2
|
||||
\f[V]zorin\f[R] (Zorin OS)
|
||||
.PP
|
||||
Or you can download a Linux image and manually create a VM
|
||||
configuration.
|
||||
@ -177,7 +204,7 @@ configuration.
|
||||
Download a .iso image of a Linux distribution
|
||||
.IP \[bu] 2
|
||||
Create a VM configuration file; for example
|
||||
\f[C]debian-bullseye.conf\f[R]
|
||||
\f[V]debian-bullseye.conf\f[R]
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
@ -187,7 +214,7 @@ iso=\[dq]debian-bullseye/firmware-11.0.0-amd64-DVD-1.iso\[dq]
|
||||
\f[R]
|
||||
.fi
|
||||
.IP \[bu] 2
|
||||
Use \f[C]quickemu\f[R] to start the virtual machine:
|
||||
Use \f[V]quickemu\f[R] to start the virtual machine:
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
@ -200,15 +227,15 @@ Complete the installation as normal.
|
||||
Post-install:
|
||||
.RS 2
|
||||
.IP \[bu] 2
|
||||
Install the SPICE agent (\f[C]spice-vdagent\f[R]) to enable copy/paste
|
||||
Install the SPICE agent (\f[V]spice-vdagent\f[R]) to enable copy/paste
|
||||
and USB redirection.
|
||||
.IP \[bu] 2
|
||||
Install the SPICE WebDAV agent (\f[C]spice-webdavd\f[R]) to enable file
|
||||
Install the SPICE WebDAV agent (\f[V]spice-webdavd\f[R]) to enable file
|
||||
sharing.
|
||||
.RE
|
||||
.SS macOS Guest
|
||||
.PP
|
||||
\f[C]quickget\f[R] automatically downloads a macOS recovery image and
|
||||
\f[V]quickget\f[R] automatically downloads a macOS recovery image and
|
||||
creates a virtual machine configuration.
|
||||
.IP
|
||||
.nf
|
||||
@ -218,8 +245,8 @@ quickemu --vm macos-catalina.conf
|
||||
\f[R]
|
||||
.fi
|
||||
.PP
|
||||
macOS \f[C]high-sierra\f[R], \f[C]mojave\f[R], \f[C]catalina\f[R],
|
||||
\f[C]big-sur\f[R] and \f[C]monterey\f[R] are supported.
|
||||
macOS \f[V]high-sierra\f[R], \f[V]mojave\f[R], \f[V]catalina\f[R],
|
||||
\f[V]big-sur\f[R] and \f[V]monterey\f[R] are supported.
|
||||
.IP \[bu] 2
|
||||
Use cursor keys and enter key to select the \f[B]macOS Base System\f[R]
|
||||
.IP \[bu] 2
|
||||
@ -232,19 +259,19 @@ Click \f[B]Disk Utility\f[R] and \f[B]Continue\f[R]
|
||||
On macOS Catalina, Big Sur & Monterey
|
||||
.RS 2
|
||||
.IP \[bu] 2
|
||||
Select \f[C]Apple Inc. VirtIO Block Media\f[R] from the list and click
|
||||
Select \f[V]Apple Inc. VirtIO Block Media\f[R] from the list and click
|
||||
\f[B]Erase\f[R].
|
||||
.RE
|
||||
.IP \[bu] 2
|
||||
On macOS Mojave and High Sierra
|
||||
.RS 2
|
||||
.IP \[bu] 2
|
||||
Select \f[C]QEMU HARDDISK Media\f[R] (\[ti]103.08GB) from the list and
|
||||
Select \f[V]QEMU HARDDISK Media\f[R] (\[ti]103.08GB) from the list and
|
||||
click \f[B]Erase\f[R].
|
||||
.RE
|
||||
.RE
|
||||
.IP \[bu] 2
|
||||
Enter a \f[C]Name:\f[R] for the disk and click \f[B]Erase\f[R].
|
||||
Enter a \f[V]Name:\f[R] for the disk and click \f[B]Erase\f[R].
|
||||
.IP \[bu] 2
|
||||
Click \f[B]Done\f[R].
|
||||
.IP \[bu] 2
|
||||
@ -278,10 +305,10 @@ macos_release=\[dq]catalina\[dq]
|
||||
\f[R]
|
||||
.fi
|
||||
.IP \[bu] 2
|
||||
\f[C]guest_os=\[dq]macos\[dq]\f[R] instructs Quickemu to optimise for
|
||||
\f[V]guest_os=\[dq]macos\[dq]\f[R] instructs Quickemu to optimise for
|
||||
macOS.
|
||||
.IP \[bu] 2
|
||||
\f[C]macos_release=\[dq]catalina\[dq]\f[R] instructs Quickemu to
|
||||
\f[V]macos_release=\[dq]catalina\[dq]\f[R] instructs Quickemu to
|
||||
optimise for a particular macOS release.
|
||||
.RS 2
|
||||
.IP \[bu] 2
|
||||
@ -309,7 +336,7 @@ Big Sur
|
||||
Monterey
|
||||
.RE
|
||||
.IP \[bu] 2
|
||||
\f[C]quickemu\f[R] will automatically download the required
|
||||
\f[V]quickemu\f[R] will automatically download the required
|
||||
OpenCore (https://github.com/acidanthera/OpenCorePkg) bootloader and
|
||||
OVMF firmware from OSX-KVM (https://github.com/kholia/OSX-KVM).
|
||||
.IP \[bu] 2
|
||||
@ -322,11 +349,11 @@ VirtIO Block
|
||||
Media (https://www.kraxel.org/blog/2019/06/macos-qemu-guest/) is used
|
||||
for the system disk where supported.
|
||||
.IP \[bu] 2
|
||||
VirtIO \f[C]usb-tablet\f[R] (http://philjordan.eu/osx-virt/) is used for
|
||||
VirtIO \f[V]usb-tablet\f[R] (http://philjordan.eu/osx-virt/) is used for
|
||||
the mouse.
|
||||
.IP \[bu] 2
|
||||
VirtIO Network (\f[C]virtio-net\f[R]) is supported and enabled on macOS
|
||||
Big Sur and newer but previous releases use \f[C]vmxnet3\f[R].
|
||||
VirtIO Network (\f[V]virtio-net\f[R]) is supported and enabled on macOS
|
||||
Big Sur and newer but previous releases use \f[V]vmxnet3\f[R].
|
||||
.IP \[bu] 2
|
||||
VirtIO Memory Ballooning is supported and enabled on macOS Big Sur and
|
||||
newer but disabled for other support macOS releases.
|
||||
@ -355,7 +382,7 @@ webdavd (https://gitlab.gnome.org/GNOME/phodav/-/merge_requests/24).
|
||||
Copy/paste via SPICE agent is \f[B]not available on macOS\f[R].
|
||||
.SS Windows 8.1, 10 & 11 Guests
|
||||
.PP
|
||||
\f[C]quickget\f[R] can automatically download Windows 8.1, Windows
|
||||
\f[V]quickget\f[R] 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
|
||||
@ -372,9 +399,18 @@ quickemu --vm windows-11.conf
|
||||
Complete the installation as you normally would.
|
||||
.IP \[bu] 2
|
||||
All relevant drivers and services should be installed automatically.
|
||||
.IP \[bu] 2
|
||||
A local adminstrator user account is automatically created, with these
|
||||
credentials:
|
||||
.RS 2
|
||||
.IP \[bu] 2
|
||||
Username: \f[V]Quickemu\f[R]
|
||||
.IP \[bu] 2
|
||||
Password: \f[V]quickemu\f[R]
|
||||
.RE
|
||||
.SS Regional versions
|
||||
.PP
|
||||
By default \f[C]quickget\f[R] will download the \f[I]\[lq]English
|
||||
By default \f[V]quickget\f[R] will download the \f[I]\[lq]English
|
||||
International\[rq]\f[R] release, but you can optionally specify one of
|
||||
the supported languages: For example:
|
||||
.IP
|
||||
@ -393,17 +429,18 @@ disk_img=\[dq]windows-11/disk.qcow2\[dq]
|
||||
iso=\[dq]windows-11/Win11_EnglishInternational_x64.iso\[dq]
|
||||
fixed_iso=\[dq]windows-11/virtio-win.iso\[dq]
|
||||
tpm=\[dq]on\[dq]
|
||||
secureboot=\[dq]on\[dq]
|
||||
\f[R]
|
||||
.fi
|
||||
.IP \[bu] 2
|
||||
\f[C]guest_os=\[dq]windows\[dq]\f[R] instructs \f[C]quickemu\f[R] to
|
||||
\f[V]guest_os=\[dq]windows\[dq]\f[R] instructs \f[V]quickemu\f[R] to
|
||||
optimise for Windows.
|
||||
.IP \[bu] 2
|
||||
\f[C]fixed_iso=\f[R] specifies the ISO image that provides VirtIO
|
||||
\f[V]fixed_iso=\f[R] specifies the ISO image that provides VirtIO
|
||||
drivers.
|
||||
.IP \[bu] 2
|
||||
\f[C]tpm=\[dq]on\[dq]\f[R] instructs \f[C]quickemu\f[R] to create a
|
||||
software emulated TPM device using \f[C]swtpm\f[R].
|
||||
\f[V]tpm=\[dq]on\[dq]\f[R] instructs \f[V]quickemu\f[R] to create a
|
||||
software emulated TPM device using \f[V]swtpm\f[R].
|
||||
.SH AUTHORS
|
||||
.PP
|
||||
Written by Martin Wimpress.
|
||||
|
@ -1,35 +1,31 @@
|
||||
---
|
||||
author: Martin Wimpress
|
||||
date: 'February 20, 2022'
|
||||
date: August 1, 2022
|
||||
footer: quickget
|
||||
header: Quickget User Manual
|
||||
section: 1
|
||||
title: QUICKGET
|
||||
---
|
||||
|
||||
NAME
|
||||
====
|
||||
# NAME
|
||||
|
||||
quickget - download and prepare materials for building a quickemu VM
|
||||
|
||||
SYNOPSIS
|
||||
========
|
||||
# SYNOPSIS
|
||||
|
||||
**quickget** \[*os*\] \[*release*\] \[*edition*\] \| \[*OPTION*\]\*
|
||||
|
||||
DESCRIPTION
|
||||
===========
|
||||
# DESCRIPTION
|
||||
|
||||
**quickget** will download the requisite materials and prepare a
|
||||
configuration for `quickemu` to use to build and run
|
||||
|
||||
OPTIONS
|
||||
=======
|
||||
# OPTIONS
|
||||
|
||||
**version \| -version \| --version**
|
||||
: show version (from Quickemu)
|
||||
|
||||
**list \| list\_csv \| list\_json**
|
||||
**list \| list_csv \| list_json**
|
||||
: provide a csv list of all supported guest OSes, versions and
|
||||
variants.
|
||||
|
||||
@ -39,18 +35,16 @@ OPTIONS
|
||||
script will exit. Editions may not apply and will be defaulted if
|
||||
not provided.
|
||||
|
||||
NOTES
|
||||
=====
|
||||
# NOTES
|
||||
|
||||
Ubuntu Guest
|
||||
------------
|
||||
## Ubuntu Guest
|
||||
|
||||
`quickget` will automatically download an Ubuntu release and create the
|
||||
virtual machine configuration.
|
||||
|
||||
``` {.bash}
|
||||
quickget ubuntu 20.04
|
||||
quickemu --vm ubuntu-20.04.conf
|
||||
``` bash
|
||||
quickget ubuntu 22.04
|
||||
quickemu --vm ubuntu-22.04.conf
|
||||
```
|
||||
|
||||
- Complete the installation as normal.
|
||||
@ -67,7 +61,7 @@ quickemu --vm ubuntu-20.04.conf
|
||||
`quickget` can also download/refresh devel images via `zsync` for Ubuntu
|
||||
developers and testers.
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
quickget ubuntu devel
|
||||
quickemu --vm ubuntu-devel.conf
|
||||
```
|
||||
@ -90,8 +84,11 @@ with your preferred flavour.
|
||||
- `ubuntu` (Ubuntu)
|
||||
- `xubuntu` (Xubuntu)
|
||||
|
||||
Other Operating Systems
|
||||
-----------------------
|
||||
## Other Operating Systems
|
||||
|
||||
`quickget` also supports:
|
||||
|
||||
## Other Operating Systems
|
||||
|
||||
`quickget` also supports:
|
||||
|
||||
@ -100,11 +97,15 @@ Other Operating Systems
|
||||
- `android` (Android x86)
|
||||
- `archlinux` (Arch Linux)
|
||||
- `arcolinux` (Arco Linux)
|
||||
- `batocera` (Batocera)
|
||||
- `cachyos` (CachyOS)
|
||||
- `centos-stream` (CentOS Stream)
|
||||
- `debian` (Debian)
|
||||
- `deepin` (Deepin)
|
||||
- `devuan` (Devuan)
|
||||
- `dragonflybsd` (DragonFlyBSD)
|
||||
- `elementary` (elementary OS)
|
||||
- `endeavouros` (EndeavourOS)
|
||||
- `fedora` (Fedora)
|
||||
- `freebsd` (FreeBSD)
|
||||
- `freedos` (FreeDOS)
|
||||
@ -116,6 +117,7 @@ Other Operating Systems
|
||||
- `kdeneon` (KDE Neon)
|
||||
- `kolibrios` (KolibriOS)
|
||||
- `linuxmint` (Linux Mint)
|
||||
- `lmde` (Linux Mint Debian Edition)
|
||||
- `manjaro` (Manjaro)
|
||||
- `mxlinux` (MX Linux)
|
||||
- `netboot` (netboot.xyz)
|
||||
@ -139,7 +141,7 @@ configuration.
|
||||
- Download a .iso image of a Linux distribution
|
||||
- Create a VM configuration file; for example `debian-bullseye.conf`
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
guest_os="linux"
|
||||
disk_img="debian-bullseye/disk.qcow2"
|
||||
iso="debian-bullseye/firmware-11.0.0-amd64-DVD-1.iso"
|
||||
@ -147,7 +149,7 @@ iso="debian-bullseye/firmware-11.0.0-amd64-DVD-1.iso"
|
||||
|
||||
- Use `quickemu` to start the virtual machine:
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
quickemu --vm debian-bullseye.conf
|
||||
```
|
||||
|
||||
@ -158,13 +160,12 @@ quickemu --vm debian-bullseye.conf
|
||||
- Install the SPICE WebDAV agent (`spice-webdavd`) to enable file
|
||||
sharing.
|
||||
|
||||
macOS Guest
|
||||
-----------
|
||||
## macOS Guest
|
||||
|
||||
`quickget` automatically downloads a macOS recovery image and creates a
|
||||
virtual machine configuration.
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
quickget macos catalina
|
||||
quickemu --vm macos-catalina.conf
|
||||
```
|
||||
@ -194,7 +195,7 @@ supported.
|
||||
|
||||
The default macOS configuration looks like this:
|
||||
|
||||
``` {.bash}
|
||||
``` bash
|
||||
guest_os="macos"
|
||||
img="macos-catalina/RecoveryImage.img"
|
||||
disk_img="macos-catalina/disk.qcow2"
|
||||
@ -245,8 +246,7 @@ There are some considerations when running macOS via Quickemu.
|
||||
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
|
||||
---------------------------
|
||||
## 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
|
||||
@ -256,13 +256,17 @@ 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.
|
||||
- A local adminstrator user account is automatically created, with
|
||||
these credentials:
|
||||
- Username: `Quickemu`
|
||||
- Password: `quickemu`
|
||||
|
||||
### Regional versions
|
||||
|
||||
@ -270,18 +274,19 @@ 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"
|
||||
fixed_iso="windows-11/virtio-win.iso"
|
||||
tpm="on"
|
||||
secureboot="on"
|
||||
```
|
||||
|
||||
- `guest_os="windows"` instructs `quickemu` to optimise for Windows.
|
||||
@ -289,20 +294,17 @@ tpm="on"
|
||||
- `tpm="on"` instructs `quickemu` to create a software emulated TPM
|
||||
device using `swtpm`.
|
||||
|
||||
AUTHORS
|
||||
=======
|
||||
# AUTHORS
|
||||
|
||||
Written by Martin Wimpress.
|
||||
|
||||
BUGS
|
||||
====
|
||||
# BUGS
|
||||
|
||||
Submit bug reports online at:
|
||||
<https://github.com/quickemu-project/quickemu/issues>
|
||||
|
||||
SEE ALSO
|
||||
========
|
||||
# SEE ALSO
|
||||
|
||||
Full sources at: <https://github.com/quickemu-project/quickemu>
|
||||
|
||||
quickemu(1), quickemu\_conf(1), quickgui(1)
|
||||
quickemu(1), quickemu_conf(1), quickgui(1)
|
||||
|
604
quickemu
604
quickemu
@ -221,7 +221,6 @@ function vm_boot() {
|
||||
local HOST_CPU_SMT=""
|
||||
local HOST_CPU_SOCKETS=""
|
||||
local HOST_CPU_VENDOR=""
|
||||
local GL="on"
|
||||
local GUEST_TWEAKS=""
|
||||
local KERNEL_NAME="Unknown"
|
||||
local KERNEL_NODE=""
|
||||
@ -231,7 +230,6 @@ function vm_boot() {
|
||||
local MAC_BOOTLOADER=""
|
||||
local MAC_MISSING=""
|
||||
local MAC_DISK_DEV="ide-hd,bus=ahci.2"
|
||||
local MOUSE="usb-tablet"
|
||||
local NET_DEVICE="virtio-net"
|
||||
local OSK=""
|
||||
local SMM="off"
|
||||
@ -401,6 +399,10 @@ function vm_boot() {
|
||||
elif [ -e "/usr/share/qemu/edk2-x86_64-secure-code.fd" ]; then
|
||||
EFI_CODE="/usr/share/qemu/edk2-x86_64-secure-code.fd"
|
||||
efi_vars "/usr/share/qemu/edk2-x86_64-code.fd" "${EFI_VARS}"
|
||||
# Solus new place to hide
|
||||
elif [ -e "/usr/share/edk2-ovmf/x64/OVMF_CODE.secboot.fd" ]; then
|
||||
EFI_CODE="/usr/share/edk2-ovmf/x64/OVMF_CODE.secboot.fd"
|
||||
efi_vars "/usr/share/edk2-ovmf/x64/OVMF_VARS.fd" "${EFI_VARS}"
|
||||
else
|
||||
echo "ERROR! SecureBoot was requested but no SecureBoot capable firmware was found."
|
||||
echo " Please install OVMF firmware."
|
||||
@ -429,6 +431,10 @@ function vm_boot() {
|
||||
elif [ -e "/usr/share/qemu/edk2-x86_64-code.fd" ]; then
|
||||
EFI_CODE="/usr/share/qemu/edk2-x86_64-code.fd"
|
||||
efi_vars "/usr/share/qemu/edk2-x86_64-code.fd" "${EFI_VARS}"
|
||||
# Solus
|
||||
elif [ -e "/usr/share/edk2-ovmf/x64/OVMF_CODE.fd" ]; then
|
||||
EFI_CODE="/usr/share/edk2-ovmf/x64/OVMF_CODE.fd"
|
||||
efi_vars "/usr/share/edk2-ovmf/x64/OVMF_VARS.fd" "${EFI_VARS}"
|
||||
else
|
||||
echo "ERROR! EFI boot requested but no EFI firmware found."
|
||||
echo " Please install OVMF firmware."
|
||||
@ -470,7 +476,7 @@ function vm_boot() {
|
||||
fi
|
||||
|
||||
if [ "${guest_os}" == "freebsd" ] || [ "${guest_os}" == "ghostbsd" ]; then
|
||||
MOUSE="usb-mouse"
|
||||
MOUSE="usb"
|
||||
elif [ "${guest_os}" == "haiku" ] || [ "${guest_os}" == "freedos" ]; then
|
||||
MACHINE_TYPE="pc"
|
||||
NET_DEVICE="rtl8139"
|
||||
@ -490,6 +496,15 @@ function vm_boot() {
|
||||
disk_size="16G"
|
||||
fi
|
||||
;;
|
||||
batocera)
|
||||
CPU="-cpu host,kvm=on"
|
||||
if [ "${HOST_CPU_VENDOR}" == "AuthenticAMD" ]; then
|
||||
CPU="${CPU},topoext"
|
||||
fi
|
||||
MACHINE_TYPE="pc"
|
||||
NET_DEVICE="rtl8139"
|
||||
disk_size="8G"
|
||||
;;
|
||||
kolibrios)
|
||||
CPU="-cpu qemu32,kvm=on"
|
||||
if [ "${HOST_CPU_VENDOR}" == "AuthenticAMD" ]; then
|
||||
@ -633,7 +648,7 @@ function vm_boot() {
|
||||
fi
|
||||
|
||||
if [ "${guest_os}" == "macos" ] || [ "${guest_os}" == "windows" ]; then
|
||||
# Display MSRs alert if the guest is macOS
|
||||
# Display MSRs alert if the guest is macOS or windows
|
||||
ignore_msrs_alert
|
||||
fi
|
||||
|
||||
@ -722,24 +737,32 @@ function vm_boot() {
|
||||
DISPLAY_RENDER="${OUTPUT},grab-on-hover=on,zoom-to-fit=off"
|
||||
# GL is not working with GTK and virtio-vga
|
||||
if [ "${DISPLAY_DEVICE}" == "virtio-vga" ]; then
|
||||
GL="off"
|
||||
gl="off"
|
||||
fi
|
||||
;;
|
||||
none|spice)
|
||||
DISPLAY_RENDER="none";;
|
||||
# spice-app has a bug where using spice-app,gl=off seems to enable gl, but
|
||||
# if the gl param is omitted it works fine.
|
||||
spice-app)
|
||||
DISPLAY_RENDER="${OUTPUT}"
|
||||
if [[ "${gl}" == "on" ]]; then
|
||||
DISPLAY_RENDER+=",gl=on"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
DISPLAY_RENDER="${OUTPUT},gl=${GL}";;
|
||||
DISPLAY_RENDER="${OUTPUT},gl=${gl}";;
|
||||
esac
|
||||
|
||||
if [ "${GL}" == "on" ] && [[ "${DISPLAY_DEVICE}" == *"virtio"* ]]; then
|
||||
if [ "${gl}" == "on" ] && [[ "${DISPLAY_DEVICE}" == *"virtio"* ]]; then
|
||||
if [ "${QEMU_VER_SHORT}" -ge 61 ]; then
|
||||
DISPLAY_DEVICE="${DISPLAY_DEVICE}-gl"
|
||||
else
|
||||
DISPLAY_DEVICE="${DISPLAY_DEVICE},virgl=on"
|
||||
fi
|
||||
echo ", GL (${GL}), VirGL (on)"
|
||||
echo ", GL (${gl}), VirGL (on)"
|
||||
else
|
||||
echo ", GL (${GL}), VirGL (off)"
|
||||
echo ", GL (${gl}), VirGL (off)"
|
||||
fi
|
||||
|
||||
# Build the video configuration
|
||||
@ -757,6 +780,11 @@ function vm_boot() {
|
||||
ati-vga|cirrus-vga|VGA) VIDEO="${VIDEO},vgamem_mb=64";;
|
||||
esac
|
||||
|
||||
# Configure multiscreen if max_outputs was provided in the .conf file
|
||||
if [ -v max_outputs ]; then
|
||||
VIDEO="${VIDEO},max_outputs=${max_outputs}"
|
||||
fi
|
||||
|
||||
# Add fullscreen options
|
||||
VIDEO="${VIDEO} ${FULLSCREEN}"
|
||||
|
||||
@ -765,9 +793,11 @@ function vm_boot() {
|
||||
|
||||
echo -n "" > "${VMDIR}/${VMNAME}.ports"
|
||||
|
||||
# Find a free port to expose ssh to the guest
|
||||
local SSH_PORT=""
|
||||
SSH_PORT=$(get_port 22220 9)
|
||||
if [ -z "$SSH_PORT" ]; then
|
||||
# Find a free port to expose ssh to the guest
|
||||
SSH_PORT=$(get_port 22220 9)
|
||||
fi
|
||||
|
||||
if [ -n "${SSH_PORT}" ]; then
|
||||
echo "ssh,${SSH_PORT}" >> "${VMDIR}/${VMNAME}.ports"
|
||||
NET="${NET},hostfwd=tcp::${SSH_PORT}-:22"
|
||||
@ -787,10 +817,12 @@ function vm_boot() {
|
||||
done
|
||||
fi
|
||||
|
||||
# Find a free port for spice
|
||||
local SPICE="disable-ticketing=on"
|
||||
local SPICE_PORT=""
|
||||
SPICE_PORT=$(get_port 5930 9)
|
||||
if [ -z "${SPICE_PORT}" ]; then
|
||||
# Find a free port for spice
|
||||
SPICE_PORT=$(get_port 5930 9)
|
||||
fi
|
||||
|
||||
if [ -z "${SPICE_PORT}" ]; then
|
||||
echo " - SPICE: All SPICE ports have been exhausted."
|
||||
if [ "${OUTPUT}" == "none" ] || [ "${OUTPUT}" == "spice" ] || [ "${OUTPUT}" == "spice-app" ]; then
|
||||
@ -873,9 +905,6 @@ function vm_boot() {
|
||||
-m ${RAM_VM} ${BALLOON}
|
||||
-smbios type=2,manufacturer="Quickemu Project",product="Quickemu",version="${VERSION}",serial="0xDEADBEEF",location="quickemu.com",asset="${VMNAME}"
|
||||
${VIDEO} -display ${DISPLAY_RENDER}
|
||||
-device usb-ehci,id=input
|
||||
-device usb-kbd,bus=input.0
|
||||
-device ${MOUSE},bus=input.0
|
||||
-audiodev ${AUDIO_DEV}
|
||||
-device intel-hda -device hda-duplex,audiodev=audio0
|
||||
-rtc base=localtime,clock=host,driftfix=slew
|
||||
@ -900,14 +929,64 @@ function vm_boot() {
|
||||
-device usb-ccid
|
||||
-chardev spicevmc,id=ccid,name=smartcard
|
||||
-device ccid-card-passthru,chardev=ccid
|
||||
-monitor none
|
||||
-serial mon:stdio)
|
||||
)
|
||||
|
||||
|
||||
# setup usb-controller
|
||||
[ -z "${USB_CONTROLLER}" ] && USB_CONTROLLER="$usb_controller"
|
||||
if [ "${USB_CONTROLLER}" == "ehci" ]; then
|
||||
args+=(-device usb-ehci,id=input)
|
||||
elif [ "${USB_CONTROLLER}" == "xhci" ]; then
|
||||
args+=(-device qemu-xhci,id=input)
|
||||
elif [ -z "${USB_CONTROLLER}" ] || [ "${USB_CONTROLLER}" == "none" ]; then
|
||||
# add nothing
|
||||
:
|
||||
else
|
||||
echo "WARNING! Unknown usb-controller value: '${USB_CONTROLLER}'"
|
||||
fi
|
||||
|
||||
# setup keyboard
|
||||
# @INFO: must be set after usb-controller
|
||||
[ -z "${KEYBOARD}" ] && KEYBOARD="$keyboard"
|
||||
if [ "${KEYBOARD}" == "usb" ]; then
|
||||
args+=(-device usb-kbd,bus=input.0)
|
||||
elif [ "${KEYBOARD}" == "virtio" ]; then
|
||||
args+=(-device virtio-keyboard)
|
||||
elif [ "${KEYBOARD}" == "ps2" ] || [ -z "${KEYBOARD}" ]; then
|
||||
# add nothing, default is ps/2 keyboard
|
||||
:
|
||||
else
|
||||
echo "WARNING! Unknown keyboard value: '${KEYBOARD}'; Fallback to ps2"
|
||||
fi
|
||||
|
||||
# setup keyboard_layout
|
||||
# @INFO: When using the VNC display, you must use the -k parameter to set the keyboard layout if you are not using en-us.
|
||||
[ -z "${KEYBOARD_LAYOUT}" ] && KEYBOARD_LAYOUT="$keyboard_layout"
|
||||
if [ -n "${KEYBOARD_LAYOUT}" ]; then
|
||||
args+=(-k ${KEYBOARD_LAYOUT})
|
||||
fi
|
||||
|
||||
# FIXME: Check for device availability. qemu will fail to start otherwise
|
||||
if [ -n "${BRAILLE}" ]; then
|
||||
# shellcheck disable=SC2054
|
||||
args+=(-chardev braille,id=brltty
|
||||
-device usb-braille,id=usbbrl,chardev=brltty)
|
||||
# shellcheck disable=SC2054
|
||||
args+=(-chardev braille,id=brltty
|
||||
-device usb-braille,id=usbbrl,chardev=brltty)
|
||||
fi
|
||||
|
||||
# setup mouse
|
||||
# @INFO: must be set after usb-controller
|
||||
[ -z "${MOUSE}" ] && MOUSE="$mouse"
|
||||
if [ "${MOUSE}" == "usb" ]; then
|
||||
args+=(-device usb-mouse,bus=input.0)
|
||||
elif [ "${MOUSE}" == "tablet" ]; then
|
||||
args+=(-device usb-tablet,bus=input.0)
|
||||
elif [ "${MOUSE}" == "virtio" ]; then
|
||||
args+=(-device virtio-mouse)
|
||||
elif [ "${MOUSE}" == "ps2" ] || [ -z "${MOUSE}" ]; then
|
||||
# add nothing, default is ps/2 mouse
|
||||
:
|
||||
else
|
||||
echo "WARNING! Unknown mouse value: '${MOUSE}; Fallback to ps2'"
|
||||
fi
|
||||
|
||||
if [ -n "${bridge}" ]; then
|
||||
@ -978,6 +1057,12 @@ function vm_boot() {
|
||||
args+=(-device ahci,id=ahci
|
||||
-device ide-hd,bus=ahci.0,drive=SystemDisk
|
||||
-drive id=SystemDisk,if=none,format=qcow2,file="${disk_img}" ${STATUS_QUO})
|
||||
elif [ "${guest_os}" == "batocera" ] ; then
|
||||
# shellcheck disable=SC2054,SC2206
|
||||
args+=(-device virtio-blk-pci,drive=BootDisk
|
||||
-drive id=BootDisk,if=none,format=raw,file="${img}"
|
||||
-device virtio-blk-pci,drive=SystemDisk
|
||||
-drive id=SystemDisk,if=none,format=qcow2,file="${disk_img}" ${STATUS_QUO})
|
||||
else
|
||||
# shellcheck disable=SC2054,SC2206
|
||||
args+=(-device virtio-blk-pci,drive=SystemDisk
|
||||
@ -1005,8 +1090,87 @@ function vm_boot() {
|
||||
-device tpm-tis,tpmdev=tpm0)
|
||||
fi
|
||||
|
||||
if [ -n "${extra_args}" ]; then
|
||||
args+=("${extra_args}")
|
||||
if [ -z "${MONITOR}" ]; then
|
||||
MONITOR="${monitor:-none}"
|
||||
fi
|
||||
|
||||
if [ -z "${MONITOR_TELNET_HOST}" ]; then
|
||||
MONITOR_TELNET_HOST="${monitor_telnet_host:-localhost}"
|
||||
fi
|
||||
if [ -z "${MONITOR_TELNET_PORT}" ]; then
|
||||
MONITOR_TELNET_PORT="${monitor_telnet_port}"
|
||||
fi
|
||||
if [ -n "${MONITOR_TELNET_PORT}" ] && ! is_numeric "${MONITOR_TELNET_PORT}"; then
|
||||
echo "ERROR: telnet-port must be a number!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "${MONITOR}" == "none" ]; then
|
||||
args+=(-monitor none)
|
||||
echo " - Monitor: (off)"
|
||||
elif [ "${MONITOR}" == "telnet" ]; then
|
||||
# Find a free port to expose monitor-telnet to the guest
|
||||
local temp_port="$(get_port ${MONITOR_TELNET_PORT} 9)"
|
||||
if [ -z "${temp_port}" ]; then
|
||||
echo " - Monitor: All Monitor-Telnet ports have been exhausted."
|
||||
else
|
||||
MONITOR_TELNET_PORT="${temp_port}"
|
||||
args+=(-monitor telnet:${MONITOR_TELNET_HOST}:${MONITOR_TELNET_PORT},server,nowait)
|
||||
echo " - Monitor: On host: telnet ${MONITOR_TELNET_HOST} ${MONITOR_TELNET_PORT}"
|
||||
echo "monitor-telnet,${MONITOR_TELNET_PORT},${MONITOR_TELNET_HOST}" >> "${VMDIR}/${VMNAME}.ports"
|
||||
fi
|
||||
elif [ "${MONITOR}" == "socket" ]; then
|
||||
args+=(-monitor unix:${VM_MONITOR_SOCKETPATH},server,nowait)
|
||||
echo " - Monitor: On host: nc -U \"${VM_MONITOR_SOCKETPATH}\""
|
||||
echo " or : socat -,echo=0,icanon=0 unix-connect:${VM_MONITOR_SOCKETPATH}"
|
||||
else
|
||||
echo "ERROR! \"${MONITOR}\" is an unknown monitor option."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "${SERIAL}" ]; then
|
||||
SERIAL="${serial:-none}"
|
||||
fi
|
||||
|
||||
if [ -z "${SERIAL_TELNET_HOST}" ]; then
|
||||
SERIAL_TELNET_HOST="${serial_telnet_host:-localhost}"
|
||||
fi
|
||||
if [ -z "${SERIAL_TELNET_PORT}" ]; then
|
||||
SERIAL_TELNET_PORT="${serial_telnet_port}"
|
||||
fi
|
||||
if [ -n "${SERIAL_TELNET_PORT}" ] && ! is_numeric "${SERIAL_TELNET_PORT}"; then
|
||||
echo "ERROR: serial-port must be a number!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "${SERIAL}" == "none" ]; then
|
||||
args+=(-serial none)
|
||||
elif [ "${SERIAL}" == "telnet" ]; then
|
||||
# Find a free port to expose serial-telnet to the guest
|
||||
local temp_port="$(get_port ${SERIAL_TELNET_PORT} 9)"
|
||||
if [ -z "${temp_port}" ]; then
|
||||
echo " - Serial: All Serial-Telnet ports have been exhausted."
|
||||
else
|
||||
SERIAL_TELNET_PORT="${temp_port}"
|
||||
args+=(-serial telnet:${SERIAL_TELNET_HOST}:${SERIAL_TELNET_PORT},server,nowait)
|
||||
echo " - Serial: On host: telnet ${SERIAL_TELNET_HOST} ${SERIAL_TELNET_PORT}"
|
||||
echo "serial-telnet,${SERIAL_TELNET_PORT},${SERIAL_TELNET_HOST}" >> "${VMDIR}/${VMNAME}.ports"
|
||||
fi
|
||||
elif [ "${SERIAL}" == "socket" ]; then
|
||||
args+=(-serial unix:${VM_SERIAL_SOCKETPATH},server,nowait)
|
||||
echo " - Serial: On host: nc -U \"${VM_SERIAL_SOCKETPATH}\""
|
||||
echo " or : socat -,echo=0,icanon=0 unix-connect:${VM_SERIAL_SOCKETPATH}"
|
||||
else
|
||||
echo "ERROR! \"${SERIAL}\" is an unknown serial option."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
if [ -z "${EXTRA_ARGS}" ]; then
|
||||
EXTRA_ARGS="${extra_args}"
|
||||
fi
|
||||
if [ -n "${EXTRA_ARGS}" ]; then
|
||||
args+=(${EXTRA_ARGS})
|
||||
fi
|
||||
|
||||
# The OSK parameter contains parenthesis, they need to be escaped in the shell
|
||||
@ -1017,19 +1181,53 @@ function vm_boot() {
|
||||
SHELL_ARGS="${SHELL_ARGS//)/\\)}"
|
||||
SHELL_ARGS="${SHELL_ARGS//Quickemu Project/\"Quickemu Project\"}"
|
||||
|
||||
echo "${QEMU}" "${SHELL_ARGS}" >> "${VMDIR}/${VMNAME}.sh"
|
||||
${QEMU} "${args[@]}" > "${VMDIR}/${VMNAME}.log" &
|
||||
if [ ${VM_UP} -eq 0 ]; then
|
||||
echo "${QEMU}" "${SHELL_ARGS}" >> "${VMDIR}/${VMNAME}.sh"
|
||||
${QEMU} "${args[@]}" > "${VMDIR}/${VMNAME}.log" &
|
||||
sleep 0.25
|
||||
fi
|
||||
|
||||
# If output is 'none' then SPICE was requested.
|
||||
if [ "${OUTPUT}" == "spice" ]; then
|
||||
if [ -n "${PUBLIC}" ]; then
|
||||
spicy --title "${VMNAME}" --port "${SPICE_PORT}" --spice-shared-dir "${PUBLIC}" "${FULLSPICY}" >/dev/null 2>&1 &
|
||||
else
|
||||
spicy --title "${VMNAME}" --port "${SPICE_PORT}" "${FULLSPICY}" >/dev/null 2>&1 &
|
||||
echo " - Process: Starting ${VM} as ${VMNAME} ($(cat "${VMDIR}/${VMNAME}.pid"))"
|
||||
}
|
||||
|
||||
function start_viewer {
|
||||
errno=0
|
||||
if [ "${VIEWER}" != "none" ]; then
|
||||
echo "---"
|
||||
|
||||
# If output is 'none' then SPICE was requested.
|
||||
if [ "${OUTPUT}" == "spice" ]; then
|
||||
if [ "${VIEWER}" == "remote-viewer" ]; then
|
||||
# show via viewer: remote-viewer
|
||||
|
||||
if [ -n "${PUBLIC}" ]; then
|
||||
echo " - Start viewer: ${VIEWER} --title \"${VMNAME}\" --spice-shared-dir \"${PUBLIC}\" ${FULLSPICY} \"spice://localhost:${SPICE_PORT}\" >/dev/null 2>&1 &"
|
||||
${VIEWER} --title "${VMNAME}" --spice-shared-dir "${PUBLIC}" ${FULLSPICY} "spice://localhost:${SPICE_PORT}" >/dev/null 2>&1 &
|
||||
errno=$?
|
||||
else
|
||||
echo " - Start viewer: ${VIEWER} --title \"${VMNAME}\" ${FULLSPICY} \"spice://localhost:${SPICE_PORT}\" >/dev/null 2>&1 &"
|
||||
${VIEWER} --title "${VMNAME}" ${FULLSPICY} "spice://localhost:${SPICE_PORT}" >/dev/null 2>&1 &
|
||||
errno=$?
|
||||
fi
|
||||
|
||||
elif [ "${VIEWER}" == "spicy" ]; then
|
||||
# show via viewer: spicy
|
||||
|
||||
if [ -n "${PUBLIC}" ]; then
|
||||
echo " - Start viewer: ${VIEWER} --title \"${VMNAME}\" --port \"${SPICE_PORT}\" --spice-shared-dir \"${PUBLIC}\" \"${FULLSPICY}\" >/dev/null 2>&1 &"
|
||||
${VIEWER} --title "${VMNAME}" --port "${SPICE_PORT}" --spice-shared-dir "${PUBLIC}" "${FULLSPICY}" >/dev/null 2>&1 &
|
||||
errno=$?
|
||||
else
|
||||
echo " - Start viewer: ${VIEWER} --title \"${VMNAME}\" --port \"${SPICE_PORT}\" \"${FULLSPICY}\" >/dev/null 2>&1 &"
|
||||
${VIEWER} --title "${VMNAME}" --port "${SPICE_PORT}" "${FULLSPICY}" >/dev/null 2>&1 &
|
||||
errno=$?
|
||||
fi
|
||||
fi
|
||||
if [ $errno -ne 0 ]; then
|
||||
echo "WARNING! Could not start viewer(${VIEWER}) Err: $errno"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
sleep 0.25
|
||||
echo " - Process: Starting ${VM} as ${VMNAME} ($(cat "${VMDIR}/${VMNAME}.pid"))"
|
||||
}
|
||||
|
||||
function shortcut_create {
|
||||
@ -1058,33 +1256,128 @@ function usage() {
|
||||
echo " ${LAUNCHER} --vm ubuntu.conf"
|
||||
echo
|
||||
echo "You can also pass optional parameters"
|
||||
echo " --braille : Enable braille support. Requires SDL."
|
||||
echo " --delete-disk : Delete the disk image and EFI variables"
|
||||
echo " --delete-vm : Delete the entire VM and it's configuration"
|
||||
echo " --display : Select display backend. 'sdl' (default), 'gtk', 'none', or 'spice'"
|
||||
echo " --fullscreen : Starts VM in full screen mode (Ctl+Alt+f to exit)"
|
||||
echo " --ignore-msrs-always : Configure KVM to always ignore unhandled machine-specific registers"
|
||||
echo " --screen <screen> : Use specified screen to determine the window size."
|
||||
echo " --shortcut : Create a desktop shortcut"
|
||||
echo " --snapshot apply <tag> : Apply/restore a snapshot."
|
||||
echo " --snapshot create <tag> : Create a snapshot."
|
||||
echo " --snapshot delete <tag> : Delete a snapshot."
|
||||
echo " --snapshot info : Show disk/snapshot info."
|
||||
echo " --status-quo : Do not commit any changes to disk/snapshot."
|
||||
echo " --version : Print version"
|
||||
echo " --braille : Enable braille support. Requires SDL."
|
||||
echo " --delete-disk : Delete the disk image and EFI variables"
|
||||
echo " --delete-vm : Delete the entire VM and it's configuration"
|
||||
echo " --display : Select display backend. 'sdl' (default), 'gtk', 'none', 'spice' or 'spice-app'"
|
||||
echo " --fullscreen : Starts VM in full screen mode (Ctl+Alt+f to exit)"
|
||||
echo " --ignore-msrs-always : Configure KVM to always ignore unhandled machine-specific registers"
|
||||
echo " --screen <screen> : Use specified screen to determine the window size."
|
||||
echo " --shortcut : Create a desktop shortcut"
|
||||
echo " --snapshot apply <tag> : Apply/restore a snapshot."
|
||||
echo " --snapshot create <tag> : Create a snapshot."
|
||||
echo " --snapshot delete <tag> : Delete a snapshot."
|
||||
echo " --snapshot info : Show disk/snapshot info."
|
||||
echo " --status-quo : Do not commit any changes to disk/snapshot."
|
||||
echo " --viewer <viewer> : Choose an alternative viewer. @Options: 'spicy' (default), 'remote-viewer', 'none'"
|
||||
echo " --ssh-port <port> : Set ssh-port manually"
|
||||
echo " --spice-port <port> : Set spice-port manually"
|
||||
echo " --public-dir <path> : expose share directory. @Options: '' (default: xdg-user-dir PUBLICSHARE), '<directory>', 'none'"
|
||||
echo " --monitor <type> : Set monitor connection type. @Options: 'socket' (default), 'telnet', 'none'"
|
||||
echo " --monitor-telnet-host <ip/host> : Set telnet host for monitor. (default: 'localhost')"
|
||||
echo " --monitor-telnet-port <port> : Set telnet port for monitor. (default: '4440')"
|
||||
echo " --monitor-cmd <cmd> : Send command to monitor if available. (Example: system_powerdown)"
|
||||
echo " --serial <type> : Set serial connection type. @Options: 'socket' (default), 'telnet', 'none'"
|
||||
echo " --serial-telnet-host <ip/host> : Set telnet host for serial. (default: 'localhost')"
|
||||
echo " --serial-telnet-port <port> : Set telnet port for serial. (default: '6660')"
|
||||
echo " --keyboard <type> : Set keyboard. @Options: 'usb' (default), 'ps2', 'virtio'"
|
||||
echo " --keyboard_layout <layout> : Set keyboard layout."
|
||||
echo " --mouse <type> : Set mouse. @Options: 'tablet' (default), 'ps2', 'usb', 'virtio'"
|
||||
echo " --usb-controller <type> : Set usb-controller. @Options: 'ehci' (default), 'xhci', 'none'"
|
||||
echo " --extra_args <arguments> : Pass additional arguments to qemu"
|
||||
echo " --version : Print version"
|
||||
exit 1
|
||||
}
|
||||
|
||||
function display_param_check() {
|
||||
if [ "${OUTPUT}" != "gtk" ] && [ "${OUTPUT}" != "none" ] && [ "${OUTPUT}" != "sdl" ] && [ "${OUTPUT}" != "spice" ]; then
|
||||
if [ "${OUTPUT}" != "gtk" ] && [ "${OUTPUT}" != "none" ] && [ "${OUTPUT}" != "sdl" ] && [ "${OUTPUT}" != "spice" ] && [ "${OUTPUT}" != "spice-app" ]; then
|
||||
echo "ERROR! Requested output '${OUTPUT}' is not recognised."
|
||||
exit 1
|
||||
elif [ "${OUTPUT}" == "spice" ] && ! command -v spicy &>/dev/null; then
|
||||
echo "ERROR! Requested SPICE display, but 'spicy' is not installed."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
function viewer_param_check() {
|
||||
if [ "${VIEWER}" != "none" ] && [ "${VIEWER}" != "spicy" ] && [ "${VIEWER}" != "remote-viewer" ]; then
|
||||
echo "ERROR! Requested viewer '${VIEWER}' is not recognised."
|
||||
exit 1
|
||||
fi
|
||||
if [ "${VIEWER}" == "spicy" ] && ! command -v spicy &>/dev/null; then
|
||||
echo "ERROR! Requested 'spicy' as viewer, but 'spicy' is not installed."
|
||||
exit 1
|
||||
elif [ "${VIEWER}" == "remote-viewer" ] && ! command -v remote-viewer &>/dev/null; then
|
||||
echo "ERROR! Requested 'remote-viewer' as viewer, but 'remote-viewer' is not installed."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
function parse_ports_from_file {
|
||||
local FILE="${VMDIR}/${VMNAME}.ports"
|
||||
|
||||
# parse ports
|
||||
local port_name=( $(cat "$FILE" | cut -d, -f1) )
|
||||
local port_number=( $(cat "$FILE" | cut -d, -f2) )
|
||||
local host_name=( $(cat "$FILE" | gawk 'FS="," {print $3,"."}') )
|
||||
|
||||
for ((i=0; i<${#port_name[@]}; i++)); do
|
||||
if [ "${port_name[$i]}" == "ssh" ]; then
|
||||
SSH_PORT="${port_number[$i]}"
|
||||
elif [ "${port_name[$i]}" == "spice" ]; then
|
||||
SPICE_PORT="${port_number[$i]}"
|
||||
elif [ "${port_name[$i]}" == "monitor-telnet" ]; then
|
||||
MONITOR_TELNET_PORT="${port_number[$i]}"
|
||||
MONITOR_TELNET_HOST="${host_name[$i]}"
|
||||
elif [ "${port_name[$i]}" == "serial-telnet" ]; then
|
||||
SERIAL_TELNET_PORT="${port_number[$i]}"
|
||||
SERIAL_TELNET_HOST="${host_name[$i]}"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
function is_numeric {
|
||||
[[ "$1" =~ ^[0-9]+$ ]]
|
||||
}
|
||||
|
||||
function monitor_send_cmd {
|
||||
local MSG="${1}"
|
||||
|
||||
if [ -z "${MSG}" ]; then
|
||||
echo "WARNING! Send to QEMU-Monitor: Message empty!"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Determine monitor channel
|
||||
local monitor_channel=""
|
||||
|
||||
if [ -S "${VMDIR}/${VMNAME}-monitor.socket" ]; then
|
||||
monitor_channel="socket"
|
||||
elif [ -n "${MONITOR_TELNET_PORT}" ] && [ -n "${MONITOR_TELNET_HOST}" ]; then
|
||||
monitor_channel="telnet"
|
||||
else
|
||||
echo "WARNING! No qemu-monitor channel available - Couldn't send message to monitor!"
|
||||
return
|
||||
fi
|
||||
|
||||
|
||||
case "${monitor_channel}" in
|
||||
socket)
|
||||
echo -e " - MON-SEND: ${MSG}"
|
||||
echo -e "${MSG}" | socat -,shut-down unix-connect:"${VM_MONITOR_SOCKETPATH}" 2>&1 > /dev/null
|
||||
;;
|
||||
telnet)
|
||||
echo -e " - MON-SEND: ${MSG}"
|
||||
echo -e "${MSG}" | socat - tcp:"${MONITOR_TELNET_HOST}":"${MONITOR_TELNET_PORT}" 2>&1 > /dev/null
|
||||
;;
|
||||
*)
|
||||
echo "ERROR! This should never happen!"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
### MAIN
|
||||
|
||||
# Lowercase variables are used in the VM config file only
|
||||
boot="efi"
|
||||
bridge=""
|
||||
@ -1104,6 +1397,26 @@ ram=""
|
||||
secureboot="off"
|
||||
tpm="off"
|
||||
usb_devices=()
|
||||
viewer="spicy"
|
||||
ssh_port=""
|
||||
spice_port=""
|
||||
public_dir=""
|
||||
monitor="socket"
|
||||
monitor_telnet_port="4440"
|
||||
monitor_telnet_host="localhost"
|
||||
monitor_cmd=""
|
||||
serial="socket"
|
||||
serial_telnet_port="6660"
|
||||
serial_telnet_host="localhost"
|
||||
# options: ehci(USB2.0), xhci(USB3.0)
|
||||
usb_controller="ehci"
|
||||
# options: ps2, usb, virtio
|
||||
keyboard="usb"
|
||||
keyboard_layout="en-us"
|
||||
# options: ps2, usb, tablet, virtio
|
||||
mouse="tablet"
|
||||
# options: ehci, xhci
|
||||
usb_controller="ehci"
|
||||
|
||||
BRAILLE=""
|
||||
DELETE_DISK=0
|
||||
@ -1124,27 +1437,28 @@ VM=""
|
||||
VMDIR=""
|
||||
VMNAME=""
|
||||
VMPATH=""
|
||||
VIEWER=""
|
||||
SSH_PORT=""
|
||||
SPICE_PORT=""
|
||||
MONITOR=""
|
||||
MONITOR_TELNET_PORT=""
|
||||
MONITOR_TELNET_HOST=""
|
||||
MONITOR_CMD=""
|
||||
VM_MONITOR_SOCKETPATH=""
|
||||
VM_SERIAL_SOCKETPATH=""
|
||||
SERIAL=""
|
||||
SERIAL_TELNET_PORT=""
|
||||
SERIAL_TELNET_HOST=""
|
||||
KEYBOARD=""
|
||||
KEYBOARD_LAYOUT=""
|
||||
MOUSE=""
|
||||
USB_CONTROLLER=""
|
||||
EXTRA_ARGS=""
|
||||
|
||||
# shellcheck disable=SC2155
|
||||
readonly LAUNCHER=$(basename "${0}")
|
||||
readonly DISK_MIN_SIZE=$((197632 * 8))
|
||||
readonly VERSION="3.15"
|
||||
|
||||
# PUBLICSHARE is the only directory exposed to guest VMs for file
|
||||
# sharing via 9P, spice-webdavd and Samba. This path is not configurable.
|
||||
if command -v xdg-user-dir &>/dev/null; then
|
||||
PUBLIC=$(xdg-user-dir PUBLICSHARE)
|
||||
if [ "${PUBLIC%/}" != "${HOME}" ]; then
|
||||
if [ ! -d "${PUBLIC}" ]; then
|
||||
mkdir -p "${PUBLIC}"
|
||||
fi
|
||||
PUBLIC_TAG="Public-${USER,,}"
|
||||
# shellcheck disable=SC2012
|
||||
PUBLIC_PERMS=$(ls -ld "${PUBLIC}" | cut -d' ' -f1)
|
||||
else
|
||||
PUBLIC=""
|
||||
fi
|
||||
fi
|
||||
readonly VERSION="4.0"
|
||||
|
||||
# TODO: Make this run the native architecture binary
|
||||
QEMU=$(command -v qemu-system-x86_64)
|
||||
@ -1217,6 +1531,66 @@ else
|
||||
VM="${2}"
|
||||
shift
|
||||
shift;;
|
||||
-viewer|--viewer)
|
||||
VIEWER="${2}"
|
||||
shift
|
||||
shift;;
|
||||
-ssh-port|--ssh-port)
|
||||
SSH_PORT="${2}"
|
||||
shift;
|
||||
shift;;
|
||||
-spice-port|--spice-port)
|
||||
SPICE_PORT="${2}"
|
||||
shift;
|
||||
shift;;
|
||||
-public-dir|--public-dir)
|
||||
PUBLIC="${2}"
|
||||
shift;
|
||||
shift;;
|
||||
-monitor|--monitor)
|
||||
MONITOR="${2}"
|
||||
shift;
|
||||
shift;;
|
||||
-monitor-cmd|--monitor-cmd)
|
||||
MONITOR_CMD="${2}"
|
||||
shift;
|
||||
shift;;
|
||||
-monitor-telnet-host|--monitor-telnet-host)
|
||||
MONITOR_TELNET_HOST="${2}"
|
||||
shift;
|
||||
shift;;
|
||||
-monitor-telnet-port|--monitor-telnet-port)
|
||||
MONITOR_TELNET_PORT="${2}"
|
||||
shift;
|
||||
shift;;
|
||||
-serial|--serial)
|
||||
SERIAL="${2}"
|
||||
shift;
|
||||
shift;;
|
||||
-serial-telnet-host|--serial-telnet-host)
|
||||
SERIAL_TELNET_HOST="${2}"
|
||||
shift;
|
||||
shift;;
|
||||
-serial-telnet-port|--serial-telnet-port)
|
||||
SERIAL_TELNET_PORT="${2}"
|
||||
shift;
|
||||
shift;;
|
||||
-keyboard|--keyboard)
|
||||
KEYBOARD="${2}"
|
||||
shift;
|
||||
shift;;
|
||||
-mouse|--mouse)
|
||||
MOUSE="${2}"
|
||||
shift;
|
||||
shift;;
|
||||
-usb-controller|--usb-controller)
|
||||
USB_CONTROLLER="${2}"
|
||||
shift;
|
||||
shift;;
|
||||
-extra_args|--extra_args)
|
||||
EXTRA_ARGS="${2}"
|
||||
shift;
|
||||
shift;;
|
||||
-version|--version)
|
||||
echo "${VERSION}"
|
||||
exit;;
|
||||
@ -1240,6 +1614,8 @@ if [ -n "${VM}" ] && [ -e "${VM}" ]; then
|
||||
VMDIR=$(dirname "${disk_img}")
|
||||
VMNAME=$(basename "${VM}" .conf)
|
||||
VMPATH=$(realpath "$(dirname "${VM}")")
|
||||
VM_MONITOR_SOCKETPATH="${VMDIR}/${VMNAME}-monitor.socket"
|
||||
VM_SERIAL_SOCKETPATH="${VMDIR}/${VMNAME}-serial.socket"
|
||||
|
||||
# Backwards compatibility for ${driver_iso}
|
||||
if [ -n "${driver_iso}" ] && [ -z "${fixed_iso}" ]; then
|
||||
@ -1251,15 +1627,77 @@ if [ -n "${VM}" ] && [ -e "${VM}" ]; then
|
||||
disk_size="${disk}"
|
||||
fi
|
||||
|
||||
# Set the default OUTPUT if not provided by user
|
||||
if [ -z "${OUTPUT}" ]; then
|
||||
# Braille support requires SDL. Override OUTPUT if braille was requested.
|
||||
if [ -n "${BRAILLE}" ]; then
|
||||
OUTPUT="sdl"
|
||||
elif [ -z "${display}" ]; then
|
||||
OUTPUT="sdl"
|
||||
else
|
||||
OUTPUT="${display}"
|
||||
display_param_check
|
||||
OUTPUT="sdl"
|
||||
fi
|
||||
|
||||
# Braille support requires SDL. Override OUTPUT if braille was requested.
|
||||
if [ -n "${BRAILLE}" ]; then
|
||||
OUTPUT="sdl"
|
||||
fi
|
||||
|
||||
if [ -z "${VIEWER}" ]; then
|
||||
VIEWER="${viewer}"
|
||||
fi
|
||||
viewer_param_check
|
||||
|
||||
# Set the default 3d acceleration. Will be overridden to "off" if
|
||||
# DISPLAY_DEVICE is determined to be virtio-vga since it doesn't work there.
|
||||
if [ -z "${gl}" ]; then
|
||||
gl="on"
|
||||
fi
|
||||
|
||||
if [ -z "${PUBLIC}" ]; then
|
||||
PUBLIC="${public_dir}"
|
||||
fi
|
||||
|
||||
if [ "${PUBLIC}" == "none" ]; then
|
||||
PUBLIC=""
|
||||
else
|
||||
# PUBLICSHARE is the only directory exposed to guest VMs for file
|
||||
# sharing via 9P, spice-webdavd and Samba. This path is not configurable.
|
||||
if [ -z "${PUBLIC}" ]; then
|
||||
if command -v xdg-user-dir &>/dev/null; then
|
||||
PUBLIC=$(xdg-user-dir PUBLICSHARE)
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -d "${PUBLIC}" ]; then
|
||||
echo "ERROR! Public directory: '${PUBLIC}' doesn't exist!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PUBLIC_TAG="Public-${USER,,}"
|
||||
# shellcheck disable=SC2012
|
||||
PUBLIC_PERMS=$(ls -ld "${PUBLIC}" | cut -d' ' -f1)
|
||||
fi
|
||||
|
||||
if [ -z "${SSH_PORT}" ]; then
|
||||
SSH_PORT=${ssh_port}
|
||||
fi
|
||||
if [ -n "${SSH_PORT}" ] && ! is_numeric "${SSH_PORT}"; then
|
||||
echo "ERROR: ssh-port must be a number!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "${SPICE_PORT}" ]; then
|
||||
SPICE_PORT=${spice_port}
|
||||
fi
|
||||
if [ -n "${SPICE_PORT}" ] && ! is_numeric "${SPICE_PORT}"; then
|
||||
echo "ERROR: spice-port must be a number!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if vm is already run
|
||||
VM_PID=0
|
||||
VM_UP=0
|
||||
if [ -r "${VMDIR}/${VMNAME}.pid" ]; then
|
||||
VM_PID=$(head -c50 "${VMDIR}/${VMNAME}.pid")
|
||||
kill -0 ${VM_PID} 2>&1 >/dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "VM already started!"
|
||||
VM_UP=1
|
||||
fi
|
||||
fi
|
||||
|
||||
@ -1313,6 +1751,14 @@ if [ ${SHORTCUT} -eq 1 ]; then
|
||||
exit
|
||||
fi
|
||||
|
||||
vm_boot
|
||||
if [ $VM_UP -eq 0 ]; then
|
||||
vm_boot
|
||||
start_viewer
|
||||
else
|
||||
parse_ports_from_file
|
||||
start_viewer
|
||||
fi
|
||||
|
||||
[ -n "${MONITOR_CMD}" ] && monitor_send_cmd "${MONITOR_CMD}"
|
||||
|
||||
# vim:tabstop=2:shiftwidth=2:expandtab
|
||||
|
367
quickget
367
quickget
@ -36,8 +36,10 @@ function pretty_name() {
|
||||
archlinux) PRETTY_NAME="Arch Linux";;
|
||||
arcolinux) PRETTY_NAME="Arco Linux";;
|
||||
cachyos) PRETTY_NAME="CachyOS";;
|
||||
centos-stream) PRETTY_NAME="CentOS Stream";;
|
||||
dragonflybsd) PRETTY_NAME="DragonFlyBSD";;
|
||||
elementary) PRETTY_NAME="elementary OS";;
|
||||
endeavouros) PRETTY_NAME="EndeavourOS";;
|
||||
freebsd) PRETTY_NAME="FreeBSD";;
|
||||
freedos) PRETTY_NAME="FreeDOS";;
|
||||
garuda) PRETTY_NAME="Garuda Linux";;
|
||||
@ -45,6 +47,7 @@ function pretty_name() {
|
||||
kdeneon) PRETTY_NAME="KDE Neon";;
|
||||
kolibrios) PRETTY_NAME="KolibriOS";;
|
||||
linuxmint) PRETTY_NAME="Linux Mint";;
|
||||
lmde) PRETTY_NAME="Linux Mint Debian Edition";;
|
||||
mxlinux) PRETTY_NAME="MX Linux";;
|
||||
netboot) PRETTY_NAME="netboot.xyz";;
|
||||
netbsd) PRETTY_NAME="NetBSD";;
|
||||
@ -160,11 +163,15 @@ function os_support() {
|
||||
android \
|
||||
archlinux \
|
||||
arcolinux \
|
||||
batocera \
|
||||
cachyos \
|
||||
centos-stream \
|
||||
debian \
|
||||
deepin \
|
||||
devuan \
|
||||
dragonflybsd \
|
||||
elementary \
|
||||
endeavouros \
|
||||
fedora \
|
||||
freebsd \
|
||||
freedos \
|
||||
@ -177,6 +184,7 @@ function os_support() {
|
||||
kolibrios \
|
||||
kubuntu \
|
||||
linuxmint \
|
||||
lmde \
|
||||
manjaro \
|
||||
mxlinux \
|
||||
netboot \
|
||||
@ -206,7 +214,7 @@ function os_support() {
|
||||
}
|
||||
|
||||
function releases_alma() {
|
||||
echo 8.4 8.5
|
||||
echo 8.6 9.0
|
||||
}
|
||||
|
||||
function editions_alma() {
|
||||
@ -238,17 +246,33 @@ function editions_arcolinux() {
|
||||
}
|
||||
|
||||
function releases_cachyos() {
|
||||
echo 2022.01.09 2022.02.11
|
||||
echo 220731
|
||||
}
|
||||
|
||||
function editions_cachyos() {
|
||||
echo kde gnome xfce
|
||||
}
|
||||
|
||||
function releases_centos-stream() {
|
||||
echo 8 9
|
||||
}
|
||||
|
||||
function editions_centos-stream() {
|
||||
echo dvd1 boot
|
||||
}
|
||||
|
||||
function releases_debian() {
|
||||
echo 10.11.0 11.2.0 11.3.0
|
||||
echo 10.11.0 11.2.0 11.3.0 11.4.0
|
||||
}
|
||||
|
||||
function editions_debian() {
|
||||
echo standard cinnamon gnome kde lxde lxqt mate xfce netinst
|
||||
}
|
||||
|
||||
function releases_deepin() {
|
||||
echo 20 20.1 20.2 20.2.1 20.2.2 20.2.3 20.2.4 20.3 20.4 20.5
|
||||
}
|
||||
|
||||
function releases_devuan() {
|
||||
echo beowulf chimaera
|
||||
}
|
||||
@ -261,8 +285,18 @@ function releases_elementary() {
|
||||
echo 6.1
|
||||
}
|
||||
|
||||
function releases_endeavouros() {
|
||||
echo apollo_22_1 \
|
||||
atlantis-21_4 \
|
||||
atlantis_neo-21_5
|
||||
}
|
||||
|
||||
function releases_fedora() {
|
||||
echo 33 34 35
|
||||
echo 33 34 35 36
|
||||
}
|
||||
|
||||
function releases_batocera() {
|
||||
echo 32 33 34
|
||||
}
|
||||
|
||||
function editions_fedora() {
|
||||
@ -279,7 +313,7 @@ function editions_fedora() {
|
||||
}
|
||||
|
||||
function releases_freebsd(){
|
||||
echo 12.2 12.3 13.0
|
||||
echo 12.3 13.0
|
||||
}
|
||||
|
||||
function editions_freebsd(){
|
||||
@ -291,23 +325,12 @@ function releases_freedos() {
|
||||
}
|
||||
|
||||
function releases_garuda() {
|
||||
echo 220131
|
||||
echo latest
|
||||
}
|
||||
|
||||
function editions_garuda() {
|
||||
echo dr460nized \
|
||||
dr460nized-blackarch \
|
||||
dr460nized-gaming \
|
||||
bspwm \
|
||||
cinnamon \
|
||||
gnome \
|
||||
i3 \
|
||||
kde-barebones \
|
||||
lxqt-kwin \
|
||||
mate \
|
||||
qtile \
|
||||
sway \
|
||||
xfce
|
||||
URL="https://mirrors.fossho.st/garuda/iso/latest/garuda/"
|
||||
echo $(wget -q -O - ${URL} | grep '^<a href' | sed -e 's/^.*="//' -e 's/\/.*//')
|
||||
}
|
||||
|
||||
function releases_gentoo() {
|
||||
@ -343,15 +366,22 @@ function releases_kolibrios() {
|
||||
}
|
||||
|
||||
function releases_linuxmint(){
|
||||
echo 20.2
|
||||
echo 20.2 20.3
|
||||
}
|
||||
|
||||
function editions_linuxmint(){
|
||||
echo cinnamon mate xfce
|
||||
}
|
||||
|
||||
function editions_lmde(){
|
||||
echo cinnamon
|
||||
}
|
||||
function releases_lmde(){
|
||||
echo 5
|
||||
}
|
||||
|
||||
function releases_mxlinux(){
|
||||
echo 21
|
||||
echo 21.1
|
||||
}
|
||||
|
||||
function editions_mxlinux(){
|
||||
@ -381,7 +411,7 @@ function releases_netbsd() {
|
||||
}
|
||||
|
||||
function releases_nixos(){
|
||||
echo 21.05 21.11
|
||||
echo 21.05 21.11 22.05
|
||||
}
|
||||
|
||||
function editions_nixos(){
|
||||
@ -389,7 +419,7 @@ function editions_nixos(){
|
||||
}
|
||||
|
||||
function releases_openbsd(){
|
||||
echo 6.7 6.8 6.9 7.0
|
||||
echo 6.8 6.9 7.0 7.1
|
||||
}
|
||||
|
||||
function releases_openindiana(){
|
||||
@ -401,15 +431,15 @@ function editions_openindiana(){
|
||||
}
|
||||
|
||||
function releases_opensuse(){
|
||||
echo 15.0 15.1 15.2 15.3 microos tumbleweed
|
||||
echo 15.0 15.1 15.2 15.3 15.4 microos tumbleweed
|
||||
}
|
||||
|
||||
function releases_oraclelinux() {
|
||||
echo 7.7 7.8 7.9 8.2 8.3 8.4 8.5
|
||||
echo 7.7 7.8 7.9 8.4 8.5 8.6 9.0
|
||||
}
|
||||
|
||||
function releases_popos() {
|
||||
echo 20.04 21.10
|
||||
echo 20.04 21.10 22.04
|
||||
}
|
||||
|
||||
function editions_popos() {
|
||||
@ -425,12 +455,13 @@ function editions_regolith() {
|
||||
}
|
||||
|
||||
function releases_rockylinux() {
|
||||
echo 8.3 8.4 8.5
|
||||
echo 8.3 8.4 8.5 9.0
|
||||
}
|
||||
|
||||
# Rocky have renamed dvd1 -> dvd at 9.0
|
||||
function editions_rockylinux() {
|
||||
echo minimal \
|
||||
dvd1
|
||||
"dvd (dvd1 prior to 9.0)"
|
||||
}
|
||||
|
||||
function releases_slackware() {
|
||||
@ -463,7 +494,6 @@ function releases_ubuntu() {
|
||||
;;
|
||||
esac
|
||||
echo ${LTS_SUPPORT} \
|
||||
21.10 \
|
||||
daily-live \
|
||||
daily-canary \
|
||||
eol-4.10 \
|
||||
@ -671,6 +701,9 @@ function make_vm_config() {
|
||||
IMAGE_FILE="${1}"
|
||||
ISO_FILE="${2}"
|
||||
case "${OS}" in
|
||||
batocera)
|
||||
GUEST="batocera"
|
||||
IMAGE_TYPE="img";;
|
||||
dragonflybsd)
|
||||
GUEST="dragonflybsd"
|
||||
IMAGE_TYPE="iso";;
|
||||
@ -712,18 +745,25 @@ function make_vm_config() {
|
||||
if [ ! -e "${CONF_FILE}" ]; then
|
||||
echo "Making ${CONF_FILE}"
|
||||
cat << EOF > "${CONF_FILE}"
|
||||
#!$(which quickemu) --vm
|
||||
guest_os="${GUEST}"
|
||||
disk_img="${VM_PATH}/disk.qcow2"
|
||||
${IMAGE_TYPE}="${VM_PATH}/${IMAGE_FILE}"
|
||||
EOF
|
||||
echo "Giving user execute permissions on ${CONF_FILE},"
|
||||
chmod u+x "${CONF_FILE}"
|
||||
if [ -n "${ISO_FILE}" ]; then
|
||||
echo "fixed_iso=\"${VM_PATH}/${ISO_FILE}\"" >> "${CONF_FILE}"
|
||||
fi
|
||||
|
||||
# OS specific tweaks
|
||||
case ${OS} in
|
||||
alma|oraclelinux|rockylinux) echo "disk_size=\"32G\"" >> "${CONF_FILE}";;
|
||||
alma|centos-stream|oraclelinux|rockylinux) echo "disk_size=\"32G\"" >> "${CONF_FILE}";;
|
||||
dragonflybsd|haiku|openbsd|netbsd|slackware|tails) echo "boot=\"legacy\"" >> "${CONF_FILE}";;
|
||||
deepin)
|
||||
echo "disk_size=\"64G\"" >> "${CONF_FILE}"
|
||||
echo "ram=\"4G\"" >> "${CONF_FILE}"
|
||||
;;
|
||||
freedos)
|
||||
echo "boot=\"legacy\"" >> "${CONF_FILE}"
|
||||
echo "disk_size=\"4G\"" >> "${CONF_FILE}"
|
||||
@ -760,7 +800,7 @@ function get_alma() {
|
||||
local EDITION="${1:-}"
|
||||
local HASH=""
|
||||
local ISO="AlmaLinux-${RELEASE}-x86_64-${EDITION}.iso"
|
||||
local URL="http://lon.mirror.rackspace.com/almalinux/${RELEASE}/isos/x86_64/"
|
||||
local URL="http://lon.mirror.rackspace.com/almalinux/${RELEASE/beta-1/beta}/isos/x86_64/"
|
||||
HASH="$(wget -q -O- "${URL}/CHECKSUM" | grep "(${ISO}" | cut -d' ' -f4)"
|
||||
echo "${URL}/${ISO} ${HASH}"
|
||||
}
|
||||
@ -821,10 +861,52 @@ function get_arcolinux() {
|
||||
echo "${URL}/${ISO} ${HASH}"
|
||||
}
|
||||
|
||||
function get_batocera() {
|
||||
local HASH=""
|
||||
local URL="https://mirrors.o2switch.fr/batocera/x86_64/stable/last"
|
||||
local ISO="$(curl -sl ${URL}/ | grep -e 'batocera.*img.gz'|cut -d\" -f2)"
|
||||
local CURRENT_RELEASE=$(echo "${ISO}"| cut -d\- -f3)
|
||||
|
||||
|
||||
case ${RELEASE} in
|
||||
${CURRENT_RELEASE}) #Current release
|
||||
URL+=""
|
||||
;;
|
||||
*)
|
||||
URL+="/archives/${RELEASE}"
|
||||
ISO="$(curl -sl ${URL}/ | grep -e 'batocera.*img.gz'|cut -d\" -f2)"
|
||||
;; # non-current are here
|
||||
|
||||
esac
|
||||
|
||||
|
||||
echo "${URL}/${ISO} ${HASH}"
|
||||
}
|
||||
|
||||
function get_cachyos() {
|
||||
local HASH=""
|
||||
local ISO="cachyos-${RELEASE}-x86_64.iso"
|
||||
local URL="https://mirror.cachyos.org/ISO"
|
||||
local ISO="cachyos-${EDITION}-linux-${RELEASE}.iso"
|
||||
local URL="https://mirror.cachyos.org/ISO/${EDITION}/${RELEASE}"
|
||||
HASH=$(wget -q -O- "${URL}/${ISO}.sha256" | cut -d' ' -f1)
|
||||
echo "${URL}/${ISO} ${HASH}"
|
||||
}
|
||||
|
||||
function get_centos-stream() {
|
||||
local HASH=""
|
||||
local ISO=""
|
||||
case ${RELEASE} in
|
||||
8)
|
||||
ISO="CentOS-Stream-${RELEASE}-x86_64-latest-${EDITION}.iso"
|
||||
URL="https://mirrors.ocf.berkeley.edu/centos/8-stream/isos/x86_64"
|
||||
HASH=$(wget -q -O- ${URL}/CHECKSUM | grep "SHA256 (${ISO}" | cut -d' ' -f4)
|
||||
;;
|
||||
9)
|
||||
ISO="CentOS-Stream-${RELEASE}-latest-x86_64-${EDITION}.iso"
|
||||
URL="https://mirrors.ocf.berkeley.edu/centos-stream/9-stream/BaseOS/x86_64/iso"
|
||||
HASH=$(wget -q -O- ${URL}/${ISO}.SHA256SUM | grep "SHA256 (${ISO}" | cut -d' ' -f4)
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "${URL}/${ISO} ${HASH}"
|
||||
}
|
||||
|
||||
@ -835,7 +917,7 @@ function get_debian() {
|
||||
local URL=""
|
||||
|
||||
case ${RELEASE} in
|
||||
11.3.0) URL="https://cdimage.debian.org/debian-cd/${RELEASE}-live/amd64/iso-hybrid";;
|
||||
11.4.0) URL="https://cdimage.debian.org/debian-cd/${RELEASE}-live/amd64/iso-hybrid";;
|
||||
*) URL="https://cdimage.debian.org/cdimage/archive/${RELEASE}-live/amd64/iso-hybrid/";;
|
||||
esac
|
||||
|
||||
@ -849,6 +931,30 @@ function get_debian() {
|
||||
echo "${URL}/${ISO} ${HASH}"
|
||||
}
|
||||
|
||||
function get_deepin() {
|
||||
local HASH=""
|
||||
local EDITION=""
|
||||
local ISO="deepin-desktop-community-${RELEASE}-amd64.iso"
|
||||
# deepin-desktop-community-20.3-amd64.iso
|
||||
local URL="https://cdimage.deepin.com/releases/"${RELEASE}
|
||||
|
||||
# fix iso name
|
||||
if [[ "${RELEASE}" == *"20" ]] ; then
|
||||
EDITION="1003"
|
||||
ISO="deepin-desktop-community-${EDITION}-amd64.iso"
|
||||
elif [[ "${RELEASE}" == *"20.1" ]]; then
|
||||
EDITION="1010"
|
||||
ISO="deepin-desktop-community-${EDITION}-amd64.iso"
|
||||
fi
|
||||
|
||||
HASH=$(wget -q -O- "${URL}/SHA256SUMS" | grep "${ISO}" | cut -d' ' -f1)
|
||||
|
||||
#echo "${URL}/${ISO} ${HASH}"
|
||||
web_get "${URL}/${ISO}" "${VM_PATH}"
|
||||
check_hash "${ISO}" "${HASH}"
|
||||
make_vm_config "${ISO}"
|
||||
}
|
||||
|
||||
function get_devuan() {
|
||||
local HASH=""
|
||||
local ISO=""
|
||||
@ -878,6 +984,16 @@ function get_elementary() {
|
||||
echo "${URL}/$(date +%s | base64)/${ISO} ${HASH}"
|
||||
}
|
||||
|
||||
function get_endeavouros() {
|
||||
local HASH=""
|
||||
# Endeavour release names are Capitalized and our $RELEASE is forced to lowercase so we have to revert it
|
||||
local ISO="EndeavourOS_${RELEASE@u}.iso"
|
||||
local URL="https://github.com/endeavouros-team/ISO/releases/download/1-EndeavourOS-ISO-releases-archive"
|
||||
|
||||
HASH=$(wget -q -O- "${URL}/${ISO}.sha512sum" | cut -d' ' -f1)
|
||||
echo "${URL}/${ISO} ${HASH}"
|
||||
}
|
||||
|
||||
function get_fedora() {
|
||||
local EDITION="${1:-}"
|
||||
local HASH=""
|
||||
@ -927,22 +1043,15 @@ function get_freedos() {
|
||||
}
|
||||
|
||||
function get_garuda() {
|
||||
local EDITION="${1:-}"
|
||||
local HASH=""
|
||||
local ISO=""
|
||||
local URL=""
|
||||
local EDITION="${1:-}"
|
||||
local HASH=""
|
||||
local ISO=""
|
||||
local URL="https://mirrors.fossho.st/garuda/iso/latest/garuda/"
|
||||
|
||||
case ${EDITION} in
|
||||
cinnamon|mate) URL="http://mirrors.fossho.st/garuda/iso/community/${EDITION}/${RELEASE}";;
|
||||
*) URL="http://mirrors.fossho.st/garuda/iso/garuda/${EDITION}/${RELEASE}";;
|
||||
esac
|
||||
case ${EDITION} in
|
||||
xfce|kde-barebones) ISO="garuda-${EDITION}-linux-lts-${RELEASE}.iso";;
|
||||
*) ISO="garuda-${EDITION}-linux-zen-${RELEASE}.iso";;
|
||||
esac
|
||||
ISO=${EDITION}/latest.iso
|
||||
|
||||
HASH="$(wget -q -O- "${URL}/${ISO}.sha256" | cut -d' ' -f1)"
|
||||
echo "${URL}/${ISO} ${HASH}"
|
||||
HASH="$(wget -q -O- "${URL}/${ISO}.sha256" | cut -d' ' -f1)"
|
||||
echo "${URL}/${ISO} ${HASH}"
|
||||
}
|
||||
|
||||
function get_gentoo() {
|
||||
@ -972,8 +1081,10 @@ function get_ghostbsd() {
|
||||
function get_haiku() {
|
||||
local EDITION="${1:-}"
|
||||
local ISO="haiku-${RELEASE}-${EDITION}-anyboot.iso"
|
||||
local URL="https://cdn.haiku-os.org/haiku-release/${RELEASE}"
|
||||
local HASH=""
|
||||
# local URL="https://cdn.haiku-os.org/haiku-release/${RELEASE}" # domain gone
|
||||
local URL="http://mirror.rit.edu/haiku/${RELEASE}" # NY, USA
|
||||
# local URL="https://mirrors.tnonline.net/haiku/haiku-release/${RELEASE}" # Sweden
|
||||
# local URL="https://mirror.aarnet.edu.au/pub/haiku/${RELEASE}" # Aus
|
||||
|
||||
HASH=$(wget -q -O- "${URL}/${ISO}.sha256" | grep "${ISO}" | cut -d' ' -f4)
|
||||
echo "${URL}/${ISO} ${HASH}"
|
||||
@ -1016,6 +1127,16 @@ function get_linuxmint() {
|
||||
echo "${URL}/${ISO} ${HASH}"
|
||||
}
|
||||
|
||||
function get_lmde() {
|
||||
local EDITION="${1:-}"
|
||||
local HASH=""
|
||||
local ISO="lmde-${RELEASE}-${EDITION}-64bit.iso"
|
||||
local URL="https://mirror.bytemark.co.uk/linuxmint/debian"
|
||||
|
||||
HASH=$(wget -q -O- "${URL}/sha256sum.txt" | grep "${ISO}" | cut -d' ' -f1)
|
||||
echo "${URL}/${ISO} ${HASH}"
|
||||
}
|
||||
|
||||
function get_macos() {
|
||||
local BOARD_ID=""
|
||||
local CWD=""
|
||||
@ -1193,8 +1314,8 @@ function get_oraclelinux() {
|
||||
local URL="https://yum.oracle.com/ISOS/OracleLinux/OL${VER_MAJ}/u${VER_MIN}/x86_64/"
|
||||
|
||||
case ${VER_MAJ} in
|
||||
8) ISO="OracleLinux-R${VER_MAJ}-U${VER_MIN}-x86_64-dvd.iso";;
|
||||
*) ISO="OracleLinux-R${VER_MAJ}-U${VER_MIN}-Server-x86_64-dvd.iso";;
|
||||
7) ISO="OracleLinux-R${VER_MAJ}-U${VER_MIN}-Server-x86_64-dvd.iso";;
|
||||
*) ISO="OracleLinux-R${VER_MAJ}-U${VER_MIN}-x86_64-dvd.iso";;
|
||||
esac
|
||||
HASH=$(wget -q -O- "https://linux.oracle.com/security/gpg/checksum/OracleLinux-R${VER_MAJ}-U${VER_MIN}-Server-x86_64.checksum" | grep "${ISO}" | cut -d' ' -f1)
|
||||
echo "${URL}/${ISO} ${HASH}"
|
||||
@ -1231,7 +1352,7 @@ function get_rockylinux() {
|
||||
local URL=""
|
||||
|
||||
case ${RELEASE} in
|
||||
8.5) URL="https://download.rockylinux.org/pub/rocky/${RELEASE}/isos/x86_64";;
|
||||
9.0) URL="https://download.rockylinux.org/pub/rocky/${RELEASE}/isos/x86_64";;
|
||||
*) URL="http://dl.rockylinux.org/vault/rocky/${RELEASE}/isos/x86_64/";;
|
||||
esac
|
||||
HASH=$(wget -q -O- "${URL}/CHECKSUM" | grep "SHA256" | grep "${ISO})" | cut -d' ' -f4)
|
||||
@ -1293,11 +1414,11 @@ function get_ubuntu() {
|
||||
fi
|
||||
|
||||
if wget -q --spider "${URL}/SHA256SUMS"; then
|
||||
ISO=$(wget -q -O- "${URL}/SHA256SUMS" | grep 'desktop\|dvd\|install' | grep amd64 | cut -d'*' -f2)
|
||||
HASH=$(wget -q -O- "${URL}/SHA256SUMS" | grep 'desktop\|dvd\|install' | grep amd64 | cut -d' ' -f1)
|
||||
ISO=$(wget -q -O- "${URL}/SHA256SUMS" | grep 'desktop\|dvd\|install' | grep amd64 | grep iso | cut -d'*' -f2)
|
||||
HASH=$(wget -q -O- "${URL}/SHA256SUMS" | grep 'desktop\|dvd\|install' | grep amd64 | grep iso |cut -d' ' -f1)
|
||||
else
|
||||
ISO=$(wget -q -O- "${URL}/MD5SUMS" | grep 'desktop\|dvd\|install' | grep amd64 | cut -d' ' -f3)
|
||||
HASH=$(wget -q -O- "${URL}/MD5SUMS" | grep 'desktop\|dvd\|install' | grep amd64 | cut -d' ' -f1)
|
||||
ISO=$(wget -q -O- "${URL}/MD5SUMS" | grep 'desktop\|dvd\|install' | grep amd64 | grep iso | cut -d' ' -f3)
|
||||
HASH=$(wget -q -O- "${URL}/MD5SUMS" | grep 'desktop\|dvd\|install' | grep amd64 | grep iso | cut -d' ' -f1)
|
||||
fi
|
||||
#echo "${URL}/${ISO} ${HASH}"
|
||||
|
||||
@ -1351,44 +1472,28 @@ function unattended_windows() {
|
||||
https://docs.microsoft.com/en-us/windows-hardware/customize/desktop/unattend/
|
||||
-->
|
||||
<settings pass="offlineServicing">
|
||||
<component name="Microsoft-Windows-Shell-Setup"
|
||||
processorArchitecture="amd64"
|
||||
publicKeyToken="31bf3856ad364e35"
|
||||
language="neutral"
|
||||
versionScope="nonSxS"
|
||||
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<EnableLUA>false</EnableLUA>
|
||||
</component>
|
||||
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<ComputerName>*</ComputerName>
|
||||
</component>
|
||||
</settings>
|
||||
|
||||
<settings pass="generalize">
|
||||
<component name="Microsoft-Windows-PnPSysprep"
|
||||
processorArchitecture="amd64"
|
||||
publicKeyToken="31bf3856ad364e35"
|
||||
language="neutral"
|
||||
versionScope="nonSxS">
|
||||
<component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
|
||||
<PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
|
||||
</component>
|
||||
<component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<SkipRearm>1</SkipRearm>
|
||||
</component>
|
||||
</settings>
|
||||
|
||||
<settings pass="specialize">
|
||||
<component name="Microsoft-Windows-Security-SPP-UX"
|
||||
processorArchitecture="amd64"
|
||||
publicKeyToken="31bf3856ad364e35"
|
||||
language="neutral"
|
||||
versionScope="nonSxS"
|
||||
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<SkipAutoActivation>true</SkipAutoActivation>
|
||||
</component>
|
||||
<component name="Microsoft-Windows-Shell-Setup"
|
||||
processorArchitecture="amd64"
|
||||
publicKeyToken="31bf3856ad364e35"
|
||||
language="neutral"
|
||||
versionScope="nonSxS"
|
||||
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<ComputerName>*</ComputerName>
|
||||
<OEMInformation>
|
||||
<Manufacturer>Quickemu Project</Manufacturer>
|
||||
@ -1399,26 +1504,15 @@ function unattended_windows() {
|
||||
<SupportURL>https://github.com/quickemu-project/quickemu/issues</SupportURL>
|
||||
</OEMInformation>
|
||||
<OEMName>Quickemu Project</OEMName>
|
||||
<ProductKey>W269N-WFGWX-YVC9B-4J6C9-T83GX</ProductKey>
|
||||
</component>
|
||||
<component name="Microsoft-Windows-SQMApi"
|
||||
processorArchitecture="amd64"
|
||||
publicKeyToken="31bf3856ad364e35"
|
||||
language="neutral"
|
||||
versionScope="nonSxS"
|
||||
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<CEIPEnabled>0</CEIPEnabled>
|
||||
</component>
|
||||
</settings>
|
||||
|
||||
<settings pass="windowsPE">
|
||||
<component name="Microsoft-Windows-Setup"
|
||||
processorArchitecture="amd64"
|
||||
publicKeyToken="31bf3856ad364e35"
|
||||
language="neutral"
|
||||
versionScope="nonSxS"
|
||||
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<Diagnostics>
|
||||
<OptIn>false</OptIn>
|
||||
</Diagnostics>
|
||||
@ -1521,18 +1615,17 @@ function unattended_windows() {
|
||||
</UpgradeData>
|
||||
<UserData>
|
||||
<AcceptEula>true</AcceptEula>
|
||||
<FullName>Quickemu</FullName>
|
||||
<Organization>Quickemu Project</Organization>
|
||||
<!-- https://docs.microsoft.com/en-us/windows-server/get-started/kms-client-activation-keys -->
|
||||
<ProductKey>
|
||||
<Key>VK7JG-NPHTM-C97JM-9MPGT-3V66T</Key>
|
||||
<Key>W269N-WFGWX-YVC9B-4J6C9-T83GX</Key>
|
||||
<WillShowUI>Never</WillShowUI>
|
||||
</ProductKey>
|
||||
</UserData>
|
||||
</component>
|
||||
|
||||
<component name="Microsoft-Windows-PnpCustomizationsWinPE"
|
||||
publicKeyToken="31bf3856ad364e35"
|
||||
language="neutral"
|
||||
versionScope="nonSxS"
|
||||
processorArchitecture="amd64">
|
||||
<component name="Microsoft-Windows-PnpCustomizationsWinPE" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" processorArchitecture="amd64" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<!--
|
||||
This makes the VirtIO drivers available to Windows, assuming that
|
||||
the VirtIO driver disk is available as drive E:
|
||||
@ -1580,26 +1673,46 @@ function unattended_windows() {
|
||||
</settings>
|
||||
|
||||
<settings pass="oobeSystem">
|
||||
<component name="Microsoft-Windows-Shell-Setup"
|
||||
processorArchitecture="amd64"
|
||||
publicKeyToken="31bf3856ad364e35"
|
||||
language="neutral"
|
||||
versionScope="nonSxS"
|
||||
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<AutoLogon>
|
||||
<Password>
|
||||
<Value>quickemu</Value>
|
||||
<PlainText>true</PlainText>
|
||||
</Password>
|
||||
<Enabled>true</Enabled>
|
||||
<Username>Quickemu</Username>
|
||||
</AutoLogon>
|
||||
<DisableAutoDaylightTimeSet>false</DisableAutoDaylightTimeSet>
|
||||
<OOBE>
|
||||
<HideEULAPage>true</HideEULAPage>
|
||||
<HideLocalAccountScreen>false</HideLocalAccountScreen>
|
||||
<HideLocalAccountScreen>true</HideLocalAccountScreen>
|
||||
<HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
|
||||
<HideOnlineAccountScreens>false</HideOnlineAccountScreens>
|
||||
<HideOnlineAccountScreens>true</HideOnlineAccountScreens>
|
||||
<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
|
||||
<NetworkLocation>Home</NetworkLocation>
|
||||
<ProtectYourPC>3</ProtectYourPC>
|
||||
<SkipUserOOBE>false</SkipUserOOBE>
|
||||
<SkipMachineOOBE>false</SkipMachineOOBE>
|
||||
<SkipUserOOBE>true</SkipUserOOBE>
|
||||
<SkipMachineOOBE>true</SkipMachineOOBE>
|
||||
<VMModeOptimizations>
|
||||
<SkipWinREInitialization>true</SkipWinREInitialization>
|
||||
</VMModeOptimizations>
|
||||
</OOBE>
|
||||
<UserAccounts>
|
||||
<LocalAccounts>
|
||||
<LocalAccount wcm:action="add">
|
||||
<Password>
|
||||
<Value>quickemu</Value>
|
||||
<PlainText>true</PlainText>
|
||||
</Password>
|
||||
<Description>Quickemu</Description>
|
||||
<DisplayName>Quickemu</DisplayName>
|
||||
<Group>Administrators</Group>
|
||||
<Name>Quickemu</Name>
|
||||
</LocalAccount>
|
||||
</LocalAccounts>
|
||||
</UserAccounts>
|
||||
<RegisteredOrganization>Quickemu Project</RegisteredOrganization>
|
||||
<RegisteredOwner>Quickemu</RegisteredOwner>
|
||||
<FirstLogonCommands>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<CommandLine>msiexec /i E:\guest-agent\qemu-ga-x86_64.msi /quiet /passive /qn</CommandLine>
|
||||
@ -1693,9 +1806,17 @@ function get_windows() {
|
||||
dbg_windows "${DOWNLOAD_SHA1}"
|
||||
DOWNLOAD_ID=$(echo "${DOWNLOAD_INFO}" | grep -oP '(?<=https:\/\/tb\.rg-adguard\.net/dl\.php\?go=)[0-9a-z]+')
|
||||
dbg_windows "${DOWNLOAD_ID}"
|
||||
DOWNLOAD_URL="https://tb.rg-adguard.net/dl.php?go=${DOWNLOAD_ID}"
|
||||
REDIRECT_URL="https://tb.rg-adguard.net/dl.php?go=${DOWNLOAD_ID}"
|
||||
dbg_windows "${REDIRECT_URL}"
|
||||
DOWNLOAD_URL=$(curl --head --silent --write-out "%{redirect_url}\n" --output /dev/null "${REDIRECT_URL}")
|
||||
dbg_windows "${DOWNLOAD_URL}"
|
||||
|
||||
MS_BASE_URL="https://software.download.prss.microsoft.com/"
|
||||
if [[ ! ${DOWNLOAD_URL} =~ ^${MS_BASE_URL} ]]; then
|
||||
echo "Download URL not leading to Microsoft CDN"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Downloading ${WINDOWS_NAME}..."
|
||||
web_get "${DOWNLOAD_URL}" "${VM_PATH}" "${FILE_NAME}"
|
||||
|
||||
@ -1741,6 +1862,10 @@ create_vm() {
|
||||
unzip ${VM_PATH}/${ISO} -d ${VM_PATH}
|
||||
ISO=$(ls ${VM_PATH} | grep -i '.iso')
|
||||
fi
|
||||
if [[ ${OS} == "batocera" ]] && [[ ${ISO} =~ ".gz" ]]; then
|
||||
gzip -d "${VM_PATH}/${ISO}"
|
||||
ISO="${ISO/.gz/}"
|
||||
fi
|
||||
|
||||
make_vm_config "${ISO}"
|
||||
}
|
||||
@ -1810,6 +1935,14 @@ if [ -n "${2}" ]; then
|
||||
echo " - Setting edition to: ${EDITION}"
|
||||
fi
|
||||
fi
|
||||
# Handle odd missing fedora cominations
|
||||
if [[ $OS == fedora ]] ; then
|
||||
if [[ ${RELEASE} = "33" && ${EDITION} = "i3" ]] || [[ ${RELEASE} = "34" && ${EDITION} = "Cinnamon" ]] ; then
|
||||
echo "ERROR! Unsupported combination"
|
||||
echo " Fedora 33 i3 and Fedora 34 Cinnamon are not available, please choose another Release or Edition"
|
||||
exit 1;
|
||||
fi
|
||||
fi
|
||||
|
||||
VM_PATH="${OS}-${RELEASE}-${EDITION}"
|
||||
validate_release "releases_${OS}"
|
||||
@ -1822,6 +1955,10 @@ if [ -n "${2}" ]; then
|
||||
# Ubuntu doesn't use create_vm()
|
||||
validate_release releases_ubuntu
|
||||
get_ubuntu
|
||||
elif [[ "${OS}" == *"deepin"* ]]; then
|
||||
# deepin doesn't use create_vm()
|
||||
validate_release releases_deepin
|
||||
get_deepin
|
||||
elif [ "${OS}" == "windows" ]; then
|
||||
LANG="English International"
|
||||
if [ -n "${3}" ]; then
|
||||
|
Loading…
Reference in New Issue
Block a user