Comment installer et configurer VNC sur Ubuntu 22.04

Introduction

Virtual Network Computing, ou VNC, est un système de connexion qui vous permet d’utiliser votre clavier et votre souris pour interagir avec un environnement de bureau graphique sur un serveur distant. Cela facilite la gestion des fichiers, des logiciels et des paramètres sur un serveur distant pour les utilisateurs qui ne sont pas encore à l’aise avec la ligne de commande.

Dans ce guide, vous configurerez un serveur VNC avec TightVNC sur un serveur Ubuntu 22.04 et vous y connecterez de manière sécurisée via un tunnel SSH. Ensuite, vous utiliserez un programme client VNC sur votre machine locale pour interagir avec votre serveur via un environnement de bureau graphique.

Prérequis

Pour suivre ce tutoriel, vous aurez besoin de :

  • Un serveur Ubuntu 22.04 avec un utilisateur administratif non root et un pare-feu configuré avec UFW. Pour configurer cela, suivez notre guide de configuration initiale du serveur pour Ubuntu 22.04.
  • A local computer with a VNC client installed. The VNC client you use must support connections over SSH tunnels:
    • Sous Windows, vous pouvez utiliser TightVNC, RealVNC ou UltraVNC.
    • Sur macOS, vous pouvez utiliser le programme intégré Partage d’écran, ou pouvez utiliser une application multiplateforme comme RealVNC.
    • Sur Linux, vous pouvez choisir parmi de nombreuses options, y compris vinagre, krdc, RealVNC, ou TightVNC.

Étape 1 — Installation de l’environnement de bureau et du serveur VNC

Par défaut, un serveur Ubuntu 22.04 n’est pas livré avec un environnement de bureau graphique ou un serveur VNC installé, vous commencerez donc par installer ceux-ci.

Vous avez de nombreuses options en ce qui concerne le choix du serveur VNC et de l’environnement de bureau. Dans ce tutoriel, vous installerez des packages pour la dernière version de l’environnement de bureau Xfce et le package TightVNC disponible dans le référentiel officiel d’Ubuntu. Xfce et TightVNC sont tous deux connus pour être légers et rapides, ce qui garantira que la connexion VNC sera fluide et stable même sur des connexions Internet plus lentes.

Après vous être connecté à votre serveur avec SSH, mettez à jour votre liste de packages :

  1. sudo apt update

Maintenant, installez Xfce ainsi que le package xfce4-goodies, qui contient quelques améliorations pour l’environnement de bureau :

  1. sudo apt install xfce4 xfce4-goodies

Pendant l’installation, il se peut que vous soyez invité à choisir un gestionnaire d’affichage par défaut pour Xfce. Un gestionnaire d’affichage est un programme qui vous permet de sélectionner et de vous connecter à un environnement de bureau via une interface graphique. Vous n’utiliserez Xfce que lorsque vous vous connecterez avec un client VNC, et dans ces sessions Xfce, vous serez déjà connecté en tant qu’utilisateur non root d’Ubuntu. Donc, pour les besoins de ce tutoriel, le choix du gestionnaire d’affichage n’est pas pertinent. Sélectionnez n’importe lequel et appuyez sur ENTRÉE.

Une fois cette installation terminée, installez le serveur TightVNC :

  1. sudo apt install tightvncserver

Ensuite, exécutez la commande vncserver pour définir un mot de passe d’accès VNC, créer les fichiers de configuration initiaux et démarrer une instance de serveur VNC :

  1. vncserver

Vous serez invité à entrer et à vérifier un mot de passe pour accéder à votre machine à distance :

Output
You will require a password to access your desktops. Password: Verify:

Le mot de passe doit comporter entre six et huit caractères. Les mots de passe de plus de 8 caractères seront automatiquement tronqués.

Une fois le mot de passe vérifié, vous aurez la possibilité de créer un mot de passe en lecture seule. Les utilisateurs qui se connectent avec le mot de passe en lecture seule ne pourront pas contrôler l’instance VNC avec leur souris ou leur clavier. Il s’agit d’une option utile si vous souhaitez montrer quelque chose à d’autres personnes en utilisant votre serveur VNC, mais ce n’est pas obligatoire.

Le processus crée ensuite les fichiers de configuration par défaut nécessaires et les informations de connexion pour le serveur. De plus, il lance une instance de serveur par défaut sur le port 5901. Ce port est appelé un port d’affichage, et est référencé par VNC comme :1. VNC peut lancer plusieurs instances sur d’autres ports d’affichage, avec :2 faisant référence au port 5902, :3 faisant référence à 5903, et ainsi de suite :

Output
Would you like to enter a view-only password (y/n)? n xauth: file /home/sammy/.Xauthority does not exist New 'X' desktop is your_hostname:1 Creating 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

Notez que si vous souhaitez jamais changer votre mot de passe ou ajouter un mot de passe en lecture seule, vous pouvez le faire avec la commande vncpasswd:

  1. vncpasswd

À ce stade, le serveur VNC est installé et en cours d’exécution. Maintenant, vous allez le configurer pour lancer Xfce et nous donner accès au serveur via une interface graphique.

Étape 2 — Configuration du serveur VNC

Le serveur VNC doit savoir quels commandes exécuter lors de son démarrage. En particulier, VNC doit savoir à quel environnement de bureau graphique se connecter.

Les commandes que le serveur VNC exécute au démarrage sont situées dans un fichier de configuration appelé xstartup dans le dossier .vnc sous votre répertoire personnel. Le script de démarrage a été créé lorsque vous avez exécuté la commande vncserver à l’étape précédente, mais vous allez créer le vôtre pour lancer le bureau Xfce.

Parce que vous allez modifier la configuration du serveur VNC, arrêtez d’abord l’instance du serveur VNC qui fonctionne sur le port 5901 avec la commande suivante :

  1. vncserver -kill :1

La sortie ressemblera à ceci, bien que vous voyiez un PID différent :

Output
Killing Xtightvnc process ID 17648

Avant de modifier le fichier xstartup, sauvegardez l’original :

  1. mv ~/.vnc/xstartup ~/.vnc/xstartup.bak

Maintenant, créez un nouveau fichier xstartup et ouvrez-le dans un éditeur de texte, tel que nano :

  1. nano ~/.vnc/xstartup

Ensuite, ajoutez les lignes suivantes au fichier :

~/.vnc/xstartup
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &

La première ligne est un shebang. Dans les fichiers texte exécutables sur les plates-formes *nix, un shebang indique au système quel interpréteur utiliser pour exécuter ce fichier. Dans ce cas, vous passez le fichier à l’interpréteur Bash. Cela permettra à chaque ligne successive d’être exécutée comme des commandes, dans l’ordre.

La première commande dans le fichier, xrdb $HOME/.Xresources, indique au framework GUI de VNC de lire le fichier .Xresources de l’utilisateur du serveur. .Xresources est l’endroit où un utilisateur peut apporter des modifications à certains paramètres du bureau graphique, comme les couleurs du terminal, les thèmes de curseur et le rendu des polices. La deuxième commande indique au serveur de lancer Xfce. Chaque fois que vous démarrez ou redémarrez le serveur VNC, ces commandes s’exécuteront automatiquement.

Enregistrez et fermez le fichier après avoir ajouté ces lignes. Si vous avez utilisé nano, appuyez sur CTRL + X, Y, puis ENTRÉE.

Pour vous assurer que le serveur VNC pourra utiliser correctement ce nouveau fichier de démarrage, vous devrez le rendre exécutable :

  1. chmod +x ~/.vnc/xstartup

Ensuite, redémarrez le serveur VNC :

  1. vncserver -localhost

Remarquez que cette fois la commande inclut l’option -localhost, qui lie le serveur VNC à l’interface de bouclage de votre serveur. Cela fera en sorte que VNC n’autorise que les connexions provenant du serveur sur lequel il est installé.

À l’étape suivante, vous établirez un tunnel SSH entre votre machine locale et votre serveur, en trompant essentiellement VNC pour qu’il pense que la connexion depuis votre machine locale provient de votre serveur. Cette stratégie ajoutera une couche supplémentaire de sécurité autour de VNC, car seuls les utilisateurs ayant déjà accès SSH à votre serveur pourront y accéder.

Vous verrez une sortie similaire à ceci :

Output
New 'X' desktop is your_hostname:1 Starting applications specified in /home/sammy/.vnc/xstartup Log file is /home/sammy/.vnc/your_hostname:1.log

Avec la configuration en place, vous êtes prêt à vous connecter au serveur VNC depuis votre machine locale.

Étape 3 — Connexion sécurisée au bureau VNC

VNC lui-même n’utilise pas de protocoles sécurisés lors de la connexion. Pour vous connecter en toute sécurité à votre serveur, vous établirez un tunnel SSH, puis indiquerez à votre client VNC de se connecter en utilisant ce tunnel plutôt que d’établir une connexion directe.

Créez une connexion SSH sur votre ordinateur local qui redirige de manière sécurisée vers la connexion localhost pour VNC. Vous pouvez le faire via le terminal sur Linux ou macOS avec la commande ssh suivante :

  1. ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

Voici ce que signifient les options de cette commande ssh :

  • -L 59000:localhost:5901: L’option -L spécifie que le port donné sur l’ordinateur local (59000) doit être redirigé vers l’hôte et le port donnés sur le serveur de destination (localhost:5901, signifiant le port 5901 sur le serveur de destination, défini comme your_server_ip). Notez que le port local que vous spécifiez est quelque peu arbitraire ; tant que le port n’est pas déjà lié à un autre service, vous pouvez l’utiliser comme port de transfert pour votre tunnel.
  • -C: Ce drapeau active la compression, ce qui peut aider à minimiser la consommation de ressources et à accélérer les choses.
  • -N: Cette option indique à ssh que vous ne voulez pas exécuter de commandes à distance. Ce paramètre est utile lorsque vous voulez simplement transférer des ports.
  • -l sammy your_server_ip: L’option -l vous permet de spécifier l’utilisateur avec lequel vous souhaitez vous connecter une fois connecté au serveur. Assurez-vous de remplacer sammy et your_server_ip par le nom de votre utilisateur non root et l’adresse IP de votre serveur.

Remarque: Cette commande établit un tunnel SSH qui transfère des informations du port 5901 de votre serveur VNC vers le port 59000 de votre machine locale via le port 22 sur chaque machine, le port par défaut pour SSH. En supposant que vous avez suivi le guide de configuration initiale Setup initial du serveur pour Ubuntu 22.04, vous aurez ajouté une règle UFW pour autoriser les connexions vers votre serveur via OpenSSH.

C’est plus sécurisé que simplement ouvrir le pare-feu de votre serveur pour autoriser les connexions au port 5901, car cela permettrait à n’importe qui d’accéder à votre serveur via VNC. En établissant une connexion via un tunnel SSH, vous limitez l’accès VNC aux machines qui ont déjà un accès SSH au serveur.

Si vous utilisez PuTTY pour vous connecter à votre serveur, vous pouvez créer un tunnel SSH en cliquant avec le bouton droit sur la barre supérieure de la fenêtre de terminal, puis en cliquant sur l’option Modifier les paramètres…:

Trouvez la branche Connexion dans le menu arborescent sur le côté gauche de la fenêtre de reconfiguration de PuTTY. Développez la branche SSH et cliquez sur Tunnels. Sur l’écran Options contrôlant le transfert de port SSH, saisissez 59000 comme Port source et localhost:5901 comme Destination, comme ceci :

Ensuite, cliquez sur le bouton Ajouter, puis sur le bouton Appliquer pour mettre en œuvre le tunnel.

Une fois que le tunnel est en cours d’exécution, utilisez un client VNC pour vous connecter à localhost:59000. Vous serez invité à vous authentifier en utilisant le mot de passe que vous avez défini à l’étape 1.

Une fois connecté, vous verrez le bureau Xfce par défaut. Il devrait ressembler à ceci :

Vous pouvez accéder aux fichiers de votre répertoire personnel avec le gestionnaire de fichiers ou depuis la ligne de commande, comme le montre cet exemple :

Appuyez sur CTRL+C dans votre terminal local pour arrêter le tunnel SSH et revenir à votre invite. Cela déconnectera également votre session VNC.

Maintenant, vous pouvez configurer votre serveur VNC pour fonctionner en tant que service systemd.

Étape 4 — Exécution de VNC en tant que service système

En configurant le serveur VNC pour fonctionner en tant que service systemd, vous pouvez le démarrer, l’arrêter et le redémarrer selon les besoins, comme tout autre service. Vous pouvez également utiliser les commandes de gestion de systemd pour vous assurer que VNC démarre lorsque votre serveur démarre.

Tout d’abord, créez un nouveau fichier d’unité appelé /etc/systemd/system/[email protected]:

  1. sudo nano /etc/systemd/system/[email protected]

Le symbole @ à la fin du nom nous permettra de passer un argument que vous pouvez utiliser dans la configuration du service. Vous utiliserez cela pour spécifier le port d’affichage VNC que vous souhaitez utiliser lorsque vous gérez le service.

Ajoutez les lignes suivantes au fichier. Assurez-vous de modifier la valeur de User, Group, WorkingDirectory, et le nom d’utilisateur dans la valeur de PIDFILE pour correspondre à votre nom d’utilisateur:

/etc/systemd/system/[email protected]
[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target

[Service]
Type=forking
User=sammy
Group=sammy
WorkingDirectory=/home/sammy

PIDFile=/home/sammy/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%i
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target

La commande ExecStartPre arrête VNC s’il est déjà en cours d’exécution. La commande ExecStart démarre VNC et définit la profondeur de couleur sur 24 bits avec une résolution de 1280×800. Vous pouvez également modifier ces options de démarrage pour répondre à vos besoins. Notez également que la commande ExecStart inclut à nouveau l’option -localhost.

Enregistrez et fermez le fichier.

Ensuite, faites en sorte que le système soit conscient du nouveau fichier d’unité:

  1. sudo systemctl daemon-reload

Activez le fichier d’unité:

  1. sudo systemctl enable [email protected]

Le 1 suivant le signe @ indique le numéro d’affichage sur lequel le service doit apparaître, dans ce cas, le :1 par défaut comme discuté à l’étape 2.

Arrêtez l’instance actuelle du serveur VNC si elle est toujours en cours d’exécution :

  1. vncserver -kill :1

Ensuite, démarrez-le comme vous démarreriez tout autre service systemd :

  1. sudo systemctl start vncserver@1

Vous pouvez vérifier qu’il a démarré avec cette commande :

  1. sudo systemctl status vncserver@1

Si tout s’est bien passé, la sortie devrait ressembler à ceci :

Output
[email protected] - Start TightVNC server at startup Loaded: loaded (/etc/systemd/system/[email protected]; enabled; vendor preset: enabled) Active: active (running) since Mon 2022-04-18 16:57:26 UTC; 20s ago Process: 97088 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2) Process: 97092 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :1 (code=exited, status=0/SUCCESS) Main PID: 97103 (Xtightvnc) Tasks: 77 (limit: 4665) Memory: 146.7M CPU: 4.459s CGroup: /system.slice/system-vncserver.slice/[email protected] . . .

Votre serveur VNC est maintenant prêt à être utilisé chaque fois que votre serveur démarre, et vous pouvez le gérer avec des commandes systemctl comme n’importe quel autre service systemd.

Cependant, il n’y aura aucune différence du côté client. Pour vous reconnecter, recommencez votre tunnel SSH :

  1. ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

Ensuite, effectuez une nouvelle connexion en utilisant votre logiciel client VNC sur localhost:59000 pour vous connecter à votre serveur.

Conclusion

Vous disposez désormais d’un serveur VNC sécurisé opérationnel sur votre serveur Ubuntu 22.04. Vous pourrez ainsi gérer vos fichiers, logiciels et paramètres avec une interface graphique conviviale, et exécuter des logiciels graphiques comme des navigateurs Web à distance.

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-on-ubuntu-22-04