Contrôle à distance du Raspberry
Dans cette partie, nous allons voir comment prendre le contrôle d’un Raspberry Pi 4 à distance. Cela sera intéressant pour notre projet dans le but de créer un système embarqué de caméra thermique. En effet, le Raspberry serait le cœur d’un système avec lequel nous aimerions interagir à distance.
Dans un premier temps, nous allons donc configuré le SSH sur le Raspberry pour pouvoir initier le contrôle à distance en lignes de commande.
Ensuite, la prise en main à distance sera améliorée par la configuration du VNC. Nous pourrons ainsi prendre totalement le contrôle du Raspberry via notre ordinateur. Nous ne serons plus limité à une simple interface en ligne de commandes comme en SSH. En effet, nous aurons par exemple accès au bureau du Raspberry.
Enfin, grâce à une clé USB Wi-Fi dont nous disposons, le but est de paramétrer le Raspberry pour lui donner sa propre adresse IP. Grâce à cela, nous allons configurer le Raspberry en point d’accès Wi-Fi afin de pouvoir maintenir la connexion SSH ou VNC même lorsque le Raspberry n’est pas connecté à un réseau particulier. Cela nous servirait dans le cas où nous voulions nous déplacer avec notre système embarqué. Ce serait alors possible partout.
La connexion en SSH depuis un ordinateur – Contrôle en ligne de commandes
Le SSH (pour Secure SHell) désigne à la fois un logiciel et un protocole de communication informatiques. Ce protocole possède par ailleurs la particularité d’être entièrement chiffré. Cela signifie donc que toutes les commandes que nous exécuterons via SSH seront totalement secrètes.
Le SSH a été créé en 1995 avec pour principal but de permettre la prise de contrôle à distance d’une machine à travers une interface en lignes de commande.
Nous allons donc utiliser le SSH pour écrire des lignes de commandes sur le Raspberry directement à partir de notre ordinateur.
Pour cela, l’ordinateur qui doit se connecter à la machine distante va fournir à celle-ci le nom de l’utilisateur à utiliser et son mot de passe. Par défaut, le SSH est installé sur la Raspberry Pi mais est désactivé pour des raisons de sécurité. La première chose à faire est donc d’activer le SSH sur notre Raspberry Pi à l’aide de la manipulation suivante :
Une fois le SSH activé, nous redémarrons le Raspberry Pi avec la commande « reboot ».
Nous récupérons aussi l’adresse IP du Raspberry, nous en aurons besoin pour nous y connecter en SSH.
Terminal
1 2 |
ifconfig # on affiche l'adresse IP du Raspberry sudo reboot # on redémarre pour appliquer l'activation du SSH |
Nous voyons sur cette capture d’écran que l’adresse IP du Raspberry qui est connecté au réseau de la maison en Wi-Fi est :
192.168.1.195
Le Raspberry est connecté via l’interface wlan0.
Ensuite, il faut installer un client SSH sur l’ordinateur pour pouvoir contrôler le Raspberry à distance. Nous installons donc le logiciel PuTTY pour cela. Il peut être installé à partir du lien suivant : «https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html».
PuTTY
1 file 2.777 MB 14/01/2021
Maintenant que nous avons mis en place le serveur et installé le client, il ne nous reste plus qu’à utiliser cela. Nous lançons donc PuTTY comme ci-dessous :
Pour information, le numéro du port (22) est le port par défaut de SSH. Ici, l’adresse IP de notre Raspberry est « 192.168.1.195 ».
Nous cliquons sur le bouton « Open ». Une fenêtre de console s’ouvre en nous demandant le nom d’utilisateur pour nous connecter puis le mot de passe. Une fois ceci fait, nous sommes connectés au Raspberry Pi et nous pouvons l’utiliser à distance en lançant des commandes depuis notre ordinateur.
Nous pouvons aussi nous connecter en SSH avec notre téléphone. Il suffit d’installer l’application JuiceSSH par exemple.
Le SSH nous permet donc de prendre le contrôle du Raspberry à distance en ligne de commandes, à partir d’un ordinateur ou d’un téléphone par exemple.
La connexion VNC – Contrôle du bureau à distance
Le VNC, ou Virtual Network Computing, est un système permettant la prise de contrôle à distance d’un ordinateur par un autre. Lors de l’utilisation de VNC, deux parties différentes du logiciel sont utilisées.
La première partie est le serveur VNC. Celui-ci est installé sur la machine dont l’on souhaite prendre le contrôle (ici le Raspberry Pi), et il va permettre la connexion et le contrôle par la partie client.
La seconde partie est donc le client VNC. Celui-ci est installé sur la machine depuis laquelle on souhaite contrôler le serveur, et il va permettre de traduire vos actions en opérations compréhensibles par le serveur qui va alors contrôler la machine distante depuis votre ordinateur.
Le gros intérêt du VNC, c’est qu’il permet de prendre le contrôle d’une machine distante, tout en affichant le bureau de celle-ci. Nous pouvons donc voir en temps réel ce qui se passe sur notre Raspberry Pi, sans pour autant avoir besoin de le brancher sur un écran.
Nous avons configuré la connexion VNC à l’aide du site «https://raspberry-pi.fr/vnc-raspberry-pi/».
Sur le Raspberry, la première étape est l’activation du VNC avec la commande « sudo raspi-config » ou avec l’interface du bureau. La méthode est la même que pour l’activation du SSH.
Pour finir, nous installons le client VNC sur l’ordinateur avec le lien ci-dessous. Le logiciel est VNC Viewer : «https://www.realvnc.com/fr/connect/download/viewer/».
VNC Viewer
1 file 10.313 MB 14/01/2021
Le serveur est mis en place dans la première étape et le client est installé. Nous pouvons donc nous connecter en VNC en ouvrant VNC Viewer. Il suffit d’indiquer l’adresse IP de la machine, le nom d’utilisateur et le mot de passe.
La connexion VNC est opérationnelle. Nous voyons l’écran du Raspberry à partir de notre ordinateur. Comme pour la connexion SSH, nous pouvons installer un client VNC sur notre téléphone pour obtenir les mêmes fonctionnalités. Par exemple, nous avons installé VNC Viewer sur nos téléphones.
Configuration d’un point d’accès Wi-Fi – Contrôle à distance sans réseau commun
La configuration du point d’accès Wi-Fi nous permettra de nous connecter en SSH ou en VNC directement en passant par le Raspberry. Nous ne serons donc pas obligé d’être connecté à un réseau que ce soit sur le Raspberry ou sur le PC pour se connecter en VNC. Pour réaliser la configuration, nous nous sommes aidés du site «https://bentek.fr/creer-hotspot-wifi-sur-raspberry-pi/».
Avant de commencer toute manipulation, nous mettons à jour notre système :
Terminal
1 2 3 |
sudo apt-get update # télécharge les informations du package à partir de toutes les sources configurées sudo apt-get full-upgrade # installe et met à jour tous les packages existants sudo reboot # on redémarre la machine |
Nous branchons maintenant notre clé USB Wi-FI. Nous faisons un « ifconfig » en espérant voir une interface wlan1 correspondant à notre dongle Wi-FI. Ce n’est pourtant pas le cas. La commande « lsusb » nous permet d’être sur que le Raspberry reconnait la clé. Nous nous renseignons donc sur le problème en cherchant des cas similaires sur Internet.
La clé Wi-Fi est bien reconnue en tant que «Device 005 : WLAN Adapter».
Nous comprenons grâce au site «https://manual.raspberryshake.org/wifi.html» que le problème vient du driver, la clé n’est pas reconnu. Nous exécutons les commandes suivantes pour régler le problème :
Terminal
1 2 3 4 5 |
sudo wget http://downloads.fars-robotics.net/wifi-drivers/install-wifi -O /usr/bin/install-wifi # on télécharge un script sudo chmod +x /usr/bin/install-wifi # on donne les droits d'exécution sudo install-wifi # on exécute le script |
Script d'installation de pilotes pour clé Wi-Fi
1 file 5.78 KB 14/01/2020
Nous avons ici récupérer un programme qui regarde les périphériques USB connectés. Ensuite, il télécharge et installe le pilote approprié pour tous les périphériques qu’il reconnaît comme un dongle Wi-FI.
Nous redémarrons le Raspberry puis réexécutons maintenant la commande « ifconfig » :
Nous pouvons maintenant commencer la configuration d’un point d’accès Wi-Fi sur notre interface wlan1. Pour cela, nous allons installer RaspAP. C’est un outil muni d’une interface web permettant de configurer son point d’accès. Nous suivons la procédure de notre source, nous exécutons donc les commandes suivantes :
Terminal
1 2 3 4 5 6 7 8 |
# Création d'une sauvegarde du fichier de configuration WiFi sudo cp /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.conf.sav # Suppression du fichier de configuration WiFi pour retourner à une configuration vierge sudo cp /dev/null /etc/wpa_supplicant/wpa_supplicant.conf # Téléchargement et installation de RaspAP wget -q https://git.io/voEUQ -O /tmp/raspap && sudo bash /tmp/raspap |
Installation de RaspAP
1 file 2.36 KB 14/01/2021
Nous redémarrons ensuite le Raspberry. Un point d’accès Wi-Fi est maintenant ouvert. En effet, nous le voyons depuis l’ordinateur.
Nous allons maintenant configurer ce point d’accès. Pour cela, il faut ouvrir le navigateur sur le Raspberry et écrire « 10.3.141.1 » dans la barre de recherche. Par défaut, le nom d’utilisateur est « admin » et le mot de passe est « secret ».
Nous passons le point d’accès sur l’interface wlan1 pour qu’il soit paramétré sur la clé USB Wi-Fi. Cela nous permettra de garder l’interface wlan0 pour que le Raspberry puisse toujours se connecter à Internet en Wi-Fi. Ensuite, d’autres paramètres sont réglables comme le nom du point d’accès, le mot de passe ou encore les plages d’adresse du serveur DHCP.
Cependant, avec la commande « ifconfig », nous voyons que l’interface wlan0 n’est pas bien paramétré depuis l’installation de RaspAP. Nous devons donc régler cela pour que le Raspberry puisse continuer à faire des mises à jour par exemple.
La dernière étape est donc la configuration de l’interface wlan0 pour récupérer une connexion Wi-Fi. Ici, ce sera celle de la maison pour les tests. Nous nous aidons du site « http://www.yadoms.com/blog/2017/05/22/tuto-3-activer-le-wifi-sur-une-raspberry-pi-3/».
Avec la commande « sudo iwlist wlan0 scan », nous voyons bien que le réseau maison est reconnu par le module Wi-Fi du Raspberry.
Terminal
1 |
sudo iwlist wlan0 scan # recherche et liste des réseaux détectés par l'interface wlan0 |
Pour la suite, nous allons crypter la clé d’accès grâce à la commande wpa_passphrase. Cela nous permet d’améliorer la sécurité dans notre fichier. Le premier argument de cette commande est le nom du réseau, le second est le mot de passe.
Une fois le cryptage obtenu, nous éditons le fichier « wpa_supplicant.conf » en renseignant le réseau auquel nous souhaitons nous connecter en communiquant son SSID (nom du réseau) et le mot de passe crypté.
Terminal
1 |
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf # ouvre le fichier pour l'éditer |
Terminal
1 |
sudo wpa_cli reconfigure # relance le réseau pour trouver le Wi-Fi renseigné |
Ici, le redémarrage ne se passe pas comme prévu. Il apparait un message d’erreur « failed to connect to non-global ctrl_ifname ». Nous tapons ce message sur google afin de remédier au problème. La solution est trouvée sur le site suivant :
Nous modifions dans un premier temps le fichier interfaces en disant à la machine que l’interface wlan0 se connecte en utilisant les paramètres du fichier wpa_supplicant.
Terminal
1 |
sudo nano /etc/network/interfaces # ouvre le fichier des interfaces pour l'éditer |
Terminal
1 |
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf # ouvre le fichier pour l'éditer |
Terminal
1 2 |
sudo reboot # redémarre le Raspberry sudo wpa_cli reconfigure # relance le réseau pour trouver le Wi-Fi renseigné |
Les interfaces eth0 et wlan0 sont configurées de la même manière en cochant la case « automatically configure empty options ». En revanche, ce n’est pas le cas pour l’interface wlan1 car elle est configurée en adresse IP fixe sans passerelle car elle ne sert qu’à la connexion point à point.
Nous vérifions que les paramètres sont bien pris en compte après un redémarrage du Raspberry avec la commande :
Terminal
1 |
ip route show # on affiche la table de routage du Raspberry |
Les cartes eth0 et wlan0 sont configurées en client DHCP, elles récupèrent donc directement une adresse IP et la passerelle du réseau auquel elles sont connectées.
Le Raspberry est maintenant configuré comme nous le souhaitions. D’une part, l’interface wlan0 est utilisée pour se connecter à un réseau quelconque en Wi-Fi. D’autre part, l’interface wlan1 permet de lancer un point d’accès Wi-Fi grâce à l’interface apportée par la clé USB Wi-Fi branchée sur le Raspberry.
De plus, si le Raspberry est connecté à Internet au travers de l’interface eth0 ou wlan0, alors la meilleure des 2 connexions est partagée par le point d’accès Wi-Fi. Les 3 interfaces sont donc fonctionnelles (Ethernet, Wi-Fi, Point d’accès) en même temps.
Enfin, le point d’accès est donc correctement réglé. Lorsque nous sommes dans un environnement où le Raspberry et l’ordinateur sont connectés au même réseau, il n’y a pas de soucis pour le VNC ou le SSH, on passe par ce réseau.
Mais dans le cas où il n’y a plus de réseau commun aux 2 machines, nous pouvons toujours contrôler le Raspberry à distance. En effet, il suffit de connecter l’ordinateur au point d’accès Wi-Fi que nous avons nommé « Raspi Thermo Cam ». Ensuite, nous pouvons nous connecter en SSH ou en VNC grâce à l’adresse IP « 10.3.141.1 » qui a été configurée en statique sur RaspAP.
Ce point d’accès est créé automatiquement lorsque nous branchons la clé Wi-Fi sur le Raspberry, c’est donc très pratique. Nous avons réalisé une grande avancée dans le but de créer un système embarqué. A ce stade, nous ne sommes plus obligés de relier le Raspberry à un écran car nous le contrôlons depuis un ordinateur ou un téléphone en toute circonstance.