199 lines
8.7 KiB
Markdown
199 lines
8.7 KiB
Markdown
# Changer de réseau Wi-Fi sur un Raspberry Pi
|
|
|
|
> **Avant de commencer** : la procédure dépend de la version de Raspberry Pi OS installée. Depuis Bookworm (octobre 2023) puis Trixie (octobre 2025), Raspberry Pi OS gère le Wi-Fi avec **NetworkManager**. Les versions plus anciennes (Bullseye et antérieures, en fin de vie) utilisent encore `wpa_supplicant`.
|
|
>
|
|
> Pour identifier votre version :
|
|
> ```bash
|
|
> cat /etc/os-release
|
|
> ```
|
|
> Cherchez la ligne `VERSION_CODENAME=` : `trixie` ou `bookworm` → NetworkManager (section principale ci-dessous). `bullseye` ou plus ancien → `wpa_supplicant` (section *Cas hérité* en fin d'article).
|
|
>
|
|
> ⚠️ **Si vous êtes connecté en SSH via le Wi-Fi que vous allez modifier**, vous risquez fortement de perdre la connexion au moment du basculement, sans pouvoir reprendre la main. Prévoyez un secours : clavier/écran branchés sur le Pi, ou un câble Ethernet, ou *a minima* un accès physique pour redémarrer.
|
|
|
|
## Un peu de contexte avant de taper des commandes
|
|
|
|
Sur un système Linux, "se connecter au Wi-Fi" implique trois étages qui doivent collaborer :
|
|
|
|
1. **Le pilote** de la puce Wi-Fi, fourni par le noyau, qui sait parler à la radio.
|
|
2. **Le supplicant** (wpa_supplicant), qui négocie l'authentification WPA2/WPA3 avec le point d'accès.
|
|
3. **Le gestionnaire de connexion** (NetworkManager ou `dhcpcd`), qui décide *quel* réseau rejoindre, conserve les profils enregistrés, et demande une adresse IP en DHCP une fois la liaison établie.
|
|
|
|
Historiquement, Raspberry Pi OS faisait écrire les profils Wi-Fi directement dans `/etc/wpa_supplicant/wpa_supplicant.conf` — un seul fichier texte global. Depuis Bookworm, **NetworkManager** prend ce rôle : chaque réseau enregistré devient un fichier de profil distinct dans `/etc/NetworkManager/system-connections/`, ce qui rend la gestion multi-réseaux beaucoup plus propre (chaque profil a ses propres options : priorité, IP statique, DNS, etc., sans interférer avec les autres). C'est ce changement qui explique pourquoi les anciens tutoriels ne marchent plus tels quels sur un Pi récent.
|
|
|
|
## Méthode la plus simple : `raspi-config`
|
|
|
|
L'outil officiel reste la voie la plus rapide, et il fonctionne sur **toutes les versions** — il appelle la bonne API en coulisses (NetworkManager ou `wpa_supplicant`) selon votre système. Pas besoin de se souvenir de quel outil utilise quelle version.
|
|
|
|
```bash
|
|
sudo raspi-config
|
|
```
|
|
|
|
Naviguez vers : *System Options → Wireless LAN* et suivez les invites (code pays, SSID, mot de passe).
|
|
|
|
**En une seule ligne, sans interaction** (pratique en script ou via SSH sur Ethernet) :
|
|
|
|
```bash
|
|
sudo raspi-config nonint do_wifi_ssid_passphrase "nom-reseau" "mot-de-passe"
|
|
```
|
|
|
|
> 💡 **Pourquoi le code pays compte.** Les canaux Wi-Fi autorisés diffèrent d'un pays à l'autre, surtout en 5 GHz. Si votre Pi ne *voit pas* votre réseau 5 GHz alors qu'il est juste à côté de la box, vérifiez le code pays avec `raspi-config → Localisation Options → WLAN Country` (ou `iw reg get` en ligne de commande). Un code pays absent ou incorrect bloque la radio sur les seuls canaux 2,4 GHz universels.
|
|
|
|
## Méthode NetworkManager (Bookworm, Trixie et au-delà)
|
|
|
|
Si vous voulez comprendre ce que fait l'outil — ou scripter votre propre déploiement — voici les commandes natives. L'outil en ligne de commande s'appelle `nmcli` (NetworkManager Command Line Interface).
|
|
|
|
### Ajouter un réseau et s'y connecter
|
|
|
|
```bash
|
|
sudo nmcli device wifi connect "nom-reseau" password "mot-de-passe"
|
|
```
|
|
|
|
Cette unique commande fait trois choses en cascade : elle crée un profil de connexion, l'active immédiatement, et coche automatiquement *autoconnect* pour que le Pi rejoigne ce réseau au prochain démarrage. Le profil est sauvegardé dans `/etc/NetworkManager/system-connections/nom-reseau.nmconnection`.
|
|
|
|
### Interface en mode texte (plus visuel)
|
|
|
|
Pour ceux qui préfèrent naviguer dans des menus en console :
|
|
|
|
```bash
|
|
sudo nmtui
|
|
```
|
|
|
|
C'est utile quand on a un accès clavier/écran direct mais pas de souris.
|
|
|
|
### Inspecter ce qui est configuré
|
|
|
|
```bash
|
|
nmcli connection show # liste tous les profils enregistrés
|
|
nmcli device wifi list # affiche les réseaux à portée
|
|
nmcli device status # état actuel de chaque interface
|
|
```
|
|
|
|
`nmcli connection show` est l'équivalent moderne du "regarder dans `wpa_supplicant.conf`" d'autrefois : c'est là qu'on vérifie ce que le Pi a en mémoire.
|
|
|
|
### Basculer entre deux réseaux déjà connus
|
|
|
|
Si vous avez déjà enregistré le réseau du bureau et celui de la maison, pas besoin de re-saisir le mot de passe :
|
|
|
|
```bash
|
|
sudo nmcli connection up "nom-du-profil"
|
|
```
|
|
|
|
### Oublier un réseau
|
|
|
|
```bash
|
|
sudo nmcli connection delete "nom-du-profil"
|
|
```
|
|
|
|
Cela supprime le fichier `.nmconnection` correspondant. Utile quand vous avez tapé un mauvais mot de passe la première fois — sinon le Pi continuera à retenter avec les mauvais identifiants.
|
|
|
|
## Méthode manuelle : éditer un fichier `.nmconnection`
|
|
|
|
Pour des cas spécifiques (préprovisionnement sur une carte SD, déploiement en masse, IP statique avec options pointues), vous pouvez écrire directement le fichier de profil. Créez `/etc/NetworkManager/system-connections/mon-wifi.nmconnection` :
|
|
|
|
```ini
|
|
[connection]
|
|
id=mon-wifi
|
|
type=wifi
|
|
autoconnect=true
|
|
interface-name=wlan0
|
|
|
|
[wifi]
|
|
mode=infrastructure
|
|
ssid=nom-reseau
|
|
|
|
[wifi-security]
|
|
key-mgmt=wpa-psk
|
|
psk=mot-de-passe
|
|
|
|
[ipv4]
|
|
method=auto
|
|
|
|
[ipv6]
|
|
method=auto
|
|
```
|
|
|
|
**Une étape qu'on oublie souvent et qui fait tout échouer** : NetworkManager **refuse** de charger un fichier de profil dont les permissions sont trop laxistes (le mot de passe Wi-Fi est en clair dedans). Il faut donc :
|
|
|
|
```bash
|
|
sudo chmod 600 /etc/NetworkManager/system-connections/mon-wifi.nmconnection
|
|
sudo chown root:root /etc/NetworkManager/system-connections/mon-wifi.nmconnection
|
|
```
|
|
|
|
Puis demander à NetworkManager de relire ses profils :
|
|
|
|
```bash
|
|
sudo nmcli connection reload
|
|
sudo nmcli connection up mon-wifi
|
|
```
|
|
|
|
Si vous omettez `chmod 600`, le profil est silencieusement ignoré et vous tournerez en rond à chercher pourquoi rien ne se passe.
|
|
|
|
## Cas hérité : Bullseye et antérieur (`wpa_supplicant`)
|
|
|
|
Sur ces versions plus anciennes, `wpa_supplicant.conf` est encore le fichier de référence. Important : **sur Bookworm et Trixie, ce fichier n'est lu qu'au tout premier démarrage** (pour récupérer ce que l'outil Imager a éventuellement préprovisionné) ; après ça, il est ignoré. N'essayez donc pas de l'éditer sur un système moderne, vous ne verrez aucun effet.
|
|
|
|
Sur Bullseye, en revanche, on édite :
|
|
|
|
```bash
|
|
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
|
|
```
|
|
|
|
Le fichier ressemble à ceci :
|
|
|
|
```
|
|
ctrl_interface=/run/wpa_supplicant
|
|
update_config=1
|
|
country=FR
|
|
network={
|
|
ssid="nom-reseau"
|
|
psk="mot-de-passe"
|
|
}
|
|
```
|
|
|
|
> 💡 **Pourquoi `country=FR`.** Même remarque que plus haut : sans code pays, la puce Wi-Fi reste bridée. Adaptez à votre pays réel (`country=BE`, `country=CH`, etc.).
|
|
|
|
Une fois enregistré, on demande à `wpa_supplicant` de recharger sa configuration *sans* redémarrer le service — ce qui évite de couper d'autres interfaces actives :
|
|
|
|
```bash
|
|
sudo wpa_cli -i wlan0 reconfigure
|
|
```
|
|
|
|
La nouvelle configuration s'applique immédiatement et la connexion bascule.
|
|
|
|
### Quand la reconfiguration douce ne suffit pas
|
|
|
|
Service dans un état incohérent, processus orphelin après un crash, configuration partiellement appliquée… il faut alors taper plus fort en relançant les deux services qui collaborent (le supplicant pour l'authentification, `dhcpcd` pour l'IP) :
|
|
|
|
```bash
|
|
sudo systemctl restart wpa_supplicant
|
|
sudo systemctl restart dhcpcd
|
|
```
|
|
|
|
Vérifiez que `wpa_supplicant` est bien actif :
|
|
|
|
```bash
|
|
systemctl status wpa_supplicant
|
|
```
|
|
|
|
Et que l'interface a obtenu une adresse IP (s'il n'y a pas de ligne `inet 192.168.x.x`, c'est que le DHCP n'a pas répondu — souvent parce que l'authentification Wi-Fi a en réalité échoué juste avant) :
|
|
|
|
```bash
|
|
ip addr show wlan0
|
|
```
|
|
|
|
## Vérifications utiles dans tous les cas
|
|
|
|
Que vous soyez sur NetworkManager ou `wpa_supplicant`, voici les commandes de diagnostic qui marchent partout :
|
|
|
|
```bash
|
|
ip addr show wlan0 # ai-je une adresse IP sur le Wi-Fi ?
|
|
ping -I wlan0 8.8.8.8 # le Wi-Fi route-t-il réellement le trafic ?
|
|
iw dev wlan0 link # à quel point d'accès suis-je associé, et avec quel signal ?
|
|
```
|
|
|
|
La séquence logique en dépannage : *interface up* → *associée au SSID* → *adresse IP attribuée* → *Internet accessible*. Quand ça ne marche pas, identifier à quelle étape ça coince fait gagner un temps considérable plutôt que de tout redémarrer au hasard.
|
|
|
|
---
|
|
|
|
Après ces étapes, votre Raspberry Pi se connecte au nouveau réseau, et le profil est mémorisé pour les prochains démarrages.
|