VNC
Frequently, it may be useful to start up graphical user interfaces for various software packages like Matlab. Doing so over X-forwarding can result in a very slow connection to the server, one useful alternative to X-forwarding is using VNC to start and connect to a remote desktop.
Starting a VNC server
The VNC server process is what provides the remote desktop. Before starting your VNC server, you will need a node on which to run it. The easiest way to do so is typically in the framework of an interactive job using salloc
. As an example, to request an interactive job using 4 cpus and 16GB of memory, you would use the command:
[name@server ~]$ salloc -c 4 --mem 16g
Once your interactive job has started, you can start a VNC server with vncserver
. You should take note of which node your job is running on, as well as which port (typically 5901). If unsure, you can use the hostname
command to check which host your job is running on. You will be prompted to set a password for your VNC server - DO NOT LEAVE THIS BLANK.
Command with sample output:
[name@server ~]$ vncserver
You will require a password to access your desktops.
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
New 'gra796:1 (username)' desktop is gra796:1
Creating default startup script /home/username/.vnc/xstartup
Creating default config /home/username/.vnc/config
Starting applications specified in /home/username/.vnc/xstartup
Log file is /home/username/.vnc/gra796:1.log
You will likely want to cat
the log file to determine which port the VNC server is using, in this case, the key line to find is the following:
vncext: Listening for VNC connections on all interface(s), port 5901
Setting up an SSH tunnel to the server
Now that your VNC server has been started, you will need to create a "bridge" to allow your local desktop computer to connect to the compute node directly. This bridge connection is created using an SSH tunnel. SSH tunnels are created using the same SSH connection command as usual, with an extra option added - this follows the format: ssh user@host -L port:compute_node:port
.
An example SSH tunnel command to connect to a VNC server running on Graham's gra796 node and port 5901 would be the following:
ssh username@graham.computecanada.ca -L 5901:gra796:5901
The SSH tunnel will operate like a normal SSH connection- you may run commands over it, etc. However, keep in mind that this is your connection to the VNC server. If you terminate the SSH tunnel, your connection to the VNC server will be lost! For more detailed information on SSH tunneling, please see SSH_tunnelling.
Connecting to the VNC server
To connect to the VNC server, you will need to install a VNC viewer such as TigerVNC. The following example uses TigerVNC's vncviewer
to connect to the running VNC server on gra796. You will be prompted for your password that you set earlier before you can connect.
Command with sample output:
[name@local_computer]$ vncviewer localhost:5901
TigerVNC Viewer 64-bit v1.8.0
Built on: 2018-06-13 10:56
Copyright (C) 1999-2017 TigerVNC Team and many others (see README.txt)
See http://www.tigervnc.org for information on TigerVNC.
Tue Jul 10 17:40:24 2018
DecodeManager: Detected 8 CPU core(s)
DecodeManager: Creating 4 decoder thread(s)
CConn: connected to host localhost port 5901
CConnection: Server supports RFB protocol version 3.8
CConnection: Using RFB protocol version 3.8
CConnection: Choosing security type VeNCrypt(19)
CVeNCrypt: Choosing security type TLSVnc (258)
Tue Jul 10 17:40:27 2018
CConn: Using pixel format depth 24 (32bpp) little-endian rgb888
CConn: Using Tight encoding
CConn: Enabling continuous updates
Once connected, you will be presented with an Xterm window and a blank desktop. To launch a program, simply invoke the command as you would normally within the Xterm window. xclock
will start a sample clock application you can use to test things out. To start a more complicated program (for instance, Matlab), you would load the module and launch the program via the following:
[name@server ~]$ module load matlab
[name@server ~]$ matlab
Resetting your VNC server password
If you forget your VNC password or otherwise want to delete your VNC configs and start over with a clean slate, you can delete your ~/.vnc
directory. The next time you run vncserver
, you will be prompted to set a new password.