Documentation / Proxmox Test VM
Testing Aphotic in a Proxmox VE Guest
Installing a full desktop on the machine you work on is a big first move.
A Proxmox guest lets you watch a complete run, pick a profile, break it,
and roll back to a snapshot. Changes to install.sh go through a guest
here before they ship, so the install path gets exercised in a VM
routinely.
[!WARNING] The installer prints a warning when it detects a VM. That is expected, and you can continue past it. The guest below runs Hyprland and the Aphotic shell, so the warning describes a risk rather than a wall. It stays because a VM is not a supported target for daily use.
Two settings decide whether this is usable. Set the display adapter to VirtIO-GPU, which gives the guest the
/dev/dri/renderD128render node Hyprland draws through; Proxmox defaults tostd. Then reach the guest over SPICE rather than the browser console, or the SUPER key most of Aphotic hangs off never arrives.
The guest that works
Read off the running dev VM, not copied from a template.
| Setting | Value | Why it matters |
|---|---|---|
| Machine type | q35 |
Reported by the guest as Standard PC (Q35 + ICH9, 2009) |
| BIOS | OVMF (UEFI) | /sys/firmware/efi is present |
| Display | VirtIO-GPU | Loads virtio_gpu and virtio_dma_buf, and provides /dev/dri/renderD128. Hyprland needs a render node |
| CPU type | host |
The guest reports the physical CPU model straight through |
| Cores | 6 | 1 thread per core |
| Memory | 12 GB | 11 GB usable in the guest |
| Disk | 60 GB | SCSI, VirtIO SCSI controller |
| Guest OS | Arch Linux | Aphotic assumes an Arch/AUR base |
Verified in the guest:
$ hostnamectl | grep -E 'Chassis|Virtualization'
Chassis: vm 💽
Virtualization: kvm
$ lspci | grep -i vga
00:01.0 VGA compatible controller: Red Hat, Inc. Virtio 1.0 GPU (rev 01)
$ ls /sys/class/drm/
card1 card1-Virtual-1 renderD128 version
$ lsmod | grep virtio_gpu
virtio_gpu 114688 26
virtio_dma_buf 12288 1 virtio_gpu
$ pgrep -a Hyprland
1017983 Hyprland --watchdog-fd 4
Hyprland comes up on its own there. You do not need
WLR_RENDERER_ALLOW_SOFTWARE=1, and nothing in Aphotic sets it.
Creating the guest
Substitute your own VM ID, storage name and ISO.
qm create 900 \
--name aphotic-devvm \
--machine q35 \
--bios ovmf \
--efidisk0 local-lvm:1,efitype=4m,pre-enrolled-keys=0 \
--cpu host \
--cores 6 \
--sockets 1 \
--memory 12288 \
--scsihw virtio-scsi-single \
--scsi0 local-lvm:60 \
--net0 virtio,bridge=vmbr0 \
--vga virtio \
--ostype l26 \
--ide2 local:iso/archlinux-x86_64.iso,media=cdrom \
--boot 'order=ide2;scsi0'
--vga virtio is the line to get right. In the web UI it is
Hardware → Display → VirtIO-GPU. Quote the --boot value: the
semicolon is a shell separator otherwise.
Turn on the guest agent while you are here, which the SPICE section below uses:
qm set 900 --agent 1
Take a snapshot once Arch is installed and before you run install.sh:
qm snapshot 900 clean-arch --description "Arch base, pre-Aphotic"
Then roll back between test runs:
qm rollback 900 clean-arch
Connecting with SPICE
Use a SPICE client, not the browser console. Aphotic binds almost
everything to SUPER, and the browser console is where SUPER tends to get
swallowed by the host window manager before it ever reaches the guest. A
SPICE client grabs the keyboard, so SUPER, SUPER+D, SUPER+W and the
rest land in Hyprland.
Enable the QEMU guest agent on the VM:
qm set 900 --agent 1
Open Console → SPICE in the Proxmox web UI. That downloads a small
.vv file which your client opens.
On the machine you sit at
| Client OS | What to install |
|---|---|
| Linux (including Aphotic itself) | virt-viewer from your package manager. remote-viewer file.vv opens the session |
| Windows | The virt-viewer MSI from spice-space.org/download.html, under Windows binaries |
Running the dev VM from inside Aphotic over SPICE works, so you can keep the guest in a workspace beside everything else.
spice-space.org carries the client binaries and the Windows guest tools on one page, so pick the client for the OS you are sitting at. The guest side is below.
In the Arch guest
sudo pacman -S spice-vdagent qemu-guest-agent
Nothing to enable. Both units ship static on Arch and start themselves
when the virtio ports appear:
$ systemctl is-enabled spice-vdagentd qemu-guest-agent
static
static
$ ls /dev/virtio-ports/
com.redhat.spice.0 org.qemu.guest_agent.0
$ pgrep -a spice-vdagentd
699957 /usr/bin/spice-vdagentd -x
spice-vdagent handles clipboard sharing and display resizing.
qemu-guest-agent is what lets Proxmox read the guest’s IP and shut it
down cleanly.
VirtIO-GPU and SPICE coexist. The dev VM runs both.
Installing
Same as anywhere else:
git clone https://github.com/T-Crypt/Aphotic-Hypr.git
cd Aphotic-Hypr
./install.sh
Try --dry-run first if you want to read the resolved package list
without touching the guest:
./install.sh --profile full --with gaming,dev --dry-run
What a guest will not show you
- GPU layers. NVIDIA and AMD detection, the driver installs, and the
gpu-vramresource accounting all key off real hardware. A VirtIO-GPU guest exercises none of it. - Frame rate. Judge the install path, not the smoothness. Rendering through VirtIO-GPU is not what the shell performs like on metal.
- Multi-monitor behaviour, unless you attach more than one virtual display.