VNC

From Alliance Doc
Jump to navigation Jump to search
This page is a translated version of the page VNC and the translation is 91% complete.
Outdated translations are marked like this.
Other languages:
MATLAB exécuté dans VNC

Pour certains paquets complexes (par exemple MATLAB), il est parfois utile de démarrer à distance l'interface utilisateur graphique. Pour ce faire, on utilise généralement SSH avec redirection X11, mais la performance est souvent trop lente, tout comme avec MobaXTerm ou Putty. Une meilleure option est d'utiliser VNC pour se connecter à un ordinateur à distance.

Configuration

Pour vous connecter au serveur VNC, vous devez d'abord installer un client VNC sur votre ordinateur. Nous recommandons le paquet TigerVNC disponible pour Windows et macOS et pour la plupart des distributions Linux (voir ci-dessous). Nous abordons ici le téléchargement, l'installation et la configuration de TigerVNC de manière sécuritaire pour chaque système d'exploitation. Les étapes de configuration de certificat ne sont requises que pour se connecter aux nœuds VDI afin que l'autorité de signature présentée par le vncserver soit connue. Si un message est affiché rapportant un problème avec un certificat, soit qu'il n'est pas configuré correctement, soit que vous n'êtes pas connecté à notre serveur; n'entrez pas votre mot de passe.

Windows

Téléchargez et exécutez la plus récente version stable de l'installateur vncviewer64-x.y.z.exe à partir de la page officielle, par exemple vncviewer64-1.12.0.exe. Vérifiez que vous avez bien téléchargé VNC Viewer et non le serveur. Pour créer des tunnels sécuritaires entre votre ordinateur et le vncserver comme décrit ci-dessous, vous devez ouvrir une fenêtre de terminal et faire exécuter la commande SSH, ce qui peut être fait avec le standard PowerShell de Windows 10, à partir de la mise à jour 1809.

macOS

Installez le plus récent paquet DMG stable à partir de la page officielle de téléchargement et cliquez sur le bouton vert Download Latest Version pour TigerVNC-1.12.90.dmg (en date de janvier 2023). Quand le fichier DMG est téléchargé, faites un double-clic dessus pour l'ouvrir. Une fenêtre contextuelle est affichée avec l'icône de TigerVNC Viewer ainsi que les fichiers LICENSE.TXT et README.rst. Glissez l'icône tigervnc dans le dossier Applications et/ou dans le Dock. Pour supprimer la fenêtre contextuelle, vous devez démonter le fichier DMG. Pour ce faire, ouvrez une nouvelle fenêtre de Finder; assurez-vous que View->ShowSidebar est sélectionné; dans le menu de gauche, cliquez sur la petite flèche vers le haut près de TigerVNC-1.12.90; et fermez la fenêtre de Finder. Avec macOS Monterey 12.2, si TigerVNC plante, utilisez plutôt la dernière version.

Linux

Installez TigerVNC Viewer pour votre version de Linux :

Version Commande
Debian, Ubuntu sudo apt-get install tigervnc-viewer
Fedora, CentOS, or RHEL sudo yum install tigervnc
Gentoo emerge -av net-misc/tigervnc

Lancez TigerVNC par le menu des applications ou en entrant vncviewer en ligne de commande. Dans la fenêtre VNC Viewer: Connection Details, cliquez sur Options -> Security et cochez toutes les cases sauf Excryption None. Entrez le chemin approprié dans le champ Path to X509 CA Certificate.

Version Path to X509 CA Certificate
Debian, Ubuntu /etc/ssl/certs/ca-certificates.crt
Fedora, CentOS, or RHEL /etc/pki/tls/certs/ca-bundle.crt
Gentoo /etc/ssl/certs/ca-certificates.crt

Cliquez sur OK, puis sur Connect; les paramètres ne sont pas sauvegardés si vous ne cliquez pas sur Connect.

Connexion

Vous avez maintenant besoin d'un serveur VNC auquel vous connecter. Il peut s'agir d'un vncserver persistant sur un nœud VDI dédié de Graham ou d'un vncserver que vous démarrez sur un nœud de calcul. Comme VNC n'est pas un serveur pour des tâches lourdes, vous pouvez certainement ouvrir une session légère sur un nœud de connexion.

Nœuds VDI

gra-vdi.alliancecan.ca

Sur Graham se trouvent des nœuds de connexion VDI dédiés connus sous le nom de gra-vdi; ils offrent une interface graphique, OpenGL accéléré et l'accès partagé aux systèmes de fichiers /home, /project et /scratch.

Pour vous connecter à gra-vdi, démarrez VNC (tigervnc) sur votre ordinateur et entrez code>VNC server: gra-vdi.alliancecan.ca. Un écran de connexion sera affiché où vous pourrez entrer vos identifiants pour votre compte avec l'Alliance. Une session sur gra-vdi3 ou gra-vdi4 peut alors être lancée alétoirement sur votre bureau.

Users can also connect directly to either machine by specifying VNC server: gra-vdi3.sharcnet.ca or enter VNC server: gra-vdi4.sharcnet.ca. This may be useful if you find one machine is overloaded (oversubscribed) and thus not very responsive. Or if you consistently want to use the local $SCRATCH directory (defined as /local/tmp/$USER) on one server but not the other. Notice that $SCRATCH is defined differently on the clusters (as /scratch/$USER) where it is shared by all nodes. Similar to the clusters however, any data left on $SCRATCH on gra-vdi will eventually be deleted since the disc space is limited. Please do not plan to store any files on $SCRATCH for more than 60 days!

Comme c'est le cas pour les nœuds réguliers, les nœuds VDI sont des ressources partagées dont le rôle n'est pas d'exécuter des calculs en lots; ceci est le rôle des nœuds de calcul. Nous vous demandons donc de n'utiliser les nœuds VDI que pour les tâches graphiques, par exemple le prétraitement graphique comme la génération de maillage (mesh) et le post-traitement graphique comme la visualisation et les environnements de développement intégrant des graphiques.

Nœuds de connexion

Pour utiliser sur votre ordinateur à distance une application peu exigeante qui requiert peu de mémoire, de temps CPU ou de GPU, vous pouvez démarrer un serveur VNC sur un nœud de connexion et vous y connecter ainsi :

[laptop:~] ssh graham.alliancecan.ca

1) Définissez à une heure (3600 sec) le temps limite pour le serveur.

[gra-login2:~] vncserver -idletimeout 604800 [-alwaysshared]
Would you like to enter a view-only password (y/n)? n
Desktop 'TurboVNC: gra-login2:2 (username)' started on display gra-login2:2
Starting applications specified in /cvmfs/soft.computecanada.ca/gentoo/2023/x86-64-v3/usr/bin/xstartup.turbovnc
Log file is /home/username/.vnc/gra-login2:2.log

2) Déterminez quel est le port qui écoute (dans cet exemple, il s'agit de 5903) :

[gra-login2:~]  grep -iE "\sport|kill" /home/username/.vnc/gra-login2:2.log
03/09/2024 17:48:40 Listening for VNC connections on TCP port 5903
[gra-login2:~] exit

2) Ouvrez une fenêtre de terminal sur votre ordinateur et démarrez un tunnel SSH vers le serveur VNC.

 [laptop:~] ssh graham.computecanada.ca -L 5901:gra-login2:5903

3) Ouvrez une autre fenêtre de terminal sur votre ordinateur et connectez-vous avec vncviewer :

 [laptop:~] vncviewer localhost:5901

Sous macOS ou Windows, cliquez sur l'icône de l'application TigerVNC Viewer qui se trouve sur votre ordinateur et entrez l'information sur le localhost:port dans la boîte de dialogue affichée. Tenez compte des limites imposées sur les nœuds de connexion en termes d'utilisation de la mémoire et du temps de CPU; sur Graham ces limites sont de 8Go de mémoire et de 1 heure d'utilisation de CPU par processus, selon ulimit -t -v. Si vous avez besoin de plus de ressources, utilisez des nœuds de calcul ou des nœuds VDI comme décrit dans la présente page.

Nœuds de calcul

Si aucun nœud VDI n'est disponible, vous pouvez démarrer un serveur VNC dans un nœud de calcul puis vous y connecter à partir de votre ordinateur par redirection de port. Vous obtenez ainsi un accès dédié au serveur sans toutefois bénéficier de toutes les fonctionnalités graphiques ou de OpenGL accéléré.

1) Démarrer un serveur VNC

Avant de démarrer votre serveur VNC, connectez-vous à une grappe (par exemple, Cedar) et créez une allocation sur un nœud de connexion avec la commande salloc (limite de 24 heures). Par exemple, pour demander une tâche interactive qui utilise 4 CPU et 16Go de mémoire, vous pourriez utiliser

[username@cedar5:~/project] salloc --time=1:00:00 --cpus-per-task=4 --mem=16000 --account=def-username
salloc: Pending job allocation 20067316
salloc: job 20067316 queued and waiting for resources
salloc: job 20067316 has been allocated resources
salloc: Granted job allocation 20067316
salloc: Waiting for resource configuration
salloc: Nodes cdr768 are ready for job
[username@cdr768:~/project]

Une fois la tâche interactive démarrée, il faut définir une variable d'environnement pour éviter certaines erreurs répétitives.

[username@cdr768:~/project] export XDG_RUNTIME_DIR=${SLURM_TMPDIR}

Ensuite, démarrez un serveur VNC avec vncserver. Portez attention au nœud dans lequel la tâche est exécutée; en cas de doute, utilisez la commande hostname pour vérifier de quel nœud il s'agit. Si vous faites ceci pour la première fois, une invite demandera un mot de passe pour votre serveur VNC. VOUS DEVEZ ENTRER UN MOT DE PASSE que vous pourrez changer par la suite avec la commande vncpasswd. Revenons à l'exemple :

[username@cdr768:~/project] vncserver
You will require a password to access your desktops.
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
xauth:  file /home/username/.Xauthority does not exist
New 'cdr768.int.cedar.computecanada.ca:1 (username)' desktop is cdr768.int.cedar.computecanada.ca: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/cdr768.int.cedar.computecanada.ca:1.log

Identifiez le port utilisé par le serveur VNC en consultant le fichier journal.

[username@cdr768:~/project] grep -iE "\sport|kill" /home/username/.vnc/cdr768.int.cedar.computecanada.ca:1.log
 vncext:      Listening for VNC connections on all interface(s), port 5901

2) Établissez un tunnel SSH vers le serveur VNC

Une fois le serveur VNC démarré, il faut créer un pont pour que votre ordinateur puisse se connecter directement au nœud de calcul. Cette connexion se fait par un tunnel SSH. Les tunnels sont créés sur votre ordinateur avec la commande SSH usuelle à laquelle une option est ajoutée; la commande est au format ssh user@host -L port:compute_node:port.

Voici un exemple d'une commande de tunnel SSH exécutée sur un ordinateur pour établir une connexion avec un serveur VNC situé sur le nœud cdr768 de Graham avec le port 5901 :

[name@local_computer]$ ssh username@cedar.computecanada.ca -L 5902:cdr768:5901

Le tunnel SSH fonctionne comme une session SSH normale et il peut servir entre autres à lancer des commandes. Souvenez-vous cependant que cette session SSH est aussi votre connexion au serveur VNC; si vous terminez la session SSH, vous perdrez votre connexion au serveur VNC. Pour plus d'information, consultez la page Tunnels SSH.

3) Connectez-vous au serveur VNC.

Sous Linux, ouvrez une nouvelle fenêtre de terminal et connectez votre client VNC à localhost:port. Dans le prochain exemple, la commande vncviewer de TigerVNC établit la connexion au serveur VNC actif sur cdr768. Vous devrez entrer le mot de passe que vous avez défini précédemment.


Question.png
[name@local_computer]$ vncviewer localhost:5902
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 5902
 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

Sous macOS ou Windows, cliquez sur l'icône de l'application TigerVNC Viewer et entrez l'information sur le localhost:port. Dans le cas de notre exemple, nous avons ainsi thumbMac Tiger VNC Viewer Connection Details Dialogue Box


Le numéro du port (ici 5902) doit correspondre au port local (le premier nombre) que vous avez défini à la création du tunnel SSH. Le port VNC par défaut est le 5900. Si vous avez défini 5900 comme étant le port local pour le tunnel SSH, vous pourriez l'omettre quand vous invoquez vncviewer. Cependant, il peut être impossible sous Windows de définir un tunnel SSH avec le port local 5900. Une fois la connexion établie, le bureau Linux MATE sera affiché.

Pour lancer un terminal, cliquez sur Applications->System Tools->MATE Terminal dans le menu du haut. Vous pouvez ajouter un raccourci au menu du haut en faisant un clic droit sur MATE Terminal puis en cliquant sur Add this launcher to panel. Enfin, pour démarrer un programme, lancez la commande comme vous le feriez dans une session bash, par exemple avec xclock. Pour les programmes plus complexes comme MATLAB, chargez le module et lancez la commande matlab.

Autres points importants

Mot de passe

Pour réinitialiser votre mot de passe, utilisez la commande

[gra-login1:~] vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n

Vous pouvez choisir de supprimer définitivement votre configuration VNC incluant votre mot de passe en supprimant votre répertoire ~/.vnc. La prochaine fois que vous lancerez vncserver, une invite vous demandera de définir un nouveau mot de passe.

Tuer le vncserver

Si un vncserver n'est plus nécessaire, tuez-le ainsi :

[gra-login1:~] vncserver -list

TigerVNC server sessions:

X DISPLAY#	  PROCESS ID
:44		      27644

[gra-login1:~] vncserver -kill :44
Killing Xvnc process ID 27644

Pour tuer tous les serveurs en fonction sur un nœud, utilisez pkill Xvnc -u $USER.

Connexions multiples

Pour lister les serveurs VNC en fonction sous votre nom d'utilisateur, utilisez la commande vncserver -list. Pour vous reconnecter à un vncserver particulier sur un nœud de connexion 1) établissez à nouveau un tunnel 2) lancez à nouveau vncserver -list. Il est possible d'établir plusieurs connexions à distance à un bureau vcnserver existant, par exemple pour établir une deuxième connexion à partir de votre ordinateur à la maison en conservant la connexion initiale de votre ordinateur au bureau. Pour ce faire, la connexion initiale doit être établie avec l'option vncserver -AlwaysShared, autrement les connexions qui suivront fermeront par défaut la connexion initiale.

Échecs de connexion

Des échecs répétés à établir une nouvelle connexion vncserver/vncviewer pourraient être causés par un tunnel SSH existant sur votre ordinateur qui bloquerait les ports. Pour déterminer la présence de tels tunnels et les tuer, ouvrez une fenêtre de terminal sur votre ordinateur et lancez la commande ps ux | grep ssh suivie de kill PID.

Déverrouiller l'écran de veille

Si votre écran de veille VNC s'éteint en raison du délai d'affichage et qu'un mot de passe vous est demandé, entrez le mot de passe de votre compte sur la grappe et non le mot de passe vncserver. Si le bureau MATE est en cours d'exécution et que l'écran de veille ne se déverrouille pas, essayez avec la commande killall -9 .mate-screensaver. Ceci ne devrait plus se produire car l'écran de veille VNC a été désactivé sur nos grappes.

Logiciels

Les nœuds VDI permettent les connexions directes avec vncviewer ainsi que l'accélération graphique avec OpenGL pour les applications qui sont configurées en conséquence. Dans l'environnement SnEnv, les nœuds VDI ont aussi une couche de modules logiciels locaux en plus, semblables aux environnements StdEnv de toutes nos grappes.

Sur les nœuds de connexion réguliers, un environnement logiciel standard et certains modules par défaut sont chargés automatiquement quand vous vous connectez, ce qui n'est pas le cas avec un nœud vdi et vous verrez

Question.png
[name@gra-vdi4]$ module list
No modules loaded

Donc, avant d'utiliser un logiciel graphique sur gra-vdi, chargez un des environnements suivants :

StdEnv

Most users will find it sufficient to load the StdEnv module on gra-vdi. Doing so will provide access to the same software modules that are loaded by default on the clusters:

[name@gra-vdi4]$ module load CcEnv StdEnv/2023
[name@gra-vdi4]$ module avail


SnEnv

Dans certains cas plutôt rares, vous devrez charger un ou des modules installés localement sur gra-vdi. Pour ce faire, il faut d'abord charger SnEnv avec

[name@gra-vdi4]$ module load SnEnv
[name@gra-vdi4]$ module avail


NIX

Plutôt que de charger SnEnv ou StEnv, vous pouvez aussi charger le module nix qui offre des logiciels libres optimisés pour l'utilisation de OpenGL accéléré, lorsque possible. Ce module est seulement disponible sur Graham et gra-vdi et peut être chargé avec

[name@gra-vdi4]$ module load nix


Les commandes nix et nix-env seront alors dans votre chemin pour gérer les paquets logiciels via nix dans votre environnement personnel nix.

Installation

Pour installer un paquet nix dans votre environnement, cliquez sur l'icône du terminal dans la barre de menus supérieure ou sélectionnez Applications -> System Tools -> Terminal. Vous pouvez maintenant chercher des programmes avec la commande nix search <regexp> et les installer avec nix-env --install --attr <attribute>. Par exemple, pour installer QGIS, utilisez

[name@gra-vdi4]$ nix search qgis
[name@gra-vdi4]$ nix-env --install --attr nixpkgs.qgis


Votre environnement nix persiste entre vos connexions; vous n'avez donc qu'à lancer une fois la commande d'installation.

[name@gra-vdi4]$ module load nix
[name@gra-vdi4]$ qgis


Avec cette commande, les logiciels installés aujourd'hui seront encore disponibles la prochaine fois que vous chargez le module nix.

Applications OpenGL

Pour qu'OpenGL accéléré fonctionne, il faut ajuster les binaires compilés pour précharger une version appropriée de la bibliothèque vglfaker.so à partir de VirtualGL. Ceci a déjà été fait pour les modules logiciels disponibles sur gra-vdi et tous les paquets utilisant OpenGL que vous développez et installez via nix. Il faut toutefois faire ces ajustements pour les logiciels prédéveloppés que vous téléchargez et les programmes que vous compilez sans utiliser nix.

[name@gra-vdi4]$ module load nix
[name@gra-vdi4]$ patchelf --add-needed /usr/lib64/VirtualGL/libvglfaker.so ~/.local/bin/myglapp


Il est aussi possible de précharger vglfaker.so via la variable d'environnement LD_PRELOAD, ce qui n'est généralement pas une bonne idée car ceci s'applique à tous les binaires sans exception. Ceux qui requièrent un vglfaker.so différent de celui défini dans LD_PRELOAD vont donc échouer. Dans certains cas cependant, ceci peut être utilisé de façon sécuritaire dans des scripts encapsuleurs (wrapper scripts).