Lors des ateliers Raspberry Pi, il arrive souvent d’avoir des Raspberry Pi sans écran. Ils sont connectés à un PC ou MAC via un câble réseau. Au démarrage du Raspberry Pi il n’est pas simple d’obtenir son adresse. Voici une méthode pour vous en sortir simplement en lui donnant une adresse IP fixe.
Attribuer une adresse APIPA fixe à un Raspberry Pi headless
Headless : Sans clavier, souris, ni écran
APIPA : processus qui permet à un système d’exploitation de s’attribuer automatiquement une adresse IP. Vu mon âge, je m’autorise à appeler cela une adresse APAPI
Prérequis :
- Réalisé sur la version Raspbian Stretch 2018-04-18-raspbian-stretch
- Une machine Windows 10 avec les logiciels Notepad++ et putty installés (ou équivalents)
- Savoir utiliser Notepad++ et putty
- Afficher les extensions de fichiers dans les fenêtres de dossiers
Les solutions
Ah bin ça ! il y en a plein les forums !
je vous en cite quelques unes ? Allez…
- Tritouiller les fichiers de config de Raspbian avant de démarrer (le système doit être démarré ou il faut accéder à la carte via un Linux ou un utilitaire sous Windows)
- Tritouiller les fichiers de config de Raspbian après avoir démarré. Bin oui, mais là c’est plus du headless, il faut au moins un écran et un clavier pour faire ça.
- Modifier le serveur DHCP (en général dans la box Internet) pour que le DHCP affecte une adresse IP donnée à une adresse MAC. L’adresse MAC est l’adresse physique de votre carte réseau. Ça veut dire qu’il faut d’abord la relever, puis faire ce qu’on appelle une “réservation” d’adresse…
- Utiliser une appli sur son smartphone pour identifier les Raspberry Pi du réseau, puis utiliser ces adresses pour VNC (dans ce cas l’adresse n’est même pas fixe)
Il n’y en a surement encore d’autres… mais celles là me suffisent. On voit vite qu’un informaticien n’aura pas trop de difficultés avec ces méthodes (et encore ). Par contre le gars qui va former un groupe de scolaires à Scratch lors d’un atelier pour lequel il dispose de quelques ordinateur portables (un peu anciens) n’a pas forcément les compétences pour réaliser ces opérations. Et pas forcément le temps non plus, et même pas les codes d’accès pour tritouiller le DHCP ou la box.
Du coup je vous propose la mienne. En bon informaticien j’essaye d’être un bon fainéant : il faut que ça soit simple, facile, pas ch… à mettre en œuvre, même par quelqu’un qui n’y connait pas grand chose.
A ce propos si vous avez besoin de bases de réseau, je vous signale (pub) qu’il y a un chapitre complet sur le réseau, spécialement écrit pour les débutants dans mon livre “Raspberry Pi 3 ou Pi Zero”. Si vous l’avez lu et/ou utilisé, n’hésitez pas à dire ce que vous en pensez dans les commentaires de cette page !
Le problème à résoudre
Il s’agit, sans rien avoir à configurer de relier un Raspberry Pi à un PC portable. Au démarrage, et sans rien avoir à faire, on connait l’adresse du Raspberry Pi, parce qu’on l’a configurée avant (sous Windows) et qu’en quelques secondes VNC est connecté et affiche l’écran du Raspberry Pi.
Ça vous tente ?
L’adressage APIPA
APIPA (Automatic Private Internet Protocol Addressing) ou IPv4LL est un processus qui permet à un système d’exploitation de s’attribuer automatiquement une adresse IP, lorsque le serveur DHCP est hors service ou injoignable.
APIPA utilise la plage d’adresses IP 169.254.0.0/16 (que l’on peut également noter 169.254.0.0/255.255.0.0), c’est-à-dire la plage dont les adresses vont de 169.254.0.0 à 169.254.255.255. Cette plage est réservée à cet usage auprès de l’IANA. (Wikipedia)
Pour résumer, lorsque vous connectez un ordinateur au réseau, celui-ci essaye de récupérer automatiquement une adresse via un serveur d’adresse, nommé DHCP (Dynamic Host Configuration Protocol ou protocole de configuration dynamique des hôtes). Ce DHCP est selon les cas un serveur (en entreprise), un routeur, ou votre box, tout simplement.
Comment faire ?
Bin… il n’y a rien à faire. Les ordinateurs actuels sont prévus pour ça ! Bien entendu si vous ne reliez la prise réseau de votre Raspberry Pi à rien… elle n’aura pas d’adresse IP.
Mais si vous reliez directement (comme sur l’image ci-dessus) votre Raspberry Pi au port réseau d’un PC (oui, d’accord, d’un MAC si vous voulez) les deux machines vont d’abord partir à la recherche d’un serveur DHCP : Elles envoient des messages : “Y’a quelqu’un ?”
Comme personne ne répond, chaque machine va prendre une adresse au hasard entre 169.254.0.0 et 169.25.255.255. Comme il y a 65536 possibilités (je ne chipote pas à une ou deux près) il y a peu de chances que plusieurs machines connectées ainsi prennent la même adresse.
La particularité de cette adresse c’est qu’elle est privée. Elle ne permet de communiquer qu’avec des équipements utilisant la même plage d’adresse. Il sera impossible d’aller sur Internet (pas de routage possible). Il est également impossible de configurer l’ordinateur avec un serveur DNS ou une adresse de passerelle.
A qui ça sert ?
Ça permet à deux ordinateurs de communiquer sans que le client “lambda” n’ait quoi que ce soit à configurer. Le réseau pour les nuls, quoi !
C’est trop beau pour être vrai !
Si, si c’est vrai. Ah oui j’oubliais de vous dire, il y a juste un truc qu’on ne sait pas, c’est quelle adresse APIPA chaque machine va prendre. Il n’y a pas de règle. C’est vraiment au hasard
Je fais quoi pour trouver l’adresse de mon Raspberry Pi, alors ?
On en revient aux solutions du début. Du coup, ce “réseau pour les nuls” devient plus difficile à utiliser par un néophyte en réseau. Pas cool
Donner une adresse APIPA fixe à un Raspberry Pi
Préparer la carte du Raspberry Pi
Créez votre carte SD comme d’habitude. Utilisez Win32DiskImager ou Etcher à votre convenance. Une fois la carte “cuite”, ouvrez le dossier auquel vous accédez depuis votre machine Windows :
Chez moi il s’appelle J: mais vous devez voir comme nom du dossier : boot. c’est la partition sur laquelle le Raspberry Pi démarre quand vous le mettez sous tension.
Modifier le fichier cmdline.txt
Ouvrez ce dossier vous devriez y trouver ce qui suit :
Le fichier qui nous intéresse c’est cmdline.txt.
Ce fichier configure un certain nombre d’options du noyau Linux. Sa particularité c’est qu’il ne doit posséder QU’UNE LIGNE ! D’où l’importance d’utiliser NotePad++ qui n’introduit pas de caractères supplémentaires indésirés.
Ouvrez cmdline.txt avec NotePad++ (ou votre éditeur de texte “propre” – évitez l’éditeur de texte de Windows NotePad)
Cliquez sur l’image pour l’agrandir… Vous verrez les options par défaut de cette version de Raspbian. On va se placer à la fin de la ligne et ajouter l’adresse IP que nous voulons attribuer à notre Raspberry Pi :
Elle est dans la plage APIPA 169.254.XX. j’ai choisi 169.254.0.53. Je mets 53 comme ça je le retiens. C’est mon année de naissance. Ça vous explique aussi le APAPI du début
Et puis c’est tout ! N’allez surtout pas à la ligne, ne tapez pas sur la touche Entrée ! Enregistrez le fichier et votre Raspberry Pi prendra cette adresse la prochaine fois qu’il démarrera et ne trouvera pas de serveur DHCP.
Bien entendu cette adresse en 0.53 est MON adresse, rien ne vous empêche de choisir plus simple, par exemple 0.1. Si vous avez plusieurs Raspberry Pi reliés chacun à un PC, vous pouvez sans remord leur mettre la même adresse IP à tous, car chacun fonctionnera sur son propre réseau.
Activer la prise de main à distance en SSH
Par défaut votre Raspberry Pi n’a aucune interface validée. Vous ne pouvez donc pas vous connecter en SSH depuis un PC. Il faudrait démarrer le Raspberry Pi en le connectant à un écran pour modifier ces paramètres. Heureusement les créateurs de Raspbian ont prévu le coup et vous pouvez activer le SSH simplement en mettant un fichier (vide) nommé ssh dans le dossier boot dont nous venons de parler.
Faites u clic droit dans le dossier boot. Choisissez Nouveau > Document texte. renommez le fichier ssh, tout simplement, sans l’extension finale .txt.
Vous devriez obtenir ceci :
Test de l’attribution d’adresse APIPA fixe
Reliez une extrémité du câble réseau à votre Raspberry Pi. Aucun autre câble n’est nécessaire. Ne branchez ni clavier, ni souris, ni câble HDMI pour l’écran.
Démarrez votre Raspberry Pi. Le temps qu’il démarre faites un tour sur le PC
Côté du PC on va voir s’il a pris une adresse APIPA : un ipconfig nous indique qu’il est en 169.254.220.73
Impeccable c’est bien une adresse de type 169.254.XX
Sur le PC démarrez putty et saisissez l’adresse que vous attribuée à votre Raspberry Pi (pour moi 169.254.0.53)
Ah, c’est de bon augure. Ça veut dire que le serveru SSH a bien démarré sur le Raspberry Pi et que putty vous indique que c’est la première fois que vous vous y connectez ! Répondez OUI.
Loguez vous au Raspberry Pi (le login par défaut est pi et le mot de passe raspberry). Vous devez avoir l’écran ci-dessus.
Démarrage du serveur VNC
Pour configurer le serveur VNC, on va utiliser raspi-config, puisqu’on est en mode texte. tapez
sudo raspi-config
Dans l’écran d’accueil, descendez sur Interfacing Options et validez
Descendez sur VNC et validez
Mettez en route en allant sur OUI (avec la touche TAB) puis validez
Votre serveur VNC est démarré sur le Raspberry Pi, vous allez pouvoir vous connecter depuis le PC en mode graphique. Faites “Entrée“
Quand vous revenez à la ligne de commande vous devez afficher ces lignes qui indiquent le démarrage du serveur VNC.
Connexion au Raspberry Pi avec VNC
Sur le PC démarrez VNC Viewer (ou autre) et saisissez l’adresse IP du Raspberry Pi. La fenêtre s’ouvre et affiche l’écran graphique du Raspberry Pi et là… vous pleurez !
Mais que s’est-il donc passé, tout allait si bien…
Je vous rappelle que notre Raspberry Pi est “headless”. Il n’a donc pas de câble HDMI. Par défaut, la vidéo est donc passée en mode analogique, au format TV… Ce qui explique ce format riquiqui. Allez ! On y retourne !
Réglage de la vidéo
Relancez raspi-config (débrouillez vous, je vous ai expliqué comment faire, juste au dessus )
Allez dans Advanced Options puis Resolution et choisissez la résolution qui vous convient (là je ne peux pas vous aider, ça dépend du PC que vous utilisez. Si vous ne savez pas… faites quelques essais )
Terminez la modification et acceptez le redémarrage du Raspberry Pi.
Reconnectez vous avec VNC…
ouf ! cette fois l’affichage est bon ! (j’avais choisi 1920×1080)
Conclusion
Après cette configuration d’un Raspberry Pi en headless vous allez pouvoir utiliser les Raspberry Pi sans avoir à leur connecter clavier, souris ou écran et sans avoir à jouer à chat (normal avec Scratch) pour découvrir leur adresse IP
J’espère que cette astuce servira à tous ceux qui animent des ateliers ou des classes dans lesquel(le)s les RasPi sont connectés via un câble réseau à des PC, portables ou non.
Si vous testez cette méthode, n’hésitez pas à faire part de vos remarques dans les commentaires ci-dessous
Sources
- http://www.frameip.com/dhcp/
- http://www.materiel-informatique.be/apipa.php
- https://www.pcastuces.com/pratique/astuces/4584.htm
- https://support.realvnc.com/knowledgebase/article/View/523/2/troubleshooting-vnc-server-on-the-raspberry-pi
Cet article Attribuer une adresse APIPA fixe à un Raspberry Pi headless a été publié en premier sur Framboise 314, le Raspberry Pi à la sauce française.....