Ci tenevo a mettere un punto alla questione e, sebbene a distanza di un po' di tempo, credo di aver infine trovato una soluzione stabile.
Dopo vari tentativi, sono infatti arrivato alla conclusione che la connessione ha ottime probabilità di successo quando esista - preventivamente - un file di configurazione: tipicamente
etc/wpa_supplicant/wpa_supplicant.conf.
Riporto di seguito la configurazione del mio
wpa_supplicant.conf dove, per completezza, ho previsto, nell'ordine:
- una rete WPA2/PSK (TP-LINK_E4FA54)
- una rete aperta (Nokia 5.1)
- eventuali reti free (alle quali connettersi solo in ultima istanza)
Codice: Seleziona tutto
$ cat /etc/wpa_supplicant/wpa_supplicant.conf
network={
ssid="TP-LINK_E4FA54"
psk=c2737b66f093011f5d7d00a56dfd46141b22ca6cce1d6c1c00f0031f7c6661fb
}
network={
ssid="Nokia 5.1"
key_mgmt=NONE
}
network={
key_mgmt=NONE
priority=-999
}
Segue, allora, lo script che opera la connessione (
wlp2s0 è l'interfaccia di rete wireless e si suppone che sia abilitato il servizio
dhcpcd). Notare anche come lo script tenti di instaurare la connessione fino ad un massimo 10 volte e come ad ogni cambio di stato lato hw segua una pausa di 3 secondi.
Codice: Seleziona tutto
$ cat wireless_connect
#!/bin/bash
[ $EUID -ne 0 ] && { echo "You must be root to run this script."; exit 1; }
wif="wlp2s0"
k=0
while [ $(iw dev wlp2s0 link | grep "Not connected" > /dev/null; echo $?) -eq 0 ]
do
ip link show up | grep "$wif" > /dev/null || { ip link set $wif up && sleep 3; }
ps -e | grep wpa_supplicant > /dev/null && { killall wpa_supplicant && sleep 3; }
wpa_supplicant -B -i $wif -c /etc/wpa_supplicant/wpa_supplicant.conf > /dev/null && sleep 3
[ $k -lt 9 ] && ((k=$k+1)) || { echo "Not possible to connect"; exit 1; }
done
dhcpcd $wif
iw dev wlp2s0 link
exit 0
That's all
