Objective
The objective is to setup VNC server on Ubuntu 18.04 Bionic Beaver Linux.
Operating System and Software Versions
- Operating System: – Ubuntu 18.04 Bionic Beaver
Requirements
Privileged access to your Ubuntu System as root or via sudo
command is required.
Conventions
- # – requires given linux commands to be executed with root privileges either directly as a root user or by use of
sudo
command - $ – requires given linux commands to be executed as a regular non-privileged user
Other Versions of this Tutorial
Instructions
Ubuntu VNC server setup
Let’s start by the installation of the VNC server and the Xfce desktop manager core files:
$ sudo apt install vnc4server xfce4 xfce4-goodies
Once the VNC server is installed we can begin the configuration by setting up a user password to be used by a VNC client when creating a remote connection:
$ vncpasswd
Next, create the ~/.vnc/xstartup
file to start the Xfce4 desktop:
$ mkdir ~/.vnc $ nano ~/.vnc/xstartup
Insert the the following content and save:
#!/bin/bash
startxfce4 &
Lastly, make the ~/.vnc/xstartup
file executable:
$ chmod +x ~/.vnc/xstartup
At this stage we are ready to start the VNC server. For this simply run the vncserver
command from your home directory:
$ vnc4server New 'ubuntu:1 (linuxconfig)' desktop is ubuntu:1 Starting applications specified in /home/linuxconfig/.vnc/xstartup Log file is /home/linuxconfig/.vnc/ubuntu:1.log
The VNC server will open a new port for every new VNC desktop you create. Your Ubuntu system should now be listening on the port 5901
for incoming VNC connections:
$ ss -ltn
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 0.0.0.0:6001 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 5 *:5901 *:*
In case you have the UFW firewall enabled, open the port 5901
for incoming connections or see below how to tunnel the VNC connections via the SSH protocol:
$ sudo ufw allow from any to any port 5901 proto tcp Rule added Rule added (v6)
If you wish to make your firewall rules more strict or allow range of ports for multiple VNC sessions visit our How to Open/Allow incoming firewall port guide for more information.
Connect to VNC server
You can now use any VNC client to connect to your new Ubuntu VNC server. This guide will use the xvnc4viewer
client.
To install xvnc4viewer
on your Ubuntu client system run:
$ sudo apt install xvnc4viewer
Once you have your VNC client installed you can establish a new connection to your VNC server with a host name eg. ubuntu-vnc-server
using the following linux command:
$ vncviewer ubuntu-vnc-server:1
Enter your password created previously as part of the above “Ubuntu VNC server setup” section.
If all went well, you will be presented with a Xfce4 desktop session running on the remote VNC server Ubuntu system:
Note, it is also possible to run a secure VNC client/server connection via the SSH tunnel. Given that you have the SSH user access (in this case username linuxconfig
is used) to your VNC server eg. ubuntu-vnc-server
.
First, create an SSH tunnel on a local port 5901
leading to a remote port 5901
on your VNC server.
Example:
$ ssh -L 5901:127.0.0.1:5901 -N -f -l linuxconfig ubuntu-vnc-server
The above command will open a local port 5901
on a localhost loop-back network interface 127.0.0.1
:
$ ss -ltn
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 5 127.0.0.1:631 0.0.0.0:*
LISTEN 0 128 127.0.0.1:6010 0.0.0.0:*
LISTEN 0 128 127.0.0.1:6011 0.0.0.0:*
LISTEN 0 128 0.0.0.0:38299 0.0.0.0:*
LISTEN 0 128 127.0.0.1:5901 0.0.0.0:*
Next, use the local port 5901
to connect to a remote VNC server via the SSH tunnel:
$ vncviewer localhost:1
VNC server system startup script
Although the current configuration works, one might want to setup a systemd startup script in order to easily manage multiple VNC desktop sessions.
Create a new file /etc/systemd/system/vncserver@.service
using your favorite text editor eg. nano:
$ sudo nano /etc/systemd/system/vncserver@.service
Once you have the file opened insert the following lines while replacing the linuxconfig
username with username of your VNC user on Line 7 and Line 10. Optionally, change screen resolution settings and apply other vncserver
options or arguments:
[Unit]
Description=Systemd VNC server startup script for Ubuntu 18.04
After=syslog.target network.target
[Service]
Type=forking
User=linuxconfig
ExecStartPre=-/usr/bin/vncserver -kill :%i &> /dev/null
ExecStart=/usr/bin/vncserver -depth 24 -geometry 800x600 :%i
PIDFile=/home/linuxconfig/.vnc/%H:%i.pid
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target
Next, reload the Systemd:
$ sudo systemctl daemon-reload
To start VNC desktop 1
enter:
$ sudo service vncserver@1 start
To stop VNC desktop 1
execute:
$ sudo service vncserver@1 stop
The following linux command will enable the VNC desktop 1
to start after reboot:
$ sudo systemctl enable vncserver@1
To start VNC desktop 2
enter:
$ sudo service vncserver@2 start
and so on..