Connecting to mimi desktop for GUI applications using VNC

TurboVNC can provide access to a full desktop on mimi.uio.no from Windows, Linux and Mac clients. Useful when running 3D applications.

Image may contain: Rectangle, Font, Signage, Brand, Logo.

What is TurboVNC?

From TurboVNC | About / A Brief Introduction to TurboVNC :

TurboVNC is a derivative of VNC (Virtual Network Computing) that is tuned to provide peak performance for 3D and video workloads.

Getting started

Installing the client

Download and install the client matching your client operating system

TurboVNC - Browse Files on Github

If you want to add the yum repo on your RHEL:

TurboVNC | Downloads / TurboVNC YUM Repository

Defining a session

On the client, connect to mimi.uio.no using ssh.

Tip: To make ssh connections easier, you can set yourself up with ssh keys.

ssh username@mimi.uio.no 

Load the TurboVNC module and start a vnc session and note the display port number:

$ module load TurboVNC/3.0.1-GCCcore-11.3.0
$ vncserver 

Desktop 'TurboVNC: mimi.uio.no:2 (kjetba)' started on display mimi.uio.no:2

The vncserver session are now running and you can log out. It has been assigned with display port number 2, this corresponds with the port number 5902 to connect to the server. (Display port 3 -> port number 5903, display port 4 -> port number 5904, etc..)

This vnc session will be open and can be reconnected to at any time.
You can list and terminate your vnc sessions with these commands:
$ vncserver -list

TurboVNC sessions:
X DISPLAY #     PROCESS ID      NOVNC PROCESS ID
:2              287018

$ /opt/TurboVNC/bin/vncserver -kill :2

 

Open a ssh tunnel to the server

Now, to encrypt the connection we need to set up a ssh tunnel from your client to the server:

ssh -L 6000:localhost:5902 username@mimi.uio.no 

This ssh connected has to be open while you are connected with vnc. You can terminate your ssh tunnel at any time and stil reconnect at a later time as long as the vnc session is running. 

Connect with the TurboVNC client

Connect to localhost:6000

Image may contain: Rectangle, Font, Screenshot, Parallel, Number.

Enjoy your GNOME Desktop experience. 

Do you want to use the NVIDIA GPU for 3D graphics?

Normally OpenGL will use Mesa for rendering:

[kjetba@mimi ~]$ glxinfo -B
name of display: :7
display: :7  screen: 0
direct rendering: Yes
Extended renderer info (GLX_MESA_query_renderer):
    Vendor: Mesa/X.org (0xffffffff)
    Device: llvmpipe (LLVM 14.0.3, 256 bits) (0xffffffff)
    Version: 22.0.3
    Accelerated: no
    Video memory: 1031088MB
    Unified memory: no
    Preferred profile: core (0x1)
    Max core profile version: 4.5
    Max compat profile version: 4.5
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.2
OpenGL vendor string: Mesa/X.org
OpenGL renderer string: llvmpipe (LLVM 14.0.3, 256 bits)
OpenGL core profile version string: 4.5 (Core Profile) Mesa 22.0.3
OpenGL core profile shading language version string: 4.50
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile

OpenGL version string: 4.5 (Compatibility Profile) Mesa 22.0.3
OpenGL shading language version string: 4.50
OpenGL context flags: (none)
OpenGL profile mask: compatibility profile

OpenGL ES profile version string: OpenGL ES 3.2 Mesa 22.0.3
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20

To change this to NVIDIA, open a terminal and define these two variables:

export __NV_PRIME_RENDER_OFFLOAD=1
export __GLX_VENDOR_LIBRARY_NAME=nvidia

The first variable will tell the system to offload the rendering to the discrete card, the second variable will force applications to use the NVIDIA's GLX stuff.

Now we see NVIDIA being the preferred vendor:

[kjetba@mimi ~]$ glxinfo -B
name of display: :7
display: :7  screen: 0
direct rendering: Yes
Memory info (GL_NVX_gpu_memory_info):
    Dedicated video memory: 23040 MB
    Total available memory: 23040 MB
    Currently available dedicated video memory: 22508 MB
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: Quadro RTX 6000/PCIe/SSE2
OpenGL core profile version string: 4.6.0 NVIDIA 530.30.02
OpenGL core profile shading language version string: 4.60 NVIDIA
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile

OpenGL version string: 4.6.0 NVIDIA 530.30.02
OpenGL shading language version string: 4.60 NVIDIA
OpenGL context flags: (none)
OpenGL profile mask: (none)

OpenGL ES profile version string: OpenGL ES 3.2 NVIDIA 530.30.02
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20

Now start your 3D application in the same terminal session

[kjetba@mimi ~]$ module load ParaView/5.11.1-foss-2022a-mpi 
[kjetba@mimi ~]$ paraview

In nvtop you now can see the process running graphics

[kjetba@mimi ~]$ nvtop
 Device 0 [Quadro RTX 6000] PCIe GEN 3@16x RX: 0.000 KiB/s TX: 0.000 KiB/s
 GPU 1275MHz MEM 6500MHz TEMP  37°C FAN N/A% POW  56 / 250 W
 GPU[                             0%] MEM[|              0.614Gi/22.500Gi]
   ┌────────────────────────────────────────────────────────────────────────────────────────────┐
100│GPU0 %                                                                                      │
   │GPU0 mem%                                                                                   │
   │                                                                                            │
   │                                                                                            │
   │                                                                                            │
 75│                                                                                            │
   │                                                                                            │
   │                                                                                            │
   │                                                                                            │
   │                                                                                            │
 50│                                                                                            │
   │                                                                                            │
   │                                                                                            │
   │                                                                                            │
   │                                                                                            │
 25│                                                                                            │
   │                                                                                            │
   │                                              ┌───┐ ┌─────┐               ┌─┐               │
   │                                              │   └─┘     └───────────────┘ └───────┐       │
   │                                              │                                     │       │
  0│──────────────────────────────────────────────┴─────────────────────────────────────┴───────│
   └46s───────────────────34s────────────────────23s────────────────────11s───────────────────0s┘
    PID   USER DEV     TYPE  GPU        GPU MEM    CPU  HOST MEM Command
3726478 kjetba    0  Compute   0%    162MiB   1%     0%    184MiB python
3042994 kjetba   0  Graphic   0%     99MiB   0%     0%    524MiB /opt/software/custom/software/Open
Tags: Nvidia GPUs, gpu, 3D, nvidia, Linux, vnc, desktop By Kjetil Bakke
Published Mar. 22, 2023 12:19 PM - Last modified Feb. 7, 2024 1:39 PM