The display is -device vmware-svga (macOS’s only supported virtual adapter): a 2D software
framebuffer with no Metal / GPU / VideoToolbox / IOSurface. CPU-drawn content renders fine —
desktop, widgets, window chrome, and static images (e.g. a YouTube thumbnail) — but live video
playback uses a GPU-composited hardware overlay (AVPlayerLayer + IOSurface + VideoToolbox) with no
backing on a GPU-less VM, so the moving picture stays black even though audio plays and the scrubber
advances. Safari has no software-rendering fallback.
qxl / virtio-gpu / std have no macOS driver, so swapping -vga /
-device cannot add acceleration.-device vfio-pci) — see Roadmap.macOS only repaints the emulated framebuffer while the display is awake; once it sleeps (~idle),
VNC shows a blank white/black screen with just the cursor even though the guest is healthy (SSH works,
WindowServer is up). A mouse move repaints it — it is not a GPU/driver problem. The golden image’s
first-boot daemon runs pmset -a displaysleep 0 sleep 0 disablesleep 1 system-wide (covering the
pre-login loginwindow and disabling system sleep too) to keep the framebuffer painted; older images
need a setup-stage rebuild.
Earlier builds set an auto-created --net tap|bridge TAP admin-DOWN on vm stop; the current build
neither downs nor ups it (a TAP QEMU has closed has no carrier, so its bridge port forwards nothing).
A VM stopped by an earlier build therefore keeps a DOWN TAP after vm start: run ip link set <tap>
up once (the name is in vm inspect), or vm rm and recreate it.
A fresh macOS 26 clone boots to the system Setup Assistant, which resists every offline marker-based
skip tried (macOS 14+ broke the classic .AppleSetupDone skip). :26 is SSH/VNC-login-usable, but a
fully unattended boot-to-desktop needs a mouse/OCR click-through of the SA wizard — see the WIP detail
in VM Boot & Firmware and the Roadmap.