mirror of
				https://github.com/oSoWoSo/DistroHopper.git
				synced 2024-08-14 22:46:53 +00:00 
			
		
		
		
	
							parent
							
								
									29e4922e6e
								
							
						
					
					
						commit
						bf69f54d74
					
				
					 2 changed files with 109 additions and 7 deletions
				
			
		
							
								
								
									
										68
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										68
									
								
								README.md
									
										
									
									
									
								
							|  | @ -37,7 +37,7 @@ Essential requirements: | ||||||
| Optional requirements: | Optional requirements: | ||||||
| 
 | 
 | ||||||
|   * `rot13` to *"decrypt"* the macOS OSK key; found in the `bsdgames` package in Debian/Ubuntu |   * `rot13` to *"decrypt"* the macOS OSK key; found in the `bsdgames` package in Debian/Ubuntu | ||||||
|   * `smbd` to export user home directory from the host to the guest VM; found in the `samba` package in Debian/Ubuntu |   * `spicy` to connect to VMs via the SPICE protocol; found in the `spice-client-gtk` package in Debian/Ubuntu | ||||||
| 
 | 
 | ||||||
| ## Install Quickemu | ## Install Quickemu | ||||||
| 
 | 
 | ||||||
|  | @ -104,6 +104,11 @@ Starting /media/martin/Quickemu/ubuntu-focal-desktop.conf | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
|   * Complete the installation as normal. |   * Complete the installation as normal. | ||||||
|  |   * Post-install: | ||||||
|  |     * Install the SPICE agent (`spice-vdagent`) to enable copy/paste and USB redirection | ||||||
|  |       * Debian/Ubuntu `sudo apt install spice-vdagent` | ||||||
|  |     * Install the SPICE WebDAV agent (`spice-webdavd`) to enable file sharing. | ||||||
|  |       * Debian/Ubuntu `sudo apt install spice-webdavd` | ||||||
| 
 | 
 | ||||||
|   * A Desktop shortcut can be created (in ~/.local/share/applications): |   * A Desktop shortcut can be created (in ~/.local/share/applications): | ||||||
| ``` | ``` | ||||||
|  | @ -116,6 +121,10 @@ You can use `quickemu` to run a Windows 10 virtual machine. | ||||||
| 
 | 
 | ||||||
|   * [Download Windows 10](https://www.microsoft.com/en-gb/software-download/windows10ISO) |   * [Download Windows 10](https://www.microsoft.com/en-gb/software-download/windows10ISO) | ||||||
|   * [Download VirtIO drivers for Windows](https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/index.html#virtio-win-direct-downloads) |   * [Download VirtIO drivers for Windows](https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/index.html#virtio-win-direct-downloads) | ||||||
|  |   * [Download `spice-webdavd` for Windows](https://www.spice-space.org/download/windows/spice-webdavd/) | ||||||
|  |     * Enables the Windows guest access to shared files on the host. | ||||||
|  |   * [Download UsbDk for Windows](https://www.spice-space.org/download/windows/usbdk/) | ||||||
|  |     * Enables the Windows guest access to redirected USB devices from the host. | ||||||
|   * Create a VM configuration file; for example `windows10.conf` |   * Create a VM configuration file; for example `windows10.conf` | ||||||
|     * The `boot` option enables Legacy BIOS (`legacy`) or EFI (`efi`) booting. `legacy` is the default. |     * The `boot` option enables Legacy BIOS (`legacy`) or EFI (`efi`) booting. `legacy` is the default. | ||||||
|     * The `guest_os="windows"` line instructs `quickemu` to use optimise for Windows. |     * The `guest_os="windows"` line instructs `quickemu` to use optimise for Windows. | ||||||
|  | @ -171,7 +180,10 @@ Starting /media/martin/Quickemu/windows10.conf | ||||||
|     * Select `VirtIO SCSI controller (E:\amd64\w10\viostor.inf)` from the list and click **Next**. |     * Select `VirtIO SCSI controller (E:\amd64\w10\viostor.inf)` from the list and click **Next**. | ||||||
|     * The disk will now be available for partitioning and formatting. |     * The disk will now be available for partitioning and formatting. | ||||||
|   * Complete the installation as you normally would. |   * Complete the installation as you normally would. | ||||||
|   * Post-install you should run the VirtIO installer from the CD-ROM: drive. |   * Post-install: | ||||||
|  |     * Run the VirtIO installer from the CD-ROM: drive. | ||||||
|  |     * Install [spice-webdavd](https://www.spice-space.org/download/windows/spice-webdavd/) | ||||||
|  |     * Install [UsbDk](https://www.spice-space.org/download/windows/usbdk/) | ||||||
| 
 | 
 | ||||||
| ### macOS | ### macOS | ||||||
| 
 | 
 | ||||||
|  | @ -186,6 +198,8 @@ There are some considerations when running macOS via Quickemu. | ||||||
|     *   This is a very old architecture, [so to unlock higher CPU performance; AVX, AES-NI, SSE et al are enabled](https://www.nicksherlock.com/2017/10/passthrough-of-advanced-cpu-features-for-macos-high-sierra-guests/). |     *   This is a very old architecture, [so to unlock higher CPU performance; AVX, AES-NI, SSE et al are enabled](https://www.nicksherlock.com/2017/10/passthrough-of-advanced-cpu-features-for-macos-high-sierra-guests/). | ||||||
|   * UHCI USB (USB 2.0) is the fastest supported. |   * UHCI USB (USB 2.0) is the fastest supported. | ||||||
|     * USB pass-through has not been tested. |     * USB pass-through has not been tested. | ||||||
|  |   * Copy/paste between the guest and host is not supported in macOS. | ||||||
|  |   * File sharing is not supported on macOS. | ||||||
| 
 | 
 | ||||||
| You can use `quickemu` to run a macOS virtual machine. | You can use `quickemu` to run a macOS virtual machine. | ||||||
| 
 | 
 | ||||||
|  | @ -251,9 +265,53 @@ Starting macos.conf | ||||||
|     * Click **Reinstall macOS** and **Continue** |     * Click **Reinstall macOS** and **Continue** | ||||||
|   * Complete the installation as you normally would. |   * Complete the installation as you normally would. | ||||||
| 
 | 
 | ||||||
| ### All the options | ## SPICE | ||||||
| 
 | 
 | ||||||
| Here are the full usage instructions: | The following features are only available while using the SPICE protocol: | ||||||
|  | 
 | ||||||
|  |   * Copy/paste between the guest and host *(not available for macOS guests)* | ||||||
|  |   * Host file sharing to the guest *(not available for macOS guests)* | ||||||
|  |   * USB device redirection *(untested on macOS)* | ||||||
|  | 
 | ||||||
|  | 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-focal-desktop.conf --display spice | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ## USB redirection | ||||||
|  | 
 | ||||||
|  | Quickemu support USB redirection via host passthrough and SPICE passthrough. | ||||||
|  | 
 | ||||||
|  | ### SPICE redirection | ||||||
|  | 
 | ||||||
|  | Using SPICE for USB passthrough 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 chose which device(s) you want | ||||||
|  | to attach to the VM. | ||||||
|  | 
 | ||||||
|  | ### Host redirection | ||||||
|  | 
 | ||||||
|  | **USB host redirection is not recommended**, it is provided purely for backwards | ||||||
|  | compatibility to older versions of Quickemu. Using SPICE is preferred, see above. | ||||||
|  | 
 | ||||||
|  | Add an additional line to your virtual machine configuration. For example: | ||||||
|  | 
 | ||||||
|  |   * `usb_devices=("046d:082d" "046d:085e")` | ||||||
|  | 
 | ||||||
|  | In the example above: | ||||||
|  | 
 | ||||||
|  |   * The USB device with vendor_id 046d and product_id 082d will be exposed to the guest. | ||||||
|  |   * The USB device with vendor_id 046d and product_id 085e will be exposed to the guest. | ||||||
|  | 
 | ||||||
|  | If the USB devices are not writable, `quickemu` will display the appropriate | ||||||
|  | commands to modify the USB device(s) access permissions. | ||||||
|  | 
 | ||||||
|  | ## All the options | ||||||
|  | 
 | ||||||
|  | Here are the usage instructions: | ||||||
| 
 | 
 | ||||||
| ``` | ``` | ||||||
| Usage | Usage | ||||||
|  | @ -261,6 +319,7 @@ Usage | ||||||
| 
 | 
 | ||||||
| You can also pass optional parameters | You can also pass optional parameters | ||||||
|   --delete                : Delete the disk image. |   --delete                : Delete the disk image. | ||||||
|  |   --display               : Select display backend. 'sdl' (default), 'gtk' or 'spice' | ||||||
|   --shortcut              : Create a desktop shortcut |   --shortcut              : Create a desktop shortcut | ||||||
|   --snapshot apply <tag>  : Apply/restore a snapshot. |   --snapshot apply <tag>  : Apply/restore a snapshot. | ||||||
|   --snapshot create <tag> : Create a snapshot. |   --snapshot create <tag> : Create a snapshot. | ||||||
|  | @ -300,6 +359,5 @@ will use my big screen to compute the size of the window, and make it 2048x1152. | ||||||
| 
 | 
 | ||||||
| ## TODO | ## TODO | ||||||
| 
 | 
 | ||||||
|   - [ ] SPICE support |  | ||||||
|   - [ ] Improve disk management |   - [ ] Improve disk management | ||||||
|   - [ ] [Add Faux OEM](https://code.launchpad.net/~ubuntu-installer/ubiquity/+git/ubiquity/+merge/379899) |   - [ ] [Add Faux OEM](https://code.launchpad.net/~ubuntu-installer/ubiquity/+git/ubiquity/+merge/379899) | ||||||
|  |  | ||||||
							
								
								
									
										48
									
								
								quickemu
									
										
									
									
									
								
							
							
						
						
									
										48
									
								
								quickemu
									
										
									
									
									
								
							|  | @ -355,6 +355,13 @@ function vm_boot() { | ||||||
|     DISPLAY_DEVICE="qxl-vga" |     DISPLAY_DEVICE="qxl-vga" | ||||||
|   fi |   fi | ||||||
| 
 | 
 | ||||||
|  |   if [ "${OUTPUT}" == "spice" ]; then | ||||||
|  |     if [ "${guest_os}" != "macos" ]; then | ||||||
|  |       DISPLAY_DEVICE="qxl-vga" | ||||||
|  |     fi | ||||||
|  |     OUTPUT="none" | ||||||
|  |   fi | ||||||
|  | 
 | ||||||
|   echo " - Video:    ${DISPLAY_DEVICE}" |   echo " - Video:    ${DISPLAY_DEVICE}" | ||||||
| 
 | 
 | ||||||
|   # Allocate VRAM to VGA devices |   # Allocate VRAM to VGA devices | ||||||
|  | @ -409,10 +416,27 @@ function vm_boot() { | ||||||
|   fi |   fi | ||||||
| 
 | 
 | ||||||
|   # Find a free port for spice |   # Find a free port for spice | ||||||
|  |   local SPICE="disable-ticketing=on" | ||||||
|   local SPICE_PORT="" |   local SPICE_PORT="" | ||||||
|   SPICE_PORT=$(get_port 5930 9) |   SPICE_PORT=$(get_port 5930 9) | ||||||
|   if [ -z "${SPICE_PORT}" ]; then |   if [ -z "${SPICE_PORT}" ]; then | ||||||
|     echo " - spice:      All spice ports have been exhausted." |     echo " - SPICE:    All spice ports have been exhausted." | ||||||
|  |     if [ "${OUTPUT}" == "none" ] || [ "${OUTPUT}" == "spice-app" ]; then | ||||||
|  |       echo "             ERROR! Requested SPICE display, but no SPICE ports are free." | ||||||
|  |       exit 1 | ||||||
|  |     fi | ||||||
|  |   else | ||||||
|  |     if [ "${OUTPUT}" == "spice-app" ]; then | ||||||
|  |       echo " - SPICE:    Enabled" | ||||||
|  |     else | ||||||
|  |       echo " - SPICE:    ${SPICE_PORT}/tcp is connected. Login via 'spicy --title \"${VMNAME}\" --port ${SPICE_PORT} --spice-shared-dir ${HOME}' ${FULLSPICY}" | ||||||
|  |       SPICE="${SPICE},port=${SPICE_PORT}" | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|  |     # Reference: https://gitlab.gnome.org/GNOME/phodav/-/issues/5 | ||||||
|  |     if [ "${guest_os}" != "macos" ]; then | ||||||
|  |       echo " - WebDAV:   ${HOME} will be exported to ${VMNAME} via dav://localhost:9843/" | ||||||
|  |     fi | ||||||
|   fi |   fi | ||||||
| 
 | 
 | ||||||
|   enable_usb_passthrough |   enable_usb_passthrough | ||||||
|  | @ -510,6 +534,11 @@ function vm_boot() { | ||||||
|       -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 \ |       -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 \ | ||||||
|       -chardev spicevmc,id=spicechannel0,name=vdagent \ |       -chardev spicevmc,id=spicechannel0,name=vdagent \ | ||||||
|       -serial mon:stdio |       -serial mon:stdio | ||||||
|  |   echo " - PID:      ${!}" | ||||||
|  | 
 | ||||||
|  |   # If output is 'none' then SPICE was requested. | ||||||
|  |   if [ ${OUTPUT} == "none" ]; then | ||||||
|  |     spicy --title "${VMNAME}" --port ${SPICE_PORT} ${FULLSPICY} --spice-shared-dir "${HOME}" >/dev/null 2>&1 | ||||||
|   fi |   fi | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -538,6 +567,7 @@ function usage() { | ||||||
|   echo |   echo | ||||||
|   echo "You can also pass optional parameters" |   echo "You can also pass optional parameters" | ||||||
|   echo "  --delete                : Delete the disk image." |   echo "  --delete                : Delete the disk image." | ||||||
|  |   echo "  --display               : Select display backend. 'sdl' (default), 'gtk' or 'spice'" | ||||||
|   echo "  --shortcut              : Create a desktop shortcut" |   echo "  --shortcut              : Create a desktop shortcut" | ||||||
|   echo "  --snapshot apply <tag>  : Apply/restore a snapshot." |   echo "  --snapshot apply <tag>  : Apply/restore a snapshot." | ||||||
|   echo "  --snapshot create <tag> : Create a snapshot." |   echo "  --snapshot create <tag> : Create a snapshot." | ||||||
|  | @ -562,7 +592,9 @@ ram="" | ||||||
| cpu_cores="" | cpu_cores="" | ||||||
| 
 | 
 | ||||||
| FULLSCREEN="" | FULLSCREEN="" | ||||||
|  | FULLSPICY="" | ||||||
| DELETE=0 | DELETE=0 | ||||||
|  | OUTPUT="sdl" | ||||||
| SNAPSHOT_ACTION="" | SNAPSHOT_ACTION="" | ||||||
| SNAPSHOT_TAG="" | SNAPSHOT_TAG="" | ||||||
| STATUS_QUO="" | STATUS_QUO="" | ||||||
|  | @ -598,6 +630,17 @@ else | ||||||
|           -delete|--delete) |           -delete|--delete) | ||||||
|             DELETE=1 |             DELETE=1 | ||||||
|             shift;; |             shift;; | ||||||
|  |           -display|--display) | ||||||
|  |             OUTPUT="${2}" | ||||||
|  |             if [ "${OUTPUT}" != "gtk" ] && [ "${OUTPUT}" != "sdl" ] && [ "${OUTPUT}" != "spice" ]; then | ||||||
|  |               echo "ERROR! Requested output '${OUTPUT}' is not recognised." | ||||||
|  |               exit 1 | ||||||
|  |             elif [ "${OUTPUT}" == "spice" ] && [ ! "$(which spicy)" ]; then | ||||||
|  |               echo "ERROR! Requested SPICE display, but 'spicy' is not installed." | ||||||
|  |               exit 1 | ||||||
|  |             fi | ||||||
|  |             shift | ||||||
|  |             shift;; | ||||||
|           -snapshot|--snapshot) |           -snapshot|--snapshot) | ||||||
|             SNAPSHOT_ACTION="${2}" |             SNAPSHOT_ACTION="${2}" | ||||||
|             if [ -z "${SNAPSHOT_ACTION}" ]; then |             if [ -z "${SNAPSHOT_ACTION}" ]; then | ||||||
|  | @ -615,8 +658,9 @@ else | ||||||
|           -status-quo|--status-quo) |           -status-quo|--status-quo) | ||||||
|             STATUS_QUO="-snapshot" |             STATUS_QUO="-snapshot" | ||||||
|             shift;; |             shift;; | ||||||
|           -fullscreen|--fullscreen) |           -fullscreen|--fullscreen|-full-screen|--full-screen) | ||||||
|             FULLSCREEN="-full-screen" |             FULLSCREEN="-full-screen" | ||||||
|  |             FULLSPICY="--full-screen" | ||||||
|             shift;; |             shift;; | ||||||
|           -vm|--vm) |           -vm|--vm) | ||||||
|             VM="${2}" |             VM="${2}" | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue