Install the VNC Remote Access Server on Oracle Linux

Introduction

This tutorial shows you how to install and set up the VNC remote access server software on an Oracle Linux system to enable you to remotely operate a graphical desktop environment.

Background

Virtual Network Computing (VNC) is a graphical desktop sharing system that controls remote machines by sending keyboard and mouse events over the network. VNC is particularly useful for remotely controlling Oracle Linux servers that have a graphical desktop environment installed.

You can connect to a VNC server by using any compatible software client. VNC is suitable for thin client computing where multiple dumb terminals can share the same hardware resources that are hosted on an Oracle Linux server.

This tutorial uses TigerVNC to illustrate how to remotely connect to systems. However, you can use a different VNC software of your choice. Some alternative software is listed at the end of the tutorial.

TigerVNC Server was rebased from 1.9.0 to 1.10.1 in Oracle Linux 8 Update 3. This newer version is configured differently to previous versions and no longer requires the creation of systemd unit files. The instructions provided here assume that you are using the latest version.

Objectives

In this tutorial, you’ll learn to:

Prerequisite

Install a Graphical Desktop Environment

Install a GNOME desktop environment and all of its dependencies.

sudo dnf group install "Server with GUI"

Set graphical mode as the default login type for user accounts, then reboot the server.

sudo systemctl set-default graphical
sudo reboot

Uncomment the WaylandEnable=false line in the /etc/gdm/custom.conf file to ensure that VNC uses X.org instead of Wayland.

sudo sed '/^#WaylandEnable/s/^#//g' /etc/gdm/custom.conf

Install the VNC Packages

Install the VNC server package and all of its dependencies.

sudo dnf install -y tigervnc-server tigervnc-server-module

Set the VNC Password

Create a VNC password for the user account that you intend to use for remote sessions.

vncpasswd

The command prompts you for a password and then prompts you again to validate the password. Optionally you are able to set a view-only password that allows you to share the screen but not allow control over the mouse or keyboard.

This action generates configuration information specific to the user account in $HOME/.vnc/. If this directory already exists from a previous installation, you can either remove the directory prior to running the vncpasswd command; or you can restore the SELinux context on the directory to ensure that you do not have any issues with SELinux for this service. For example:

restorecon -RFv $HOME/.vnc

Configure the VNC Service

Append the user account and the X Server display for the VNC service to /etc/tigervnc/vncserver.users file.

echo ":1=$(whoami)"| sudo tee -a /etc/tigervnc/vncserver.users > /dev/null

Also append the default desktop and screen resolution to the /etc/tigervnc/vncserver-config-defaults file.

printf 'session=gnome\ngeometry=1280x1024' | sudo tee -a /etc/tigervnc/vncserver-config-defaults > /dev/null

Set Up the VNC Service

Reload the systemd service, then enable and start the VNC server by using X Server display 1.

sudo systemctl daemon-reload
sudo systemctl enable --now vncserver@:1.service

(Optional) Configure X509 Encryption

By default, VNC is not an encrypted protocol and you should use an SSH tunnel to access it across an unprotected network. You can configure X509 TLS to encrypt your VNC session, however this requires that your client software supports X509Vnc encryption and has access to the CA certificate used to sign your certificates.

If you do not have a CA signed certificate, you can use self-signed certificates, but your client system must have a copy of the public certificate to be able to connect.

  1. Create a self-signed certificate.

    openssl req -new -x509 -days 30 -nodes -newkey rsa:2048 -keyout ~/.vnc/private.key \
    -out ~/.vnc/public.cert -subj "/C=US/ST=Ca/L=Sunnydale/CN=$(hostname -f)"
    
    
  2. Edit the user’s custom VNC configuration options in ` ~/.vnc/config`.

    If the file does not exist yet, you may need to create it yourself. Update the configuration to enable x509Vnc encryption and to provide the full path to the X509 key file and that x509 certificate file.

    cat << EOF | tee -a ~/.vnc/config > /dev/null
    securitytypes=x509Vnc
    X509Key=/home/$(whoami)/.vnc/private.key
    X509Cert=/home/$(whoami)/.vnc/public.cert
    EOF
    
    

    Note: You must provide the full path to the key and certificate files. You cannot depend on shell expansion or use variables for this purpose. The expansion in the bash script above is possible as it expands the $(whoami) command at the time of writting the lines to the ~/.vnc/config file.

  3. When you have finished editing the configuration, you can restart the service.

    sudo systemctl restart vncserver@:1.service
    

(Optional) Configure the Firewall Rules

If you are using X509 encryption and you are running a custom firewall profile or an Oracle Cloud Infrastructure instance, you can open the firewall port for the VNC service (5901) on your firewall or in your security lists for your network.

If you are using X509 encryption and the firewalld service is running on the host, you can add access for the VNC service. Then, reload the default firewall service.

sudo firewall-cmd --zone=public --add-service=vnc-server --permanent
sudo firewall-cmd --reload

Note: VNC is not an encrypted protocol and you should not open the firewall to this port and connect directly to a VNC server over an unprotected network. Although we list this step as optional, it is not generally advised and you should consider using SSH tunneling or some other mechanism to protect the connection.

Open a VNC Client and Test Your Deployment

If your client is running Oracle Linux, you can install the TigerVNC software client.

sudo dnf install -y tigervnc

On the client machine, use the VNC software to connect to the remote Oracle Linux server domain or IP address. Make sure to specify the correct port. The default VNC port is 5900, but that number is incremented according to the configured display number. Thus, display 1 corresponds to 5901, display 2 to 5902, and so on.

Note that if you enabled X509 encryption, you may need to provide the CA certificate used to sign your keys, or if you used a self-signed certificate you can use the public certificate as the CA certificate. Some clients may be willing to allow you to simply accept a self-signed certificate automatically.

If you encounter connectivity problems, troubleshoot these issues by connecting to the remote server over an SSH connection that has been configured for an SSH tunnel.

ssh -L 5901:localhost:5901 user@server1.example.com

Then, use the tigervnc client to connect to the local host.

vncviewer localhost:5901

You may need to perform additional steps if you want to connect to an Oracle Cloud Infrastructure instance. For more information, see Connecting to an Instance in the Oracle Cloud Infrastructure documentation.

If you are trying to connect to a virtual machine hosted by Oracle VM VirtualBox, then you need to configure additional port forwarding for remote access. You can find instructions for how to configure virtual networks in the user manual for your installed version of Oracle VM VirtualBox.

For More Information

See other related resources:

The basic steps included in this tutorial are available in the shell script at ol-vnc-setup.sh

More Learning Resources

Explore other labs on docs.oracle.com/learn or access more free learning content on the Oracle Learning YouTube channel. Additionally, visit education.oracle.com/learning-explorer to become an Oracle Learning Explorer.

For product documentation, visit Oracle Help Center.