Technical

Proxmox LXC Desktop: Run a Full Linux Desktop in a Container, Not a VM

Proxmox LXC Desktop: Run a Full Linux Desktop in a Container, Not a VM

Proxmox LXC desktop is the way to keep your old Linux PC useful after converting it to a server. You don’t need a full VM for a desktop environment — a container gets you there with way less overhead, but GPU and audio need some manual work.

Blurry close-up of a computer screen displaying code with orange lighting.

Why LXC over a VM for a desktop

A VM gives you a full OS, but it also eats RAM and CPU just to run the display stack. An LXC container shares the host kernel, so a desktop inside it uses a fraction of the resources. The catch: the container doesn’t get direct hardware access by default. You have to pass through the GPU and sound devices yourself.

Create the container

Start with a Debian or Ubuntu template. Give it at least 2 cores and 2GB RAM — more if you’ll run browsers or heavy apps. The key settings are in the Options tab: enable nesting and FUSE, and set Unprivileged container to No. Yes, unprivileged is safer, but for a desktop with GPU access, privileged makes life easier.

Pass through the GPU

First, find your GPU on the host:

ls -l /dev/dri

You should see card0 and renderD128. Add these lines to the container config, usually /etc/pve/lxc/<CTID>.conf:

lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file

Then restart the container. Inside it, install the GPU drivers — for Intel, intel-media-va-driver and mesa-utils are enough. Check with glxinfo | grep renderer to confirm it’s using the host GPU.

Stylish indoor workspace with a computer and smartphone on a wooden desk.

Audio is the annoying part

PulseAudio or PipeWire inside the container won’t see the host’s sound card unless you pass it through. On the host, check /dev/snd/ for devices. Add them to the container config:

lxc.mount.entry: /dev/snd dev/snd none bind,optional,create=dir

But that alone doesn’t fix permissions. The container’s root user needs access to the audio group. Inside the container, add your user to the audio group and restart the session. If you still get no sound, try running pulseaudio --start as your user inside the container — sometimes the daemon doesn’t auto-start.

Install the desktop

Pick a lightweight DE — XFCE or LXQt work well. Install with tasksel or just apt install xfce4. Then you need a way to access it. VNC is the simplest: install x11vnc and start it on the container’s display. Or use X2Go for better performance over the network.

If you want to use the physical monitor and keyboard on the Proxmox host, that’s trickier. You’d need to pass through the host’s input devices and maybe run a second X server. Honestly, remote access is less hassle.

My take

LXC desktop works, but it’s not plug-and-play. GPU pass-through is straightforward, audio takes fiddling, and you’ll probably end up using VNC or X2Go anyway. If you just need a few GUI apps occasionally, a VM might be simpler. But if you want to keep resource usage low, LXC is the way. Just don’t expect it to be as smooth as a bare-metal install.

For more on LXC quirks, check out why LXC can’t export as OVA.

Leave a comment

Comments are reviewed before they appear. Your email is never published.