Skip to main content
VNC does not require a physical display or GPU. TigerVNC’s X server draws into a virtual framebuffer in guest memory, encodes changed regions, and sends them to the client. noVNC provides the browser client over WebSockets. This example runs the lightweight LXQt desktop with Breeze styling and opens QTerminal. It is useful for GUI-only utilities, observing browser sessions, and testing desktop applications—not for graphics-performance workloads.

Run the desktop

1

Create the startup script

Save the desktop setup and service lifecycle in a host-side script:
start-desktop.sh
--script-path installs this file as the executable start-desktop command inside the guest.
2

Start the desktop

Detached mode returns as soon as the VM starts, before the desktop packages are ready. The first install downloads about 183 MB, uses roughly 734 MB of guest disk, and can take a few minutes. Follow the installation, TigerVNC startup, and websockify output:
When websockify reports that it is listening, press Ctrl-C to stop following the log. The sandbox keeps running. Confirm that noVNC is serving HTTP:
Open http://127.0.0.1:6080/vnc.html?autoconnect=1&resize=scale. You should see an LXQt desktop with QTerminal open.
3

Verify the services

Check the browser endpoint from the host:
Then inspect the VNC server log inside the guest:
VNC authentication is disabled inside this VM. The host listener is therefore intentionally restricted to 127.0.0.1. Do not publish port 6080 on a LAN or public interface without VNC authentication, TLS, and an authenticated reverse proxy.
4

Clean up

For repeated launches, stop the prepared sandbox, create a snapshot, and boot desktops from that snapshot instead of reinstalling the packages.