Armbian : accéder au bureau à distance de l'Orange Pi avec VNC et TightVNC • Domotique et objets connectés à faire soi-même

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.

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.

rnc6hqisfiad8fboylic-4554255

Vous êtes maintenant connecté à votre bureau.

b9zmliuoburtobgpqrcw-8756138

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 ?