Orange Pi (et Raspberry Pi) sont des mini ordinateurs cartes qui sont très souvent utilisés à distance sans écran (ni clavier et souris). Dans certains cas, ou si on débute sur Linux, on aimerait toutefois avec un accès graphique au bureau Linux. Dans ce tutoriel, nous allons apprendre à installer et configurer un serveur VNC (Virtual Network Computing) sur la distribution Armbian qui est très bien adaptée à l’Orange Pi.
Sommaire
- 1 Installer le serveur TightVNC sur Armbian
- 2 Créer un utilisateur VNC (optionnel)
- 3 Démarrer manuellement le serveur VNC
- 4 Connaître les paramètres du serveur actif
- 5 Arrêter un serveur VNC
- 6 Se connecter depuis un client
- 7 Créer un service systemd pour démarrer VNC automatiquement au démarrage
- 8 Sécuriser le serveur VNC avec un tunnel SSH
- 9 Ouvrir un tunnel sécurisé SSH
Installer le serveur TightVNC sur Armbian
TightVNC (page officielle du projet) est un serveur VNC léger qui fonctionne sur toutes les distributions Linux ainsi que sur Windows. Avant de l’installer, il est préférable de mettre à jour le système.
sudo apt-get update && apt-get upgrade
Une fois l’opération terminée, installez TightVNC.
sudo apt-get install tightvncserver
Créer un utilisateur VNC (optionnel)
Il est possible de se connecter à votre Orange Pi ou Raspberry Pi avec votre utilisateur habituel mais par sécurité, il est préférable d’ajouter un utilisateur dédié.
Changez d’utilisateur pour être en root (si ce n’est pas le cas).
su -
Ajoutez un nouvel utilisateur au système avec la commande adduser (adduser vnc ) et répondez aux questions (mot de passe, questions optionnelles).
# adduser vnc Adding user `vnc' ... Adding new group `vnc' (1001) ... Adding new user `vnc' (1001) with group `vnc' ... Creating home directory `/home/vnc' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for vnc Enter the new value, or press ENTER for the default Full Name []: VNCuser Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] Y
On donne à cet utilisateur le droit d’utiliser la commande sudo (si on veut pouvoir installer de nouveaux paquets à distance).
# gpasswd -a vnc sudo Adding user vnc to group sudo
Démarrer manuellement le serveur VNC
Changeons d’utilisateur
su - vnc
Maintenant on démarre le serveur VNC sur le port 1. Au premier lancement, vous devrez indiquer le mot de passe nécessaire pour vous authentifier depuis un client.
$ vncserver :1 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/vnc/.Xauthority does not exist New 'X' desktop is orangepilite:1 Creating default startup script /home/vnc/.vnc/xstartup Starting applications specified in /home/vnc/.vnc/xstartup Log file is /home/vnc/.vnc/orangepilite:1.log
Connaître les paramètres du serveur actif
Si vous avez besoin de connaître les paramètres actuel du serveur VNC actif, exécutez la commande suivant
$ ps -ef | grep Xtightvnc vnc 1551 1 0 13:07 ? 00:00:00 Xtightvnc :1 -desktop X -auth /home/vnc/.Xauthority -geometry 1024x768 -depth 16 -rfbwait 120000 -rfbauth /home/vnc/.vnc/passwd -rfbport 5901 -fp /usr/share/fonts/X11/misc/,/usr/share/fonts/X11/Type1/,/usr/share/fonts/X11/75dpi/,/usr/share/fonts/X11/100dpi/ -co /etc/X11/rgb -localhost vnc 1801 1772 0 13:25 pts/2 00:00:00 grep Xtightvnc
On peut ainsi savoir sur quel port est renvoyé le flux (-rfbport), la résolution de l’image produite (-geometry)…
Arrêter un serveur VNC
Pour arrêter un serveur VNC, utilisez la commande suivant suivi de l’écran. 1 par défaut
vncserver -kill :1
Se connecter depuis un client
Il existe de très nombreux clients VNC pour toutes les plateformes (macOS, Windows, Linux…) et pour smartphone (iOS, Android…). RealVNC (site internet) est disponible sur toutes les plateformes (y compris mobile). Il est gratuit pour un usage personnel. Si vous préférez rester dans les projets 100% Open Source et libres, gage de respect de la vie privée, vous pouvez vous tourner vers UltraVNC (page officielle du projet).
Démarrez votre client et saisissez l’adresse IP de votre Orange PI (ou n’importe quel serveur VNC) suivi du port sur lequel est démarré ce dernier. Par défaut ce sera 5901.
ce qui donne par exemple 192.168.1.90:5901
Par défaut, la connexion n’est pas cryptée. Ce n’est pas très gênant lorsqu’on se connecte à un poste sur son propre réseau mais attention si vous accédez à distance à votre bureau car tout va transiter en claire sur internet…
Acceptez le message d’avertissement.
Vous êtes maintenant connecté à votre bureau.
Créer un service systemd pour démarrer VNC automatiquement au démarrage
Commençons par arrêter le serveur en cours de fonctionnement
vncserver -kill :1
Nous allons créer un nouveau script qui sera exécuté au démarrage comme n’importe quel autre service.
sudo nano /usr/local/bin/monserveurvnc
Collez le contenu dans le script. Ce script contient trois commandes : démarrer (start), arrêter (stop) et redémarrer (restart) le serveur VNC.
#!/bin/bash PATH="$PATH:/usr/bin/" DISPLAY="1" DEPTH="16" GEOMETRY="1024x768" OPTIONS="-depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}" case "$1" in start) /usr/bin/vncserver ${OPTIONS} ;; stop) /usr/bin/vncserver -kill :${DISPLAY} ;; restart) $0 stop $0 start ;; esac exit 0
Enregistrez avec CTRL+X puis Y.
On rend ce script exécutable
sudo chmod +x /usr/local/bin/monserveurvnc
On peut maintenant exécutez les commandes proposées par ce script manuellement comme ceci
sudo /usr/local/bin/monserveurvnc start sudo /usr/local/bin/monserveurvnc stop sudo /usr/local/bin/monserveurvnc restart
Maintenant, ajoutons un script (Unit file) qui va permettre de gérer VNC comme un service avec systemd.
sudo nano /lib/systemd/system/monserveurvnc.service
Puis collez ce script
[Unit] Description=Manage VNC Server on this droplet [Service] Type=forking ExecStart=/usr/local/bin/monserveurvnc start ExecStop=/usr/local/bin/monserveurvnc stop ExecReload=/usr/local/bin/monserveurvnc restart User=vnc [Install] WantedBy=multi-user.target
On relance systemd pour prendre en compte le nouveau service. Puis on démarre le serveur VNC à l’aide de systemd
sudo systemctl daemon-reload sudo systemctl enable monserveurvnc.service
Maintenant nous disposons de 4 commandes pour démarrer, arrêter, re-démarrer et connaître l’état (statut) du service VNC.
sudo systemctl start monserveurvnc.service sudo systemctl stop monserveurvnc.service sudo systemctl restart monserveurvnc.service sudo systemctl status monserveurvnc.service
Sécuriser le serveur VNC avec un tunnel SSH
Nous allons maintenant sécuriser la connexion en faisant passer la connexion dans un tunnel SSH. C’est parti.
On commence par arrêter le service.
sudo systemctl stop monserveurvnc.service
Puis on ouvre le fichier de configuration
sudo nano /usr/local/bin/monserveurvnc
Modifiez la ligne OPTIONS en ajoutant l’option -localhost à la fin comme ceci
OPTIONS="-depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY} -localhost"
Enregistrez avec CTRL+X puis Y.
Et enfin on relance le service VNC.
sudo systemctl start monserveurvnc.service
Ouvrir un tunnel sécurisé SSH
Pour accéder de manière sécurisée, nous devons déjà créer un tunnel SSH par lequel on fera transiter tous les échanges entre le client et le serveur VNC. Sur Windows, vous pouvez utiliser Putty, sur macOS ou Linux, on utilisera le Terminal tout simplement.
Sur Putty, dans le menu de gauche, allez à Connection -> SSH -> Tunnels.
Dans la section Add New Forwarded Port, entrez 5901
dans le champ Source port et localhost:5901 comme Destination. Cliquez sur le bouton Add pour terminer
Sur macOS ou Linux, exécutez la commande suivante et saisissez votre mot de passe.
ssh vnc@IP_SERVEUR_VNC -L 5901:localhost:5901
Maintenant, dans votre client VNC, remplacez l’IP du serveur VNC par localhost:5901. Ne tenez pas compte du message d’avertissement, la connexion n’est pas sécurisée entre votre ordinateur et votre ordinateur ! Tout ce qui sort (et rentre) passe maintenant dans le tunnel SSH.
Avez-vous aimé cet article ?