- Scope pgrep fallback to the VM socket path to avoid matching unrelated virtiofsd instances
- Replace /proc/<pid>/comm checks with portable `ps -p ... -o comm=` in both start and stop
- Fix QEMU virtiofs capability check: use `-device help` and match quoted device name to avoid false-positives on error output
- README: clarify virtiofs requires a public directory to be configured
- stop_virtiofsd: guard against PID reuse by verifying /proc/<pid>/comm
before signalling
- start_virtiofsd: replace fixed sleep with poll loop for socket
readiness; use fuser (or comm-verified pgrep fallback) for safe PID
resolution
- vm_boot: check QEMU supports vhost-user-fs-pci before committing to
virtiofs; stop virtiofsd and fall back to 9p if unsupported
virtiofsd forks after startup; check socket existence rather than parent
PID to detect success, and use pgrep to track the daemon child for cleanup.
Move start_virtiofsd() call to after configure_storage() so $iso is
correctly cleared before the installer check runs.
Clear VIRTIOFSD on early return so configure_file_sharing() falls back
to 9p instructions when virtiofsd is not started.
Write virtiofsd PID to a file alongside other VM runtime files. Add
stop_virtiofsd() which sends SIGTERM and waits up to 1s for a clean
exit before falling back to SIGKILL. Call it from kill_vm() and on
QEMU startup failure.
Drop the fallback to the QEMU-bundled C virtiofsd (/usr/lib/qemu/virtiofsd)
as it uses incompatible CLI syntax and requires root privileges. Only the
standalone Rust virtiofsd in PATH is supported.
Capture virtiofsd stderr to a temp file rather than the shared VM log to
avoid false-positive permission-error matches from stale log entries.
Move start_virtiofsd() call inside vm_boot() so the Quickemu banner is
printed before any virtiofsd warnings.
Automatically use virtiofsd (vhost-user-fs-pci) instead of 9p when
virtiofsd is present on the host and the guest OS is Linux. Falls back
silently to 9p when virtiofsd is unavailable. Updates README to document
the new capability.
Maybe it was accurate in this past but the current Quickget release
suggest that only Fedora Server has arm64 support. That's not the case.
In fact checking the `releases.json` file that `quickget` already uses
shows us that every edition other than Onyx supports arm64.
This PR makes that change.
The command ran to check this info was:
```bash
curl -sL https://getfedora.org/releases.json | jq -r
'group_by(.variant)[] | "\(.[0].variant): \(map(.arch) | unique |
join(", "))"'
COSMIC-Atomic: aarch64, x86_64
Cloud: aarch64, ppc64le, s390x, x86_64
Container: aarch64, ppc64le, s390x, x86_64
Everything: aarch64, ppc64le, s390x, x86_64
IoT: aarch64, ppc64le, s390x, x86_64
KDE: aarch64, ppc64le, x86_64
Kinoite: aarch64, ppc64le, x86_64
Labs: aarch64, x86_64
Onyx: x86_64
Sericea: aarch64, x86_64
Server: aarch64, ppc64le, s390x, x86_64
Silverblue: aarch64, ppc64le, x86_64
Spins: aarch64, x86_64
Workstation: aarch64, ppc64le, x86_64
chore: align doc submodule commit
docs(quickget): adapt whitespace in help_message()
needed in manual page regeneration to retain filtering of needed lines
currently omits the new flag for --disable-unattended
Signed-off-by: Phil Clifford <philip.clifford@gmail.com>
- Set default --display to 'gtk' instead of 'sdl'
- Add runtime check to fall back to 'sdl' when QEMU lacks GTK support
and print a note to the user
- Update usage text to show 'gtk' as the default display option
Signed-off-by: Martin Wimpress <martin@wimpress.org>
- Remove noisy "Serial: (off)" echo and add explanatory comment
- Stop forcing serial="${serial:-socket}" early; leave unset and set
per-guest after config
- Set serial="none" for macOS and Windows guests, otherwise default to
"socket"
- Reduce terminal clutter for guests that do not emit useful serial
output
- Document how to override: use --serial or set serial=socket in the VM
.conf
Signed-off-by: Martin Wimpress <martin@wimpress.org>
- Replace previous VGA default with vmware-svga to align with macOS
native VMware display driver and OSX-KVM expectations
- Improve resolution handling and mouse integration for macOS VMs
Signed-off-by: Martin Wimpress <martin@wimpress.org>
- Pin OSX-KVM URLs to commit da4b23b5e92c5b939568700034367e8b7649fe90
- Use pinned URLs for OpenCore.qcow2, OVMF_CODE.fd and
OVMF_VARS-1920x1080.fd
- Prevent breakage after upstream removed OVMF_CODE.fd from master (26
Jan 2026)
Signed-off-by: Martin Wimpress <martin@wimpress.org>
- Use Unix sockets for local --display spice to allow GL/VirGL
acceleration
- Use egl-headless backend to provide GL context for virtio-gpu-gl; do
not
enable SPICE gl=on (avoids blocking QEMU main loop)
- Add -vga none for SPICE modes to prevent duplicate scanouts
- Update start_viewer() to support spice+unix:// and
spice://localhost:port
connection modes for spicy and remote-viewer clients
- Clean up Unix socket (.sock) files alongside existing .spice file
cleanup
Provides local GL-accelerated guest 3D via VirGL while keeping remote
access
over TCP unchanged.
Signed-off-by: Martin Wimpress <martin@wimpress.org>
- Reorder and refine Windows mapping: map none|spice -> qxl-vga;
cocoa|gtk|sdl|spice-app -> virtio-vga
- Remove the VGA variable and the forced '-vga none' from VIDEO
composition
- Remove unused VGA initialization in vm_boot
Signed-off-by: Martin Wimpress <martin@wimpress.org>
- Change HOST_CPU_VENDOR lookup to use '^Vendor ID' when parsing
/proc/cpuinfo
- Ensures correct CPU vendor detection on systems that label the field
as 'Vendor ID' instead of 'Vendor'
Fixes#1845
Signed-off-by: Martin Wimpress <martin@wimpress.org>
- Remove integrated OpenCore creation/extraction code from quickget:
require_mtools/sgdisk helpers, create_macos_disk_with_opencore,
download_opencore and related logic
- Simplify quickemu macOS boot flow to expect a separate OpenCore.qcow2
or ESP.qcow2; streamline device/drive argument construction
- Remove mtools and gptfdisk from devshell.nix and package.nix
- Always download OpenCore.qcow2 via legacy method and update status
messages
Signed-off-by: Martin Wimpress <martin@wimpress.org>
- Display supported architectures when running ./quickget <os> (shows
"Archs: amd64 arm64")
- Add get_supported_archs() helper to enumerate available architectures
- Add arch_suffix() helper and append architecture suffix to VM
dir/config names
for foreign architectures (e.g., alpine-v3.23-arm64/)
- Add NORMALISED_HOST_ARCH variable to detect foreign vs native
architecture
- Include arch="x86_64" or arch="aarch64" in config files for foreign
downloads
- Replace process checks (pidof pipewire / pidof pulseaudio) with socket
existence checks to determine functional audio services.
- PipeWire detection checks $PIPEWIRE_REMOTE or
$XDG_RUNTIME_DIR/pipewire-0.
- PulseAudio detection checks $PULSE_SERVER or
$XDG_RUNTIME_DIR/pulse/native.
- Change default audio driver from pa to alsa as a safer fallback on
headless hosts.
- Set detection priority: PipeWire (if QEMU >= 8.1) → PulseAudio → ALSA.
- Reason: a listening socket indicates a working service; pidof can be
misleading on headless servers and caused QEMU "Failed to initialize
PW context" errors.
Fixes#1838
Signed-off-by: Martin Wimpress <martin@wimpress.org>
- add cache=writeback and aio=threads to DRIVE_OPTIMISATIONS
- retain existing optimisations: discard=unmap,detect-zeroes=unmap
- improve write performance (host writeback caching) and async I/O
parallelism via thread-based AIO
- follows Proxmox/libvirt QEMU disk best practices; researched for macOS
but applies to all guests
Signed-off-by: Martin Wimpress <martin@wimpress.org>
- Add os_info() case entry with a description for Azure Linux
- Add Azure Linux to os_support() list
- Implement releases_azurelinux() returning "3.0"
- Implement arch_azurelinux() returning "amd64 arm64"
- Implement get_azurelinux() using stable aka.ms download URLs:
- https://aka.ms/azurelinux-3.0-x86_64.iso
- https://aka.ms/azurelinux-3.0-aarch64.isoFixes#1459
Signed-off-by: Martin Wimpress <martin@wimpress.org>
- Replace builtins.match with builtins.split for version extraction
- Previous regex with .* patterns caused catastrophic backtracking on large files (~2800 lines)
- builtins.split avoids full-string regex matching and is more efficient
Fixes: Nix build CI failure
- Replace flake.nix nixpkgs URL with github:nixos/nixpkgs/nixos-unstable
- Update flake.lock to new locked rev, narHash and github type
No functional changes to scripts; resolves dependency refresh for Nix flakes.,
Add exit 1 after curl failure handling in web_get
- Exit immediately when a download via curl fails
- Prevent continuing to build invalid VM configs after failed download
Fixes#1625
- Set usb_controller="xhci" in display_param_check() when BRAILLE is enabled.
- Braille devices are USB 1.1 (full-speed); EHCI only handles USB 2.0/3.0,
which causes speed mismatch warnings and prevents braille devices from working.
Fixes#730
- Raise global minimum QEMU version from 6.0.0 to 6.1.0.
- The option -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off used for macOS guests
is only available in QEMU 6.1.0 and later; prefer raising the global requirement rather
than adding per-flag conditionals.
- Update version check and error message in quickemu.
BREAKING CHANGE: Require QEMU 6.1.0; older QEMU will fail the version check.