How to set up a Ubuntu desktop on a VPS
An always-online server running a full Ubuntu Desktop can be useful for many reasons. I usually use DigitalOcean but the popular France-based host OVH seems perfect for this scenario.
Install xfce4 desktop environment
The familiar desktops Unity and Gnome don’t work without a display plugged in so the next best choice is Xfce which is like the Raspberry Pi desktop.
sudo apt install xfce4 xfce4-goodies tightvncserver
Create a user and start VNC
Each user gets a VNC server. In this example, we set up an account called user1 and give them sudoer permissions.
adduser user1 usermod -a -G sudo user1
At this point we are ready to log in as user1 and start the VNC server. The
:1 is a screen number. Increment this number for each additional user and write down which screen number belongs to each user.
su user1 vncserver -geometry 1280x800 :1
At this point you can use a VNC app like RealVNC to connect. The first screen will be on port
X is the screen number to connect to.
Run vncserver at startup using systemctl
We can take this to the next level by creating a service that will run at startup. Create a service for each user. First, kill any running VNC servers with
vncserver -kill :1 vncserver -kill :2 vncserver -kill :3 ...
In this example we are making a service for
user1 using the screen
:1 so create a new service file at
[Unit] Description=VNC server for user1 After=syslog.target network.target [Service] Type=normal User=user1 Group=user1 WorkingDirectory=/home/user1 PIDFile=/home/user1/.vnc/%H:1.pid ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 ExecStart=/usr/bin/vncserver -geometry 1280x800 :1 ExecStop=/usr/bin/vncserver -kill :1 [Install] WantedBy=multi-user.target
Now reload systemctl and start the VNC service.
sudo systemctl daemon-reload sudo systemctl start vnc1 sudo systemctl enable vnc1