L’écran noir VNC sous Ubuntu ne venait pas du réseau. C’était un problème de configuration de xstartup.
Et le port 5901 n’avait même pas besoin d’être ouvert.
En installant VNC sous Ubuntu, la plupart des gens bloquent sur deux points. Le client se connecte, mais l’écran reste noir.
Et on ne sait pas trop s’il faut ouvrir le port 5901 sur Internet. Dans les deux cas, la cause était plus simple que je ne le pensais.
J’avais besoin de tester une interface graphique sur un serveur Ubuntu d’AWS EC2. J’ai donc installé TigerVNC moi-même, et je retrace ici le parcours tel qu’il s’est passé.
Quand a-t-on besoin de VNC sur un serveur Ubuntu ?
SSH suffit pour administrer un serveur. VNC n’est utile que pour voir l’écran réel, comme un flux d’authentification dans le navigateur ou l’état d’une application graphique.
D’habitude, j’administrais mes serveurs en SSH. Je n’ai pas ajouté VNC pour avoir un bureau à distance en permanence.
Pendant une période de développement et de test, je devais vérifier directement un navigateur et des applications graphiques sur un Ubuntu dans le cloud.
Il fallait soit suivre de mes yeux des flux d’authentification et de redirection, soit vérifier l’état réel de l’écran d’une application graphique.
J’ai donc ajouté TigerVNC et un environnement de bureau léger, uniquement pour la période où il me fallait une interface graphique.
Si le travail se fait en CLI, aujourd’hui encore, je n’installe pas VNC.
Comment installer Xfce et TigerVNC ?
Pour un bureau à distance VNC sous Ubuntu, installez un environnement de bureau léger (Xfce) et le serveur TigerVNC. Définissez ensuite le mot de passe de connexion avec vncpasswd.
À l’époque, mon environnement principal était Ubuntu 22.04 LTS.
Beaucoup de guides prenaient la 20.04 comme référence, mais son support standard a pris fin le 31 mai 2025. Pour une installation neuve aujourd’hui, je pense qu’il faut partir de la 22.04 ou de la 24.04 LTS.
Installer les paquets (Xfce, TigerVNC)
Mettez d’abord à jour la liste des paquets, puis installez les paquets.
sudo apt update sudo apt install -y xfce4 xfce4-goodies tigervnc-standalone-server
L’installation elle-même ne prend pas longtemps. C’est l’étape suivante qui demande du temps.
Définir le mot de passe de connexion avec vncpasswd
Une fois l’installation terminée, créez un mot de passe pour les connexions VNC avec vncpasswd.
vncpasswd
Ce mot de passe est distinct de celui de votre compte Linux. C’est celui que vous saisissez dans le client VNC au moment de la connexion.
Pourquoi TigerVNC affiche-t-il un écran noir après la connexion ?
Si vous n’avez qu’un écran noir après la connexion, ne commencez pas par le réseau. Vérifiez d’abord le droit d’exécution de ~/.vnc/xstartup et la commande qui lance la session de bureau.
C’est exactement le premier problème que j’ai rencontré.
Le processus VNC tournait, et le client se connectait. C’est pour cela qu’au début, je n’ai pas soupçonné le réseau.
En vérifiant, j’ai vu que ~/.vnc/xstartup ne lançait pas correctement la session de bureau.
J’ai corrigé le droit d’exécution et la commande de démarrage de la session. J’ai relancé la session VNC, et le problème était réglé.

Depuis, j’ai changé l’ordre de mon diagnostic. Je sépare d’abord deux cas : la connexion échoue, ou elle réussit mais l’écran reste noir.
Dans le premier cas, je regarde d’abord le réseau, le pare-feu et l’état du service. Dans le second, je vais d’abord voir xstartup.

La première fois que j’ai traversé tout cela, il m’a fallu environ 40 à 50 minutes, essais et erreurs compris.
C’est le temps total, de l’installation de VNC jusqu’à la connexion effective.
Il comprend l’environnement de bureau, l’écriture de xstartup, l’écran noir, la correction des droits et de la session, et le tunnel SSH.
Sur le deuxième environnement, je connaissais déjà la cause. J’ai terminé en moins de 20 minutes.
Corriger le droit d’exécution et la commande de session de xstartup
Donnez le droit d’exécution à ~/.vnc/xstartup, puis vérifiez qu’il contient bien une commande qui lance la session de bureau.
chmod +x ~/.vnc/xstartup
Dans xstartup, la commande qui lance la session Xfce doit être écrite de façon à s’exécuter correctement.
Si ce fichier est mal configuré, le serveur VNC peut fonctionner normalement alors que l’écran reste noir.
Faut-il ouvrir le port 5901 ? Passez plutôt par un tunnel SSH
Non, il n’est pas nécessaire d’exposer le port VNC (5901) sur Internet. Avec un tunnel SSH d’un port local vers le serveur, vous n’avez pas à ajouter de règle VNC au groupe de sécurité.
Le protocole RFB, utilisé par VNC, ne chiffre pas le trafic par lui-même. Les données d’écran et l’authentification sont exposées telles quelles.
C’est pour cela qu’on l’enveloppe dans un tunnel SSH plutôt que d’ouvrir le port sur Internet.
Une fois, j’ai pensé devoir ouvrir le port 5901, et j’ai voulu commencer par modifier le groupe de sécurité AWS.
Finalement, je ne l’ai pas fait. J’ai utilisé un tunnel SSH au lieu d’exposer le port VNC sur Internet.
Le chemin était à peu près celui-ci : localhost:5901 sur ma machine → SSH → localhost:5901 sur le serveur. Dans le groupe de sécurité, je n’ai pas ouvert le 5901 de VNC à tout Internet.

Même avec VNC en panne, il n’y avait aucune raison de commencer par ouvrir le 5901 sur Internet.
Il ne me fallait pas un port public. Il me fallait une session de bureau qui fonctionne et un tunnel SSH.
Comment lancer le serveur VNC comme service systemd ?
Si vous enregistrez le serveur VNC comme service systemd, vous n’avez plus à relancer vncserver à la main après un redémarrage du serveur.
Créez un fichier d’unité de la forme [email protected] et activez-le avec systemctl.
Même si le serveur redémarre, la session VNC remonte alors toute seule. Plus besoin de vous connecter en SSH pour taper vncserver à chaque fois.
sudo systemctl enable [email protected] sudo systemctl start [email protected] sudo systemctl status [email protected]
La commande status vous montre tout de suite si la session a bien démarré.

Recommanderais-je encore VNC ? Alternatives et critères de choix
Pour le code, SSH ou un environnement de développement distant ; pour vérifier une interface web, un navigateur headless. Je pense qu’il est raisonnable de ne choisir VNC que si vous avez besoin de toute l’interface graphique Linux.
Je choisis selon l’usage.
| Objectif | Outil recommandé |
|---|---|
| Administrer le serveur, modifier du code | SSH, VS Code Remote SSH, devcontainer, code-server |
| Vérifier une interface web, automatiser le navigateur | navigateur headless |
| Vérifier la session de bureau Linux elle-même | VNC |
En bref, le code passe par SSH, et le simple résultat à l’écran par un navigateur headless. VNC, seulement quand j’ai besoin de la session de bureau elle-même.
J’ai aussi utilisé le X11 forwarding. Avec plusieurs fenêtres graphiques ouvertes longtemps, VNC, qui garde une session de bureau complète, était plus pratique dans certains cas.
Je ne défends donc pas l’idée qu’« un serveur Ubuntu a besoin d’une interface graphique ». Au contraire, si le travail se fait en CLI, je préfère ne pas installer VNC.
Aujourd’hui, je ne laisse pas VNC tourner en permanence sur cette instance EC2. Je suis passé à une autre méthode : créer l’environnement graphique seulement quand j’en ai besoin.
Sur un serveur exposé à Internet, s’il n’y a pas de raison d’y garder un démon VNC et un bureau actifs, je pense qu’ils ajoutent seulement de la surface d’attaque et des composants à maintenir.
Questions fréquentes
La connexion VNC fonctionne, mais l’écran reste noir. Pourquoi ?
Dans la plupart des cas, c’est la configuration de ~/.vnc/xstartup, pas le réseau. Vérifiez d’abord le droit d’exécution (chmod +x) et la présence de la commande de démarrage de session.
Faut-il ouvrir le port 5901 dans le groupe de sécurité ?
Non. Il suffit de relier un port local au serveur par un tunnel SSH. Inutile d’exposer directement le 5901 sur Internet.
Existe-t-il d’autres méthodes d’accès à distance que VNC ?
Tout dépend de l’objectif. Pour le code, SSH ou un environnement de développement distant est plus simple ; pour vérifier une interface web, un navigateur headless.
N’envisagez VNC que si vous devez voir toute l’interface graphique Linux.
Références
- RFC 6143 : The Remote Framebuffer Protocol (en anglais) : source primaire sur l’absence de chiffrement de la session par VNC (RFB)
- Canonical : fin du support standard d’Ubuntu 20.04 LTS (en anglais) : source primaire de la date de fin du support standard de la 20.04 (31 mai 2025)
Cet article a été localisé à partir de l’original en coréen : https://jjeongil.tistory.com/2090.