Skip to content

A desktop without a desktop

Last updated on 2019-12-23

Run graphical software without xserver

When working within a machine that has no graphical interface, such as…

… you might still want the ability to run graphical software in certain cases. With Wine, for example, you’ll be able to reverse-engineer software developed for Windows. And with Selenium, which requires a browser, you can automate client-side actions on a website.

Let’s see how we can run graphical software on Debian without installing a full graphical environment.

Virtual framebuffer

The first piece is the virtual framebuffer X server, Xvfb, which emulates a display to which we can connect.

To install it, simply run apt install xvfb.

Here’s how you can execute it:

export DISPLAY=:0
Xvfb -screen 0 640x480x16 &

Of course, you can choose a different display number and make adjustments to the screen resolution and depth.

VNC server and window manager

While the virtual framebuffer provides an emulated display, we need to connect to that display in order to view it.

This can be achieved with x11vnc, a VNC server designed specifically to connect to existing displays.

Xfvb and x11vnc together are enough to display a barebones X window system. To make things friendlier, let’s also install fluxbox, a light, fairly intuitive window manager:

apt install fluxbox x11vnc

Now, start both of them as follows:

fluxbox &  # requires that the DISPLAY environment variable is declared
x11vnc -usepw

The -usepw flag will prompt you to create and store a password which must be entered by the client in order to connect. Optional, but recommended. Once the password is stored, future uses of -usepw will retrieve the saved password instead of prompting for a new one.

Regardless of whether you set a password, the VNC connection will operate in cleartext. Please refer to these instructions on tunnelling x11vnc via SSH to protect the VNC traffic.

Now, with your VNC client of choice, connect to the target machine and you’ll be greeted with a desktop!

Virtual desktop with xvfb
Virtual desktop with xvfb

VNC with xserver

Naturally, if you decide to install a full X11-based graphical environment, you can still use x11vnc to remotely view and control your machine – there’s just no need for Xvfb and fluxbox at that point.

In fact, x11vnc has a handy -find flag which tells it to automatically detect the active X display and use it for the VNC connection.

On a related note, after installing kde-plasma-desktop on a virtual machine created with Vagrant using the debian/buster64 image, features like screen resizing and smart mouse/keyboard capture work out of the box. No need to install the VirtualBox Guest Additions.

Another handy x11vnc flag is -viewonly. As the name implies, connecting clients will not be able to remotely control the target machine, but only be able to view the screen.

Lastly, you may have noticed that x11vnc will exit after the client disconnects. In order to allow multiple connections, or persist the x11vnc process, refer to the -shared and -forever flags, respectively.

Published inUncategorized