You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Mesa Venus (Vulkan virtualization driver), successor to: VirGL (OpenGL virtualization driver)
A driver for the host to accept Vulkan GPU and Vulkan Compute (ALUs - arithmetic logic units, like "CUDA" cores) commands and Vulkan SPIR-V shaders from the guest
Host: Proxmox/QUEMU - Venus GPU for Guest
Requires Host GPU with Vulkan support
Venus Host calls: Vulkan GPU and Vulkan Compute
Venus Guest GPU accepts: Vulkan GPU and Vulkan Compute
Windows Guest VM - Venus GPU
NO: the guest Venus GPU driver VirtIO-GPU: virtio-win - viogpu3d is currently being extended
Paravirtualized 3D graphics and Venus Vulkan for Windows VMs are actively progressing out of the conceptual stage and into functional development
beacuse wayland isolates apps and QEMU is not native to wayland client
egl copies the Venus-accelerated frame rendering from GPU into shared memory buffer -> SPICE captures that local buffer and passes it directly to remote-viwer
Proxmox boot boot flag in case of Nvidia: nvidia-drm.modset=1 in for cage, in case of blank display init error
maybe add an interface on TTY1 to start/stop VMs and show running status
multi monitor
instead of cage
install sway
101.conf ... ,venus=on,max_outputs=2 ...
remote-viewer opens 2 windows automatically
sway config to distribute these
# Disable default bar and window decorations for a clean look
default_border none
default_floating_border none
font pango:monospace 8
floating_modifier Mod4
# Automatically assign monitors (adjust HDMI-A-1 / DP-1 to match your 'swaymsg -t get_outputs')
workspace 1 output HDMI-A-1
workspace 2 output DP-1
# Force the two SPICE display windows onto their respective workspaces/monitors
for_window [title="*Display 1*"] move to workspace 1; fullscreen enable
for_window [title="*Display 2*"] move to workspace 2; fullscreen enable
# Keybindings to easily kill or reload if something gets stuck (Mod4 = Windows key)
bindsym Mod4+Shift+c reload
bindsym Mod4+Shift+q exec swaymsg exit
In the original Gist’s "Wayland, egl" section (README_1_OUTPUT.md), the architecture relied on a multi-step chain:
Gist's Original Chain:
Proxmox Host $\rightarrow$ QEMU (-display egl-headless) $\rightarrow$ SPICE Server $\rightarrow$ Local remote-viewer Client $\rightarrow$Cage / Openbox Compositor$\rightarrow$ Physical Monitor.
While this allowed you to run Proxmox as a hyper-converged desktop host, it required running remote-viewer processes inside Cage/Sway to display the VMs, adding SPICE encoding overhead and latency.
The New Architecture: Proxmox + virtio-gpu-rutabaga + Venus
With virtio-gpu-rutabaga + Venus, you bypass SPICE, remote-viewer, and egl-headless entirely. The VM outputs its Vulkan/Wayland frames directly into the Proxmox host's Wayland compositor via shared GPU memory (DMA-BUF).
3. Desktop Switching (The "KVM Switch" Experience)
Instead of managing remote-viewer windows inside Cage as proposed in the Gist, Sway or Hyprland on the Proxmox host acts as your hardware desktop switcher:
Workspace 1 (Super + 1):Fedora Gaming VM (Full screen, 144Hz/VRR, Venus Vulkan acceleration via Rutabaga).
Workspace 2 (Super + 2):Ubuntu Work VM (Full screen, seamless Wayland application forwarding via Rutabaga cross-domain).
Workspace 3 (Super + 3):Proxmox Host Web GUI (Running in a lightweight host browser like Firefox/Chromium to manage VMs, storage, and backups).
Native Wayland Clipboard via Rutabaga cross-domain
Audio
PipeWire via SPICE audio channel
Direct VirtIO Sound (virtio-snd) to PipeWire
Practical Implementation Note for Proxmox
By default, Proxmox's packaged QEMU binary (pve-qemu) may not have the Rust rutabaga_gfx feature enabled at compile time. To achieve this setup on Proxmox, you either:
Compile a custom pve-qemu package with rutabaga support enabled, or
Point Proxmox's VM config to a custom QEMU binary compiled with Rutabaga/Venus enabled (args: -exec /usr/local/bin/qemu-system-x86_64 ...).
1. Are there pre-compiled binaries for pve-qemu with Rutabaga support?
Official Proxmox Repositories:
Official PVE Status: Official Proxmox VE packages (pve-qemu-kvm 9.2 / 10.0 / 11.0) do not enable Rutabaga by default. This is because Rutabaga requires Rust C-bindings (librutabaga_gfx_ffi) that are not part of standard Debian base repositories.
Native Venus Alternative (QEMU 9.2+ / Proxmox 9+): Starting with QEMU 9.2, upstream QEMU merged native Venus Vulkan support into virtio-gpu-gl via virglrenderer 1.0+. This means on modern Proxmox, you can run Venus Vulkan acceleration directly using -device virtio-gpu-gl,venus=on,hostmem=8Gwithout needing custom Rutabaga binaries!
If you specifically need Rutabaga (for cross-domain Wayland socket forwarding):
Community Builds: There are community GitHub repositories (e.g., qemu-kvm-wayland-rutabaga) that provide .deb packages or build scripts compiling QEMU with rutabaga_gfx enabled.
Build from Source: You can pull the pve-qemu package source using apt source pve-qemu, add --enable-rutabaga_gfx to debian/rules, build librutabaga_gfx_ffi, and compile your custom .deb package.
2. Systemd & Sway Setup for the Hyper-Converged Proxmox Desktop
To run a bare-metal Proxmox host that boots directly into a Wayland compositor (Sway) and automatically maps each VM to a dedicated workspace, you set up a systemd service on the Proxmox host.
A. Host Systemd Service (/etc/systemd/system/wayland-desktop.service)
This service boots Sway automatically on TTY1 as a non-root desktop user (e.g., pve-desktop):
Neither Windows nor macOS supports Mesa Venus or virtio-gpu-rutabaga natively because Venus is a Linux-only Mesa driver. However, they integrate cleanly into the Sway workspace setup.
┌─────────────────────────────────────────────────────────────────────────┐
│ Proxmox Host Wayland Desktop (Sway) │
│ │
│ Workspace 1: Linux Gaming VM ───> (Mesa Venus / Rutabaga Vulkan 3D) │
│ Workspace 2: Linux Work VM ───> (Mesa Venus / Wayland Forwarding) │
│ Workspace 3: Proxmox Web GUI ───> (Host Browser) │
│ Workspace 4: Windows 11 VM ───> (VirtIO 2D or VFIO GPU Passthrough)│
│ Workspace 5: macOS VM ───> (OSX-KVM VirtIO or AMD Passthrough)│
└─────────────────────────────────────────────────────────────────────────┘
How Windows 11 Fits In (Workspace 4)
Graphics Acceleration Options:
Standard 2D / Office Use: Use virtio-gpu-pci with official Red Hat virtio-win drivers. Windows renders in 2D, and QEMU outputs the desktop directly onto Sway Workspace 4.
3D Gaming / CAD: Pass a secondary physical GPU (NVIDIA/AMD) to Windows via PCIe Passthrough (VFIO) or use SR-IOV vGPU. You can then display Windows using Looking Glass inside Sway.
Host Boot: Proxmox boots, starts wayland-desktop.service, launching Sway on TTY1.
Auto-Start VMs: Proxmox auto-starts VMs 100 through 104.
Workspace Mapping:
Super + 1: Linux Gaming VM (Fedora + Venus Vulkan 3D).
Super + 2: Linux Work VM (Ubuntu + Venus Vulkan).
Super + 3: Proxmox Admin GUI (Firefox in kiosk mode).
Super + 4: Windows 11 VM (VirtIO-GPU 2D or Looking Glass).
Super + 5: macOS VM (OSX-KVM).
Audio & Input: PipeWire mixes audio from Linux, Windows, macOS, and Host simultaneously. Hotkeys instantly switch display focus across all 5 systems in <1 millisecond.
Note: Mesa Venus / Wayland Forwarding
The difference highlights the two distinct ways Rutabaga + Venus can display virtual machines on your host desktop, depending on what you are using the VM for:
Workspace 1: Full-Screen 3D Rendering Mode (Gaming VM)
(Mesa Venus / Rutabaga Vulkan 3D)
How it works: The VM acts as a complete, self-contained desktop system.
The Pipeline: The game running in the VM renders full 3D frames (using Mesa Venus Vulkan / Proton). Rutabaga takes that entire 3D frame buffer and displays the VM as one single, unified full-screen window on your host display.
Why use this for Gaming?
Games need exclusive full-screen control for resolution scaling, aspect ratios, and mouse pointer grabbing.
You run a full desktop or Steam Big Picture mode inside the VM.
Best for: Steam games, Cyberpunk, Proton, Blender, or CAD software.
How it works: The VM does NOT render a full desktop environment (no guest taskbar, no desktop wallpaper, no nested window manager).
The Pipeline: Utilizing Rutabaga’s cross-domain feature (virtio-wayland), the guest VM proxies individual Wayland application sockets directly to your host Sway compositor.
Why use this for Work?
Applications inside the VM (like VS Code, Firefox, or a Terminal) open as individual, floating windows directly on your host desktop.
They tile, resize, and integrate seamlessly alongside native host apps without looking like a "box inside a box."
Best for: Development, web browsing, coding, and day-to-day productivity where you want seamless app integration without the memory overhead of a guest desktop environment.
Summary Comparison
Feature
Workspace 1: Gaming VM (Full 3D Mode)
Workspace 2: Work VM (Wayland Forwarding Mode)
Visual Output
One large window displaying the entire VM desktop / game.
Individual app windows floating directly on host Sway.
Guest Desktop Environment
Required (e.g., KDE, GNOME, or Steam Big Picture).
Not required (App windows pass directly to host compositor).
Rutabaga Feature Used
venus (Vulkan 3D GPU acceleration)
cross-domain (Wayland socket proxying) + venus
Ideal Workloads
Full-screen AAA games, 3D rendering, video editing.
Coding (VS Code), Terminal, Web browsing, Slack.
Using Hyprland instead of Sway on your Proxmox host is a popular choice for gaming and multimedia hypervisors.
While Sway focuses on strict i3-like minimalism, Hyprland offers three distinct advantages for a hyper-converged desktop:
Direct Scanout: Bypasses the host compositor's rendering pipeline when a VM goes full-screen, delivering absolute zero-latency display performance (identical to bare metal).
Workspace 1: Gaming VM (Full-Screen Direct Scanout)
When you press Super + 1, Hyprland smoothly slides to Workspace 1.
Hyprland detects the full-screen QEMU window and triggers Direct Scanout. The host compositor stops processing that window entirely, handing direct control of the monitor's display buffer to the VM via virtio-gpu-rutabaga / Venus.
Latency: Exactly identical to native bare-metal gaming.
Workspace 2: Linux Work VM (Rutabaga Wayland Forwarding)
When you press Super + 2, you enter Workspace 2.
Guest Wayland applications (VS Code, Terminal, Slack) proxy their Wayland sockets using Rutabaga cross-domain.
Hyprland's dynamic tiling manager automatically tiles and snaps these guest windows alongside native host windows with smooth opening/closing animations.
Workspace 3: Proxmox Web GUI
Pressing Super + 3 slides over to a browser displaying your local Proxmox management dashboard, allowing you to monitor node stats, temperature, CPU usage, and manage VM snapshots.
Sway vs. Hyprland for Proxmox Host
Feature
Sway Host
Hyprland Host
Philosophy
Minimal, strict i3-compatible tiling
Modern, fluid, animated
Latency for Fullscreen VMs
Very low
Lowest possible (via Direct Scanout)
Animations
None (instant hard cuts)
Smooth spatial transitions between VMs
VRR / FreeSync
Basic
Per-window / Per-monitor advanced VRR
Window Rules
Standard Sway criteria
Advanced windowrulev2 regex filtering
LXC Containers for Linux - instead of Linux VMs
In fact, for Linux workloads, LXC containers work even better, faster, and simpler than Virtual Machines.
While VMs require paravirtualized GPU drivers (like Mesa Venus over virtio-gpu) to bridge guest and host, LXC containers share the host Linux kernel directly.
This means LXC containers can bypass Venus entirely and use your physical GPU and Wayland compositor at 100% native bare-metal speed with zero virtualization overhead.
Why LXCs are Superior for Linux Workloads on Proxmox
Feature
KVM Virtual Machines (VMs)
LXC Containers
GPU Performance
Near-native (~95–98%) via Venus
100% Native Bare Metal (Direct GPU hardware access)
Display Sharing
Requires virtio-gpu-rutabaga or SPICE
Direct Wayland Socket Mount (/run/user/1000/wayland-0)
RAM Usage
Fixed pre-allocated memory (e.g., locks 16GB)
Dynamic Shared RAM (Uses only what it needs on-demand)
Boot Time
5 – 15 seconds
Sub-second (<0.5 seconds)
OS Support
Linux, Windows, macOS, BSD
Linux Only (Fedora, Arch, Ubuntu, Alpine)
How to Set Up LXC Display & GPU in Proxmox
Instead of using virtio-gpu-rutabaga, you pass two things from the Proxmox host into the LXC container:
The GPU Render Node (/dev/dri/renderD128) for native Vulkan/OpenGL 3D acceleration.
The Host Wayland Socket (/run/user/1000/wayland-0) so container apps render directly onto the host Hyprland desktop.
Now, whenever you launch an app inside the LXC container (e.g., code, firefox, or steam), its window appears instantly on your host Hyprland desktop as if it were a native host application!
Step 3: Hyprland Window Routing for LXC (hyprland.conf)
Hyprland sees LXC applications just like native host windows. You map them to workspaces using window rules:
# Route LXC Application windows to Workspace 2 (Work)windowrulev2 = workspace 2, class:^(code-url-handler|code|firefox)$
# Route LXC Steam / Games to Workspace 1 (Gaming)windowrulev2 = workspace 1, class:^(steam|gamescope)$
The Ultimate Hybrid Proxmox Desktop Architecture
You combine LXCs for Linux and KVM VMs for Windows/macOS:
Use LXCs for: Linux gaming, Linux development, containers, and web browsers. You get sub-second boots, dynamic RAM usage, zero CPU/memory overhead, and 100% native GPU performance.
Use KVM VMs for: Windows 11 and macOS, because they require full OS kernel virtualization and cannot run inside a Linux LXC container.