Gui on a Headless VPS

If you wish to run a gui application on a virtual private server (vps) you have two choices.

The first one doesn't count - it's painful. That's running X with a virtual frame buffer for the display. Something like Xvfb. It's just too slow. It is also fairly resource heavy.

The better bet is to use a vnc server such as tigervnc-server on the VPS and a vnc client on your local system.

You will want to install a very light weight desktop such as fluxbox, a terminal, and whatever gui app that you really want to run, in my case it was firefox. You can install a full desktop environment if you like but I really only wanted to be able to run firefox.

On the vps as root…

pkg install tigervnc-server fluxbox xfce4-terminal firefox

As your user on the vps…

cd ~
mkdir .vnc
cd .vnc
vncpasswd passwd
echo "geometry=1900x1000" > config
echo "localhost" >> config
echo "AlwaysShared" >> config
echo "#!/bin/sh" > xstartup
echo "exec fluxbox" >> xstartup
chmod u+x xstartup

Now you should be ready to go if you have a local vnc client all setup. I would recommend tigervnc just to keep things consistent.

From you local client

# we will tunnel the vnc connection through ssh
ssh -L 5901:localhost:5901 user@vps

# after you connect run vncserver
# -autokill will shutdown vnc after xstartup finishes (usually)
vncserver -autokill

You will get a message about it running the xstartup script we created and where the log file is located.

Now with your local vnc client you should be able to connect to localhost:5901. You will be prompted for the password you configured above.

If you don't like the default fluxbox menu you can change it in ~/.fluxbox/menu and reload the config.

And off you go.