La carte graphique de mon ordinateur ayant malencontreusement rendu l'âme (on le saura !), j'ai dû survivre quelques temps à partir du mode failsafe d'OpenSuse, une ligne de commande standard.

Ayant pas mal ramé avant de pouvoir configurer mon wifi WPA, je vous livre ici la séquence qui fait tout ;)

Pré requis :

  • une carte wifi compatible (c'est la grande majorité des cas maintenant) ;
  • une ligne de commande (ça peut paraître évident, mais qui sait ! )
  • Un noyau linux « normal », et l'utilitaire wpa_supplicant. Sur certaines distributions, il se peut que wpa_supplicant ne soit pas installé par défaut : dans ce cas-là il faudra se débrouiller pour l'installer en local. Pour savoir si wpa_supplicant est présent, vérifiez si vous avez accès à la commande wpa_passphrase : si oui, pas de problème !
  • Un émetteur Wifi WPA. Ici, on l'appellera MaBox et le mot de passe sera MonMDP.

C'est bon ? On est parti !

Note : la quasi-totalité des commandes ci-dessous nécessitent d'être lancées en tant que super utilisateur.

Préparation

Le WPA n'est pas géré nativement par Linux, il faut passer par wpa_supplicant qui se chargera des échanges et du protocole de connexion. La configuration se fait par un fichier.
Avec votre éditeur de texte préféré, créez wpa.conf avec les informations qui suivent. Pensez à remplacer les exemples par vos valeurs !

ctrl_interface=/var/run/wpa_supplicant
eapol_version=1
ap_scan=1
fast_reauth=1

network={
	ssid="MonMDP"
	scan_ssid=1
	proto=WPA
	key_mgmt=WPA-PSK
	psk="MonMDP"
	priority=5
}

Initialisation du wifi

Première étape, activer la carte wifi :

ip link set wlan0 up

Ensuite, on va récupérer la liste des émetteurs wifi captés :

iwlist scan 2>/dev/null | grep ESSID

Vous devriez avoir trouvé votre point d'accès ; il va ensuite falloir dire chez qui vous souhaitez vous connecter (peu importe la clé pour le moment ; ne mettez pas de guillemets autour du SSID) :

iwconfig wlan0 essid MaBox && iwconfig wlan0 | grep ESSID

Note : la deuxième commande permet de vérifier que la modification est enregistrée.

Avant de continuer, il faut tuer sauvagement toutes les instances de wpa_supplicant qui tournent en fond. On ne peut pas se contenter d'un simple killall wpa_supplicant car le processus est automatiquement relancé par défaut. Après de multiples essais, je me suis fixé sur la commande suivante qui tue le groupe de processus :

killall -g -s SIGTERM wpa_supplicant

On peut ensuite lancer notre instance (remplacez /root/wpa.conf par le chemin absolu vers votre fichier, mais ne rajoutez pas d'espace entre l'option c et le path) :

Pensez à l'esperluette à la fin, pour récupérer une console utilisable malgé la tâche de fond :D

wpa_supplicant -dddt -iwlan0 -c/root/wpa. conf -Dwext -f /var/log/wpa_supplicant.log &

Concernant le driver, j'ai mis le choix générique. Si vous n'avez aucune idée de votre driver, vous êtes en wext (c'est le cas dans la commande). Sinon, consultez l'aide de wpa_supplicant pour une liste des pilotes supportés.

Note : j'ai redirigé la sortie avec l'option f. Si les commandes qui suivent ne marchent pas, il est probable que le fichier de log contienne les erreurs (par exemple, et de façon non exhaustive : mauvais protocole, fichier de configuration invalide, mauvais mot de passe, SSID introuvable, instance de wpa_supplicant déjà lancée… ). Vous pouvez aussi lancer la commande en enlevant l'option -f et l'esperluette à la fin pour avoir les erreurs en direct… même si ça défile vite !

Patientez quelques secondes avant d'effectuer la suite, histoire que wpa_supplicant ait le temps de scanner et d'initier la connexion.
À cette étape vous avez établi la liaison avec le point d'accès (mais tout n'est pas encore fini ! ). Vous pouvez vérifier cela si vous disposez d'un accès administrateur sur le routeur : dans la liste des appareils connectés votre adresse mac est normalement apparue (et elle n'a, pour l'instant, aucune IP associée).

Connexion

Voilà, on dialogue maintenant avec la box… mais pas encore avec Internet. On va demander une adresse IP au routeur, histoire de pouvoir surfer :

dhclient wlan0

Note : votre routeur doit être compatible DHCP. Si ce n'est pas le cas, vous pouvez activer ce protocole dans les paramètres d'administration, référez-vous à la documentation de votre matériel.

Note : Si tout va bien, la commande devrait vous renvoyer votre nouvelle adresse IP, ainsi que le temps avant son expiration. Bienvenue sur Internet ! En revanche, si vous avez plusieurs requêtes qui échouent pour finir sur un « no working leases in persistant database », c'est que vous avez mal configuré wpa_supplicant. Consultez /var/log/wpa_supplicant.log pour les détails… bonne chance ; )

Enfin, on va indiquer à notre ordinateur par où passer pour les communications « extérieures » :

route add default gw 192.168.1.1

Note : Remplacez 192.168.1.1 par l'adresse IP de votre routeur.

Et voilà !
Essayez de pinger google.fr pour savoir si tout marche :

ping google.fr

(J'en profite pour remercier cet article de CCM qui m'a bien aidé pour le fichier de configuration, et le site officiel de la distribution qui donne des pistes de départ ! )

En bonus

Pour les fainéants, voilà le script bash pour se connecter directement. Attention, cela ne vous dispense pas de configurer wpa.conf ! Je ne peux malheureusement pas deviner votre point d'accès et son mot de passe…
Enregistrez le fichier (connectWifi.sh par exemple), ajoutez-lui les droits d'exécutable (chmod +x connectWifi.sh)… et c'est parti (./connectWifi.sh).

echo "->Démarrage de la carte wifi"
ip link set wlan0 up

echo "->Récupération de la liste"
iwlist scan 2>/dev/null | grep ESSID

echo "->Enregistrement du ESSID demandé"
iwconfig wlan0 essid MaBox
iwconfig wlan0 | grep ESSID

echo "->Démarrage de la session"
killall -g -s SIGTERM wpa_supplicant
wpa_supplicant -dddt -iwlan0 -c/root/wpa.conf -Dwext -f /var/log/wpa_supplicant.log &

echo "->En attente de l'accrochage réseau"
sleep 15

echo "->Récupération d'une adresse IP"
dhclient wlan0

echo "->Mise en place des routes de transfert"
route add default gw 192.168.1.1

echo "===Bienvenue sur Internet==="