Replace ramfb with virtio-gpu-pci at 2048x1280 and install the viogpudo
driver from the VirtIO ISO. ramfb has a fixed mode, and keeping both
adapters left Windows with a second, fixed-mode monitor.
Windows Setup and the base image have no viogpudo driver, so on the
launch that creates the system disk the launcher also adds a ramfb ahead
of the config files. The display window shows the first GPU.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The silent installer skips the desktop shortcut option, so the script
creates the shortcut itself.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
On Arm64 Windows the VirtIO guest tools installer is an x86 program and the
VirtIO ISO has no Arm64 package for it, so the first-logon script failed there
and the guest had no network (no NetKVM driver). Install the Arm64 NetKVM,
vioserial, Balloon, viorng and vioinput drivers from their folders on the ISO
with pnputil instead.
The OpenSSH Server capability is downloaded through Windows Update, which can
take very long and blocked the rest of the script. Move it, with the
administrator authorized key, into 05-Install-OpenSSH-Admin.bat, which the
script copies to the Installers folder on the desktop to run by hand.
Update the vm-images submodule to the build script that runs on Debian.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Pick qemu-system-aarch64, the AArch64 UEFI firmware and a per-architecture
QEMU config (NVMe disk, virtio-net, ramfb, USB installation media) on arm64,
render the answer file for the target architecture, and move the q35-only
disk and NIC devices out of the shared config. Update vm-images to match
arm64 Windows ISO names.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Adds a -CopyInstallers switch to the Windows 11 configure script and enables
it in Autounattend.xml.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
ws2tcp-local-gui needs qt_generate_deploy_app_script INCLUDE_PLUGINS, which
Qt 6.8 does not support.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Disables automatic Windows Update via policy, pins the current feature
release, and is enabled in Autounattend.xml.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Relaunch as Administrator through UAC when needed, report success or
failure, and wait for Enter before the window closes. Autounattend.xml
passes -NoPause so the unattended install does not block.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Add -InstallVirtIO and -EnableAutomaticLogon switches to
Configure-Windows.ps1 so it can run standalone on a physical machine.
Autounattend.xml passes both switches during the virtual machine install.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Add run-ubuntu2604.py with its QEMU config files and NoCloud seed. The
launcher follows the Debian 13 one, with UBUNTU_VM_ settings and SSH
forwarded to host port 2225. The seed injects the current user's SSH public
key, uses the USTC mirror (ubuntu-ports on arm64) and installs the GNOME
desktop on first boot. Update vm-images for the ubuntu2604 image target.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kwxp2XWvKnuEBifnCbhyX5
user-data is now a template with an @SSH_PUBKEY@ placeholder that
build-seed.sh fills in from SSH_PUBKEY_FILE, ~/.ssh/id_*.pub or ssh-agent.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>