Alpine Linux LXC with Browser and RDP on Proxmox

This guide shows how to set up an ultra-lightweight Alpine Linux container on Proxmox with a minimal desktop, browser, and RDP access. Perfect for low-resource environments and quick web access.

To debug AdGuard effectively, I needed a clean browser environment separate from my Windows system. Running a lightweight browser in a minimal Linux container prevents unrelated web traffic and cached data from mixing into the logs, enabling precise filtering analysis. I’d also been wanting to experiment with Alpine Linux for a while, and this project was the perfect chance to gain some hands-on experience with it.

Why Alpine

  • Very small footprint (under 300 MB with browser and RDP)
  • Low idle RAM usage (~70 MB without browser)
  • Ideal for multiple lightweight containers on a single Proxmox host

Prerequisites

  • Proxmox VE with internet access
  • Alpine Linux LXC template (latest version)
  • LXC with nesting=1 enabled

Note: Enable nesting=1 for this container in Proxmox. Without nesting, Proxmox may block certain bind mounts and syscalls required by graphical applications, which can cause issues such as Chromium failing to start or XRDP sessions terminating immediately.

Steps

Create LXC

  • Template: alpine-3.x-default_*.tar.gz
  • Unprivileged: Yes
  • Features: Enable Nesting
  • Allocate
    • 1 CPU
    • 1–2 GB RAM
    • 2–4 GB disk

Install and enable SSH

To enable SSH access, do the following inside your Alpine container:

apk add openssh
rc-update add sshd default

sed -i '/^#*PermitRootLogin/c\PermitRootLogin yes' /etc/ssh/sshd_config
rc-service sshd start

Make sure port 22 is open in your firewall. Connect using:

ssh user@<container-ip>

Replace user and <container-ip> accordingly.

Update Alpine

apk update
apk upgrade

Install Xorg, Openbox, Browser

apk add xorg-server xf86-video-vesa xf86-video-dummy xf86-input-evdev openbox xterm chromium

Note: When running Xorg sessions over XRDP, there is no physical display device. Instead, XRDP uses a virtual framebuffer. This requires the xf86-video-dummy driver; without it, Xorg will fail to start with errors like “no screens found”.

Install XRDP

apk add xrdp
rc-update add xrdp default

rc-update add xrdp-sesman default
rc-service xrdp start

rc-service xrdp-sesman start

Configure Openbox

# Set system-wide Xsession
echo "openbox-session" > /etc/X11/xinit/Xsession
chmod +x /etc/X11/xinit/Xsession

# Set system-wide Openbox autostart
mkdir -p /etc/xdg/openbox
echo "/usr/bin/chromium --no-first-run --noerrdialogs --start-fullscreen &" > /etc/xdg/openbox/autostart
chmod 644 /etc/xdg/openbox/autostart

This will:

  • Make XRDP always start Openbox for all users.
  • Load the system-wide Openbox autostart file so Chromium starts automatically.
  • Avoid the need for per-user .xsession or autostart files.

Create a dedicated user

Xrdp sessions cannot be started with the root account. Please create a dedicated non-root user and use that for graphical login.
For example:

adduser ella.vator

You can now log in via Xrdp with the username ella.vator and the password you set.

Automatically Close XRDP Sessions on Disconnect

To free resources and avoid lingering sessions, configure XRDP to automatically kill disconnected sessions after a timeout.

Run these commands as root to enable this:

bashKopierenBearbeitensed -i 's/^;KillDisconnected=.*/KillDisconnected=true/' /etc/xrdp/sesman.ini || echo 'KillDisconnected=true' >> /etc/xrdp/sesman.ini
sed -i 's/^;DisconnectedTimeLimit=.*/DisconnectedTimeLimit=5/' /etc/xrdp/sesman.ini || echo 'DisconnectedTimeLimit=5' >> /etc/xrdp/sesman.ini
service xrdp restart

This sets XRDP to kill sessions 5 minutes after disconnect automatically.

Connect via RDP

Open port 3389 in the Proxmox firewall if needed and connect using any RDP client to the container’s IP.

Performance

  • Idle without browser: ~70 MB RAM
  • Browser with 1–2 tabs: ~350–400 MB RAM
  • CPU idle: near 0%, active browsing depends on site content

Restart XRDP and Kill All Sessions Without Reboot

To apply configuration changes immediately without rebooting your Alpine Linux container, you can restart XRDP services and kill all active sessions with these commands:

# Restart XRDP services
service xrdp restart
service xrdp-sesman restart

Conclusion

Using Alpine Linux for a browser-accessible RDP container on Proxmox offers a compact, efficient, and fast environment. This setup is ideal for quick web tasks, admin tools, or lightweight kiosks without heavy desktop environments.