Le 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. Il 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.
Avec ce guide, vous apprendrez à configurer un serveur VNC avec TightVNC sur un serveur Ubuntu 20.04 et vous y connecter en toute sécurité via un tunnel SSH. Ensuite, vous utiliserez un programme client VNC sur votre ordinateur local pour interagir avec votre serveur via un environnement de bureau graphique.
Pour suivre ce tutoriel, vous aurez besoin des éléments suivants :
Par défaut, un serveur Ubuntu 20.04 n’a pas d’environnement de bureau graphique ou de serveur VNC installé ; vous allez donc commencer par les installer.
Vous pouvez faire votre choix entre les nombreuses options de serveur VNC et d’environnement de bureau disponibles. Dans ce tutoriel, vous installerez des packages pour le dernier environnement de bureau Xfce et le package TightVNC disponible dans le référentiel Ubuntu officiel. Xfce et TightVNC sont connus pour être légers et rapides, ce qui contribuera à garantir une connexion VNC fluide et stable même sur des connexions Internet plus lentes.
Une fois connecté à votre serveur avec SSH, mettez à jour votre liste de packages :
- sudo apt update
Maintenant installez Xfce avec le package xfce4-goodies
, qui contient quelques améliorations pour l’environnement de bureau :
- sudo apt install xfce4 xfce4-goodies
Lors de l’installation, vous pouvez être 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 pour vous connecter à un client VNC, et dans ces sessions Xfce, vous serez déjà connecté en tant qu’utilisateur Ubuntu non root. Donc, pour les besoins de ce tutoriel, votre choix de gestionnaire d’affichage n’est pas pertinent. Sélectionnez-en un puis appuyez sur ENTER
.
Une fois cette installation terminée, installez le serveur TightVNC :
- sudo apt install tightvncserver
Ensuite, exécutez la commande vncserver
pour définir un mot de passe d’accès VNC, créez les fichiers de configuration initiale et démarrez une instance de serveur VNC :
- vncserver
Vous serez invité à saisir et à vérifier un mot de passe pour accéder à votre machine à distance :
OutputYou 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. Cette option est utile si vous souhaitez montrer quelque chose à d’autres personnes à l’aide de votre serveur VNC, mais elle n’est pas obligatoire.
Le processus crée ensuite les fichiers de configuration par défaut et les informations de connexion nécessaires pour le serveur. Il lance également une instance de serveur par défaut sur le port 5901
. Ce port est un port d’affichage et VNC le désigne par :1
. VNC peut lancer plusieurs instances sur d’autres ports d’affichage, avec :2
pour le port 5902
,:3
pour le port 5903
, et ainsi de suite :
OutputWould 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 modifier votre mot de passe ou ajouter un mot de passe en lecture seule, vous pouvez le faire avec la commande vncpasswd
:
- vncpasswd
À ce stade, le serveur VNC est installé et en cours d’exécution. Maintenant, configurons-le pour lancer Xfce qui nous donnera accès au serveur via une interface graphique.
Le serveur VNC doit savoir quelles commandes exécuter lorsqu’il démarre. Plus précisément, VNC doit savoir à quel environnement de bureau graphique se connecter.
Les commandes que le serveur VNC exécute au démarrage se trouvent 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.
Étant donné que vous allez modifier la configuration du serveur VNC, arrêtez tout d’abord l’instance du serveur VNC lancée sur le port 5901
grâce à la commande suivante :
- vncserver -kill :1
La sortie devrait ressembler à ceci, bien que vous verrez un PID différent :
OutputKilling Xtightvnc process ID 17648
Avant de modifier le fichier xstartup
, sauvegardez l’original :
- mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
Maintenant, créez un nouveau fichier xstartup
et ouvrez-le dans un éditeur de texte, comme nano
:
- nano ~/.vnc/xstartup
Ajoutez ensuite les lignes suivantes au fichier :
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
La première ligne est un shebang. Dans les fichiers exécutables en texte brut sur les plates-formes * nix, un shebang indique au système à quel interpréteur de commandes transmettre ce fichier pour exécution. Dans ce cas, vous transmettez le fichier à l’interprèteur de commandes Bash. Cela permettra à chaque ligne successive d’être exécutée sous forme de commandes, dans l’ordre.
La première commande du fichier, xrdb $HOME/. Xresources
, indique au framework de l’interface graphique de VNC de lire le fichier . Xresources
. . Xresources
permet à un utilisateur de modifier certains paramètres du bureau graphique, tels que les couleurs du terminal, les thèmes de curseur et le rendu des polices. La deuxième commande indique au serveur de lancer Xfce. Ces commandes s’exécuteront automatiquement à chaque fois que vous démarrerez ou redémarrerez le serveur VNC.
Enregistrez et fermez le fichier après avoir ajouté ces lignes. Si vous avez utilisé nano
, faites-le en appuyant sur CTRL+X
, Y
, puis ENTER
.
Pour que le serveur VNC puisse utiliser correctement ce nouveau fichier de démarrage, vous devez le rendre exécutable.
- chmod +x ~/.vnc/xstartup
Ensuite, redémarrez le serveur VNC :
- vncserver -localhost
Notez que cette fois, la commande inclut l’option -localhost
, qui lie le serveur VNC à l’interface de bouclage de votre serveur. Cela forcera VNC à autoriser uniquement les connexions qui proviennent du serveur sur lequel il est installé.
À l’étape suivante, vous allez établir un tunnel SSH entre votre ordinateur local et votre serveur. Il incitera essentiellement VNC à penser que la connexion qui se fait à partir de votre ordinateur local provient de votre serveur. Cette stratégie ajoutera une couche de sécurité supplémentaire autour de VNC. En effet, seuls les utilisateurs ayant un accès SSH à votre serveur pourront y accéder.
Vous verrez une sortie semblable à celle-ci :
OutputNew '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 à partir de votre ordinateur local.
VNC n’utilise pas lui-même de protocoles sécurisés lors de la connexion. Pour vous connecter en toute sécurité à votre serveur, vous allez établir un tunnel SSH puis dire à 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 transfère en toute sécurité vers la connexion localhost
pour VNC. Vous pouvez le faire via le terminal sous Linux ou macOS avec la commande ssh
suivante :
- ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip
Voici la définition des options de cette commande ssh
:
-L 59000:localhost:5901
: le commutateur -L
spécifie que le port donné sur l’ordinateur local (59000
) doit être transmis à l’hôte et au port sur le serveur de destination (localhost:5901
, c’est-à-dire le port 5901
sur le serveur de destination, défini de la manière suivante : 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
: cet indicateur active la compression qui peut aider à minimiser la consommation de ressources et à accélérer les choses.-N
: cette option indique à ssh
que vous ne souhaitez exécuter aucune commande à distance. Ce paramètre est utile lorsque vous souhaitez simplement transférer des ports.-l sammy your_server_ip
: le commutateur -l
vous permet de spécifier l’utilisateur auquel vous souhaitez vous connecter lors de votre connexion au serveur. Veillez à bien remplacer sammy
et your_server_ip
par le nom de votre non-root user et l’adresse IP de votre serveur.Note : cette commande établit un tunnel SSH qui transfère les informations du port 5901
de votre serveur VNC vers le port 59000
de votre ordinateur local via le port 22
de chaque machine, le port de SSH par défaut. En supposant que vous ayez suivi le Guide de configuration initiale du serveur pour Ubuntu 20.04, vous aurez ajouté une règle UFW pour autoriser les connexions à votre serveur via OpenSSH.
Cette méthode est plus sûre que d’autoriser les connexions au port 5901
en ouvrant simplement le pare-feu de votre serveur. Cela permettrait à quiconque d’accéder à votre serveur via VNC. En vous connectant via un tunnel SSH, vous limitez l’accès VNC aux machines qui ont déjà un accès SSH au serveur.
Si vous vous connectez à votre serveur en utilisant PuTTY, vous pouvez créer un tunnel SSH en cliquant droit sur la barre supérieure de la fenêtre du terminal, puis en cliquant sur l’option Change Settings… :
Recherchez la branche Connection dans le menu arborescent, situé à gauche de la fenêtre de Reconfiguration de PuTTY. Développez la branche SSH et cliquez sur Tunnels. Sur l’écran Options controlling SSH port forwarding, saisissez 59000
sous Source Port et localhost:5901
sous Destination, de la manière suivante :
Cliquez ensuite sur le bouton Add, puis sur le bouton Apply pour implémenter le tunnel.
Une fois le tunnel en cours d’exécution, utilisez un client VNC pour vous connecter à localhost:59000
. Vous serez invité à vous authentifier à l’aide du mot de passe défini au cours de l’étape 1.
Une fois connecté, vous verrez le bureau Xfce par défaut. Il devrait ressembler à cela :
Vous pouvez accéder aux fichiers dans votre répertoire de base via le gestionnaire de fichiers ou depuis la ligne de commande, comme illustré ici :
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.
Vous pouvez maintenant configurer votre serveur VNC pour qu’il s’exécute en tant que service systemd.
En configurant le serveur VNC pour qu’il s’exécute en tant que service systemd, comme tout autre service, vous pouvez le démarrer, l’arrêter et le redémarrer au besoin. Vous pouvez également utiliser les commandes de gestion de systemd pour être sûr que VNC se lance au démarrage de votre serveur.
Créez tout d’abord un nouveau fichier d’unité que vous nommerez /etc/systemd/system/vncserver@.service
:
- sudo nano /etc/systemd/system/vncserver@.service
Le symbole @
à la fin du nom nous permettra de transmettre un argument que vous pourrez utiliser dans la configuration du service. Vous l’utiliserez pour spécifier le port d’affichage VNC que vous souhaitez utiliser lorsque vous gérez le spécifier
Ajoutez les lignes suivantes au fichier. Veillez à modifier les valeurs de User, Group et WorkingDirectory, ainsi que le nom d’utilisateur dans la valeur de PIDFILE, en utilisant votre nom d’utilisateur :
[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
lance VNC et définit une profondeur de couleur de 24 bits avec une résolution de 1280x800. Vous pouvez également modifier ces options de démarrage selon vos besoins. Notez également que la commande ExecStart
inclut à nouveau l’option -localhost
.
Enregistrez et fermez le fichier.
Ensuite, informez le système du nouveau fichier d’unité :
- sudo systemctl daemon-reload
Activez le fichier d’unité :
- sudo systemctl enable vncserver@1.service
Le 1
suivant le signe @
indique le numéro d’affichage sur lequel le service doit apparaître, dans ce cas la valeur par défaut :1
, comme mentionné à l’étape 2.
Arrêtez l’instance actuelle du serveur VNC, si elle est toujours en cours d’exécution.
- vncserver -kill :1
Puis, démarrez-le comme vous le feriez pour n’importe quel autre service systemd :
- sudo systemctl start vncserver@1
Vous pouvez vérifier qu’il a démarré avec cette commande :
- sudo systemctl status vncserver@1
S’il a démarré correctement, la sortie devrait ressembler à ceci :
Output● vncserver@1.service - Start TightVNC server at startup
Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-05-07 17:23:50 UTC; 6s ago
Process: 39768 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2)
Process: 39772 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :1 (code=exited, status=0/SUCCESS)
Main PID: 39795 (Xtightvnc)
...
Votre serveur VNC est maintenant prêt à être utilisé à chaque démarrage de votre serveur. Vous pouvez le gérer avec les commandes systemctl
comme tout autre service systemd.
Cependant, il n’y aura aucune différence du côté du client. Pour vous reconnecter, redémarrez votre tunnel SSH :
- ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip
Puis, établissez une nouvelle connexion à localhost:59000
à l’aide de votre logiciel client VNC pour vous connecter à votre serveur.
Vous disposez maintenant d’un serveur VNC sécurisé fonctionnant sur votre serveur Ubuntu 20.04. Vous pourrez désormais gérer vos fichiers, vos logiciels et vos paramètres grâce à une interface graphique intuitive, ainsi qu’exécuter des logiciels graphiques à distance comme des navigateurs Web.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
It as been very helpfull but i have only one problem with that, there is no decoration onto my windows so i can expand or hide a window. I am on a Ubuntu Server 20.04.2 LTS.
Is there any way to fix that?