Installer Raspberry Pi OS sur Raspberry Pi sans clavier, ni souris, ni écran
Cet article montre comment configurer un Raspberry de A à Z à l’aide d’un ordinateur standard. Le Raspberry sera donc en mode headless, c’est-à-dire sans clavier, ni souris, ni écran.
N.B. L’article original, écrit en août 2017, s’intitulait “Installer Raspbian Stretch sur Raspberry Pi” et était accessible à cette URL : https://ouilogique.com/installer-raspian-stretch/ qui est maintenant redirigée vers l’URL actuelle.
Matériel utilisé pour cette procédure
- Un Raspberry Pi modèle 4
- Une carte SD (16 Go recommandés)
- Un ordinateur standard
- Un routeur WiFi
Préparation (~15 min)
Choix de l’OS
Anciennement, l’OS du Raspberry s’appelait Raspbian ce qui était logique puisqu’il est basé sur Debian. On devait le télécharger séparément et l’installer avec un programme qui s’appelait Etcher.
Aujourd’hui, Etcher a été remplacé par Raspberry Pi Imager et on n’a plus besoin de télécharger l’OS séparément, car c’est Raspberry Pi Imager qui s’en charge. Il peut être téléchargé ici :
On a le choix entre plusieurs moutures de l’OS. Celle que je préfère est la version “Raspberry Pi OS (64-bit)”. La raison est que j’ai besoin d’un OS 64 bit pour faire tourner Prince (https://www.princexml.com/).
Choix du terminal
Si vous êtes sur macOS ou n’importe quel système *nix, le choix est vite fait, il suffit d’utiliser le terminal par défaut. Ça ne veut pas dire qu’il n’y a qu’une possibilité, mais qu’il y a de fortes chances que vous sachiez déjà quel terminal choisir.
Par contre si vous êtes sur Windows, il y a de fortes chances que vous ne sachiez pas quel terminal choisir. Donc voici quelques possibilités.
- Windows PowerShell (intégré à Windows)
- COMMAND.COM (cmd) (intégré à Windows)
- MinGW – Git Bash installé avec Git
- Cygwin
- PuTTY
Procédure d’installation (~30 min)
Sur un ordinateur standard (pas le Raspberry), télécharger Raspberry Pi Imager et l’installer.
Dans Raspberry Pi Imager, cliquer sur “Système d’exploitation” et sélectionner l’OS de votre choix.
Insérer une carte SD sur l’ordinateur standard, cliquer sur “Choisir le stockage” et choisir la carte SD.
Important : Ouvrir les options de personnalisation de Raspberry Pi Imager, puis configurer au minimum le nom d’hôte, le nom d’utilisateur, le mot de passe et l’accès distant SSH.
Anciennement, l’activation de SSH se faisait en créant un fichier vide appelé
sshdans le répertoireboot, par exemple avec la commandetouch /Volumes/boot/ssh. Cette méthode existe encore, mais il faut alors aussi créer un utilisateur manuellement.Cliquer sur ÉCRIRE. Entrez votre mot de passe lorsque le dialogue le demande. L’écriture de l’image disque prend environ 10 min avec la vérification (si elle a été sélectionnée dans les préférences). Ces temps peuvent beaucoup varier en fonction de votre matériel.
Éjecter la carte SD.
Insérer la carte SD dans le Raspberry éteint.
Connecter le câble Ethernet.
Brancher le câble d’alimentation du Raspberry.
Après environ 30 secondes, ouvrir un terminal et se connecter au Raspberry avec la commande
ssh <utilisateur>@raspberrypi.local. Il n’y a plus de comptepiavec le mot de passeraspberrypar défaut : il faut utiliser le nom d’utilisateur et le mot de passe configurés dans Raspberry Pi Imager. Si SSH renvoie l’erreurWARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!,
c’est parce qu’une entrée existe déjà pourraspberrypi.localdans le fichier~/.ssh/known_hosts(ou sur Windows%HOMEPATH%\.ssh\known_hosts) de l’ordinateur hôte (pas le RPi). Donc pour aller plus loin, il faut supprimer les lignes qui commencent parraspberrypi.localdans le fichierknown_hosts, par exemple avecssh-keygen -R raspberrypi.local.
Retrouver un appareil sur le réseau local
Si on doit retrouver un Raspberry sur le réseau, la première commande à essayer est
ping -c1 raspberrypi.local. Mais si on ne connait pas le nom du Raspberry, alors il faut balayer toutes les adresses possibles (network scan). Il y a deux commandes utiles pour cela, arp et nmap. Sous macOS, la commande nmap peut être installée via Homebrew. Pour ceux qui préfèrent les GUI, il y a aussi Zenmap.
arp -anmap -sn 192.168.1.0/24nmap -sn 10.177.185.0/24Configuration
Explication de l’ordre de lecture des fichiers de configuration : https://linuxize.com/post/bashrc-vs-bash-profile/.
Créer un fichier bashrc personnel.
mkdir -p ~/.config/bash/
nano ~/.config/bash/bashrcCopier-coller les commandes suivantes dans ~/.config/bash/bashrc :
PS1=$'\n\n\xf0\x9f\x98\xBA'" \t – \[\033[01;32m\]\u@\h\[\033[00m\]:\W > "
alias ll='ls -lGhF'
alias la='ll -a'
alias gs='git status'
alias lsserial='python3 -m serial.tools.list_ports'
IP=$(hostname -I | awk '{print $1}')
alias pyserver='PORT=4000; echo -e "\nhttp://localhost:$PORT"; echo -e "http://$IP:$PORT\n"; /usr/bin/python3 -m http.server $PORT'
TIMEFORMAT=$'\nElapsed time: %E'Sourcer ce fichier dans ~/.bashrc
nano ~/.bashrc
USER_BASHRC="$HOME/.config/bash/bashrc"; [ -f $USER_BASHRC ] && source $USER_BASHRC
source ~/.bashrcsudo raspi-config
# Update
# Advanced Options / Expand filesystemGénérer une locale manquante
Si le shell affiche un avertissement du type suivant au démarrage, c’est généralement qu’une variable d’environnement demande une locale qui n’a pas encore été générée sur le Raspberry.
bash: warning: setlocale: LC_ALL: cannot change locale (fr_CH.UTF-8): No such file or directoryOn peut vérifier les locales disponibles avec la commande suivante :
locale -aSi fr_CH.utf8 n’apparaît pas dans la liste, il faut activer la ligne correspondante dans /etc/locale.gen, puis régénérer les locales.
sudo sed -i 's/^# *fr_CH.UTF-8 UTF-8/fr_CH.UTF-8 UTF-8/' /etc/locale.gen
sudo locale-gen fr_CH.UTF-8On peut ensuite vérifier que la locale a bien été générée.
locale -a | grep '^fr_CH\.utf8$'N.B. Cette procédure ne change pas forcément la langue par défaut du système. Elle rend seulement la locale
fr_CH.UTF-8disponible. Pour changer la langue par défaut, utilisersudo raspi-configousudo update-locale.
Mise à jour de Raspberry Pi OS
###
# ! La langue du système doit être configurée avec raspi-config avant la mise à jour.
##
# Télécharge les informations des paquets à partir des sources configurées.
# Puis met à jour les paquets installés.
sudo apt update
sudo apt full-upgrade -y
# Si nécessaire supprime les dépendances qui ne sont plus utilisées.
sudo apt autoremove --simulate
sudo apt autoremove -y
# Au jour le jour.
sudo apt update && sudo apt upgrade -y && sudo apt autoremove -yÀ voir aussi :
SSH
Sur l’ordinateur hôte
# Si le fichier ~/.ssh/id_ed25519.pub n’existe pas,
# il faut le créer avec `ssh-keygen`.
ssh-keygen -t ed25519 # Accepter toutes les valeurs par défaut.
cat ~/.ssh/id_ed25519.pub # + Copier le résultat dans le presse-papier.Édit du 2025-08-03
Infomaniak impose une clé SSH avec un algorithme sûr, par exemple ed25519 : https://www.infomaniak.com/fr/support/faq/2054/se-connecter-avec-cle-ssh. Cette clé fonctionne aussi pour se connecter à un Raspberry Pi.
Sur le RPi
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys # + Coller la clé de l’hôte à la fin du fichier.
chmod 644 ~/.ssh/authorized_keysPermissions de fichiers courants
chmod 700 ~/.ssh
chmod 644 ~/.ssh/authorized_keys
chmod 644 ~/.ssh/known_hosts
chmod 644 ~/.ssh/config
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
chmod 600 ~/.ssh/github_rsa
chmod 644 ~/.ssh/github_rsa.pub
chmod 600 ~/.ssh/mozilla_rsa
chmod 644 ~/.ssh/mozilla_rsa.pubSélection des interfaces utilisateurs
Par défaut, l’interface graphique est activée et elle consomme beaucoup de ressources. Donc si on ne l’utilise pas, il est conseillé de la désactiver. Malheureusement, lorsqu’elle est désactivée, les disques ne sont pas montés automatiquement lorsqu’on les connecte au RPi.
sudo raspi-config
# 1 System Options
# S5 Boot / Auto Login
# B2 Console Autologin ou B1 ConsoleVNC
N.B. Il faut que l’interface graphique soit activée pour que VNC fonctionne (voir § précédent).
sudo raspi-config
# Interface Options / VNC <Yes>.Télécharger un client VNC pour se connecter au serveur VNC du RPi.
Par exemple RealVNC :
N.B. Le client VNC installé par défaut sur macOS ne fonctionne pas pour se connecter au serveur VNC du RPi. L’erreur retournée est
Le logiciel de l’ordinateur distant semble ne pas être compatible avec cette version de Partage d’écran.
bash /System/Library/CoreServices/Applications/Screen\ Sharing.app
Enlever les programmes inutiles
Enfin, inutiles pour moi…
df -h # Pour voir la capacité de la carte SD
sudo apt-get purge wolfram-engine
sudo apt-get purge libreoffice*
sudo apt-get clean
sudo apt-get autoremove
df -hRéinstaller un programme qu’on croyait inutile
sudo apt-get --assume-yes update
sudo apt-get --assume-yes install wolfram-engineN.B. Selon la version de Raspberry Pi OS utilisée, le paquet
wolfram-enginepeut ne pas être disponible.
Ajouter quelques programmes utiles
Multiplexeur de terminal
Impossible de faire des sessions SSH toute la journée sans un multiplexeur de terminal.
herdr- https://herdr.dev/
- C’est la solution de l’ère de l’IA. Il affiche les états des agents de toutes vos connexions SSH. Il installe un mini daemon même sur les hébergements mutualisés. La souris se comporte comme prévu. C’est de loin le meilleur choix.
zellij- https://zellij.dev/
- Il a l’air très bien, mais je ne l’ai jamais testé.
tmux- https://tmux.app/
- C’est celui qu’on croise le plus. Il est très casse-pieds à configurer et si on ne le configure pas il est encore plus casse-pieds. Et la souris ne se comportera jamais comme prévu. À éviter si vous pouvez.
screen- https://www.gnu.org/software/screen/
- Installé par défaut sur la plupart des distros. Inutilisable pour le commun des mortels. À n’utiliser qu’en cas de désespoir absolu.
byobu- https://www.byobu.org/
- Byobu est une tentative de rendre
tmuxmoins casse-pieds etscreenutilisable par les humains. Mais on va pas se mentir, la promesse n’est pas tenue.
Partager un espace disque avec samba
Source : https://raspberrypihq.com/how-to-share-a-folder-with-a-windows-computer-from-a-raspberry-pi/
Sur le Raspberry
Installer samba
sudo apt-get --assume-yes install samba samba-common-binÉditer la configuration
sudo nano /etc/samba/smb.confVérifier la présence des informations suivantes :
workgroup = WORKGROUP
wins support = yesÀ la fin du fichier, ajouter les informations suivantes :
# Source
# https://raspberrypihq.com/how-to-share-a-folder-with-a-windows-computer-from-a-raspberry-pi/
[PiShare]
comment = Raspberry Pi Share
path = /home/<utilisateur>
browseable = yes
writeable = yes
only guest = no
create mask = 0777
directory mask = 0777
public = noLe flag public = no indique que l’accès en temps qu’invité est désactivé. Si on le change en public = yes, le disque est partagé en lecture seule.
sudo smbpasswd -a <utilisateur> # Pour changer le mot de passe.Monter le disque partagé sur macOS
Dans le Finder :
⌘ K
smb://<utilisateur>@raspberrypi.localMonter le disque partagé sur Windows
Voir
On peut aussi entrer le chemin d’accès au Raspberry au format UNC directement dans la barre d’adresse de l’explorateur Windows (raccourcis Win+E, Ctrl+L).
\\raspberrypi.localSi la résolution du nom d’hôte ne fonctionne pas, on peut aussi utiliser l’adresse IP :
\\192.168.1.240Installer d’autres versions de Python 3
# Vérifier le modèle de RPi
# Par exemple : Raspberry Pi 4 Model B Rev 1.1
cat /proc/device-tree/model
# Vérifier le _machine hardware name_
# Doit être : aarch64
uname -m
# Installer `uv` <https://docs.astral.sh/uv/#installation>
curl -LsSf https://astral.sh/uv/install.sh | sh
. "$HOME/.local/bin/env"
# Lister les versions de Python disponibles avec `uv`
uv python list
# Installer une version au choix
uv python install 3.14
# Créer et activer un environnement virtuel pour cette version de Python.
uv venv ~/.venvs/pyve14 --python 3.14
source ~/.venvs/pyve14/bin/activate
# Ajouter dans bashrc personnel (~/.config/bash/bashrc)
alias pyve14="source ~/.venvs/pyve14/bin/activate"picocom
Picocom est un terminal série.
sudo apt-get --assume-yes install picocom
picocom -b 115200 -p 1 -c /dev/ttyPour pouvoir l’utiliser sans être sudoer, il faut que l’utilisateur courant fasse partie du groupe dialout (et peut-être des groupes plugdev et input, je ne suis plus sûr). Il faut redémarrer le RPi pour que le changement soit pris en compte.
sudo usermod -a -G dialout $USER
sudo usermod -a -G plugdev $USER
sudo usermod -a -G input $USER
sudo reboottorsocks
Torsocks permet d’utiliser le réseau Tor en ligne de commande, autrement dit, il permet de “torifier” la ligne de commande.
sudo apt-get install torsocks --assume-yes
ANS=$(torsocks wget -qO- https://check.torproject.org/api/ip)
echo $ANS
# {"IsTor":true,"IP":"××.××.××.××"}YouTube-DL / yt-dlp
uv tool install yt-dlp
uv tool upgrade yt-dlpArrêter ou redémarrer un Raspberry
Ce n’est pas une bonne idée de juste tirer la prise quand on veut arrêter ou redémarrer son Raspberry. En effet, au bout de quelque temps, le système se retrouve avec un grand nombre de fichiers partiels et probablement illisibles. Si des fichiers importants sont touchés, le Raspberry peut devenir inutilisable.
Donc pour éteindre un Raspberry, on utilisera une des commandes ci-dessous. La différence entre elles n’est pas aussi évidente qu’il y parait (voir https://unix.stackexchange.com/a/196471/199660). Seule la commande halt éteint la LED rouge d’alimentation, donc je suppose que c’est celle qu’il faut privilégier.
N.B. Attention, aucune de ces commandes ne coupe l’alimentation de la carte ou l’alimentation des ports USB. Donc ce n’est pas une bonne option pour éjecter un disque externe par exemple.
sudo halt
sudo poweroff
sudo shutdown -h now --poweroffEt pour redémarrer un Raspberry, on utilisera une des commandes suivantes
sudo reboot
sudo shutdown -r nowLire un disque externe
Lorsqu’on connecte un disque externe, il est automatiquement accessible au chemin /media/<utilisateur>/nom_du_disque. Ce chemin est aussi appelé point de montage. On peut le voir avec la commande ls et accéder aux répertoires avec la commande cd. Dans l’exemple ci-dessous, le disque externe s’appelle LaCie. Ce nom changera avec d’autres fabricants ou si plusieurs disques du même fabricant sont utilisés en même temps. Il faut tenir compte de ce fait lorsqu’on écrit des scripts et des programmes qui utilisent le chemin du point de montage.
ls -l /media/<utilisateur>/
cd /media/<utilisateur>/LaCieÉjecter un disque externe
N.B. À proprement parler, seuls les médias comme les CD ou les bandes peuvent être éjectés. Mais le terme est aussi utilisé pour les autres médias.
Éjecter un média est un peu plus compliqué que de le connecter et l’utiliser. En effet, sur un Raspbery ou n’importe quel système *nix, il faut comprendre trois notions :
- Les disques
- Les partitions
- Les points de montage
Pour explorer ces concepts, utilisons la commande lsblk.
lsblk --output NAME,PATH,RM,RO,ROTA,TYPE,SIZE,FSAVAIL,MOUNTPOINTNAME PATH RM RO ROTA TYPE SIZE FSAVAIL MOUNTPOINT
sda /dev/sda 0 0 1 disk 4.5T
├─sda1 /dev/sda1 0 0 1 part 200M
└─sda2 /dev/sda2 0 0 1 part 4.5T 1T /media/<utilisateur>/LaCie
mmcblk0 /dev/mmcblk0 0 0 0 disk 29.7G
├─mmcblk0p1 /dev/mmcblk0p1 0 0 0 part 256M 201.8M /boot
└─mmcblk0p2 /dev/mmcblk0p2 0 0 0 part 29.5G 24G /Les résultats affichés par la commande lsblk ci-dessus montrent deux disques appelés sda et mmcblk0. Ils ont chacun deux partitions sda1, sda2, mmcblk0p1 et mmcblk0p2. Et ils ont chacun un ou deux points de montage /media/<utilisateur>/LaCie, /boot et /. On peut différencier les disques des partitions dans le dessin de la structure hiérarchique de la première colonne NAME et aussi dans la colonne TYPE.
L’éjection du disque se passe en deux étapes :
- Démonter ses points de montage. Dans le cas présenté, il n’en a qu’un qui est monté à
/media/<utilisateur>/LaCie, mais dont la référence se trouve à/dev/sda2. - Couper l’alimentation du disque. La référence du disque lui-même se trouve à
/dev/sda.
N.B. Il faut s’assurer que le disque n’est plus utilisé, sinon le système refusera de le démonter avec l’erreur
target is busy. C’est à ça que sert le changement de répertoire ci-dessous.
cd
udisksctl unmount --block-device /dev/sda2
sudo udisksctl power-off --block-device /dev/sdaPour aller plus loin
Configurer les interfaces réseaux
Pour activer ou désactiver les différentes interfaces réseaux, on peut utiliser nmtui.
À voir aussi
Quelques commandes utiles
- Déterminer le modèle de Raspberry
cat /sys/firmware/devicetree/base/model
# Raspberry Pi 4 Model B Rev 1.1- Déterminer la version de l’OS
cat /etc/os-release