How to Install and Configure VNC on Ubuntu 18.04 (Remotely Access UBUNTU VM GUI)
Virtual Network Computing, or VNC, is a connection system that allows you to use your keyboard and mouse to interact with a graphical desktop environment on a remote server
TightVNC, a fast and lightweight remote control package. This choice will ensure that our VNC connection will be smooth and stable even on slower internet connections.
On your server, update your list of packages:
sudo apt update
Now install the Xfce desktop environment on your server:
sudo apt install xfce4 xfce4-goodies
Once that installation completes, install the TightVNC server:
sudo apt install tightvncserver
To complete the VNC server’s initial configuration after installation, use the vncserver
command to set up a secure password and create the initial configuration files:
vncserver
You’ll be prompted to enter and verify a password to access your machine remotely:
OutputYou will require a password to access your desktops.Password:
Verify:
The password must be between six and eight characters long. Passwords more than 8 characters will be truncated automatically.
Once you verify the password, you’ll have the option to create a a view-only password. Users who log in with the view-only password will not be able to control the VNC instance with their mouse or keyboard. This is a helpful option if you want to demonstrate something to other people using your VNC server, but this isn’t required.
The process then creates the necessary default configuration files and connection information for the server:
OutputWould you like to enter a view-only password (y/n)? n
xauth: file /home/sammy/.Xauthority does not existNew 'X' desktop is your_hostname:1Creating default startup script /home/sammy/.vnc/xstartup
Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/your_hostname:1.log
Now let’s configure the VNC server.
Step 2 — Configuring the VNC Server
you modify the xstartup
file, back up the original:
mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
Now create a new xstartup
file and open it in your text editor:
nano ~/.vnc/xstartup
Commands in this file are executed automatically whenever you start or restart the VNC server. We need VNC to start our desktop environment if it’s not already started. Add these commands to the file:
~/.vnc/xstartup
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
The first command in the file, xrdb $HOME/.Xresources
, tells VNC’s GUI framework to read the server user’s .Xresources
file. .Xresources
is where a user can make changes to certain settings of the graphical desktop, like terminal colors, cursor themes, and font rendering. The second command tells the server to launch Xfce, which is where you will find all of the graphical software that you need to comfortably manage your server.
To ensure that the VNC server will be able to use this new startup file properly, we’ll need to make it executable.
sudo chmod +x ~/.vnc/xstartup
Now, restart the VNC server.
vncserver
You’ll see output similar to this:
OutputNew 'X' desktop is your_hostname:1Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/your_hostname:1.log
With the configuration in place, let’s connect to the server from our local machine.
Running VNC as a System Service
create a new unit file called /etc/systemd/system/vncserver@.service
using your favorite text editor:
sudo nano /etc/systemd/system/vncserver@.service
The @
symbol at the end of the name will let us pass in an argument we can use in the service configuration. We’ll use this to specify the VNC display port we want to use when we manage the service.
Add the following lines to the file. Be sure to change the value of User, Group, WorkingDirectory, and the username in the value of PIDFILE to match your username:
/etc/systemd/system/vncserver@.service
[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target[Service]
Type=forking
User=root
Group=
WorkingDirectory=/rootPIDFile=/root/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :%i
ExecStop=/usr/bin/vncserver -kill :%i[Install]
WantedBy=multi-user.target
The ExecStartPre
command stops VNC if it’s already running. The ExecStart
command starts VNC and sets the color depth to 24-bit color with a resolution of 1280x800. You can modify these startup options as well to meet your needs.
Save and close the file.
Next, make the system aware of the new unit file.
sudo systemctl daemon-reload
Enable the unit file.
sudo systemctl enable vncserver@1.service
The 1
following the @
sign signifies which display number the service should appear over, in this case the default :1
as was discussed in Step 2..
Stop the current instance of the VNC server if it’s still running.
vncserver -kill :1
Then start it as you would start any other systemd service.
sudo systemctl start vncserver@1
You can verify that it started with this command:
sudo systemctl status vncserver@1
If it started correctly, the output should look like this:
Output● vncserver@1.service - Start TightVNC server at startup
Loaded: loaded (/etc/systemd/system/vncserver@.service; indirect; vendor preset: enabled)
Active: active (running) since Mon 2018-07-09 18:13:53 UTC; 2min 14s ago
Process: 22322 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :1 (code=exited, status=0/SUCCESS)
Process: 22316 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=0/SUCCESS)
Main PID: 22330 (Xtightvnc)...
Your VNC server will now be available when you reboot the machine.
ENJOY!!!