Preferisco disabilitare la maggior parte delle cose del daemon di configurazione automatica della rete e di gestione delle connessioni e gestirle da solo. Ecco uno script (bash) che manterrà la connessione attiva finché la rete è lì e non hai un driver wifi glitch o problemi di alimentazione; l'idea è di eseguire il ping del router ogni N secondi e, in caso contrario, riconnettere:
#!/bin/bash
# make sure we aren't running already
what=`basename $0`
for p in `ps h -o pid -C $what`; do
if [ $p != $$ ]; then
exit 0
fi
done
# source configuration
. /etc/wifi.conf
exec 1> /dev/null
exec 2>> $log
echo $(date) > $log
# without check_interval set, we risk a 0 sleep = busy loop
if [ ! "$check_interval" ]; then
echo "No check interval set!" >> $log
exit 1
fi
startWifi () {
dhclient -v -r
# make really sure
killall dhclient
iwconfig $wlan essid $essid
dhclient -v $wlan
}
ifconfig $eth down
ifconfig $wlan up
startWifi
while [ 1 ]; do
ping -c 1 $router_ip & wait $!
if [ $? != 0 ]; then
echo $(date)" attempting restart..." >> $log
startWifi
sleep 1
else sleep $check_interval
fi
done
Quindi, /etc/wifi.conf
in questo caso potrebbe contenere:
router_ip=192.168.0.1
log=/var/log/wifi.log
wlan=wlan0
eth=eth0
essid=someNetwork
check_interval=5
Tutto ciò presuppone una rete aperta non crittografata (se altrimenti, dovrai aggiungere i comandi appropriati). Ho usato questo approccio su varie macchine linux, incluso il pi, e funziona perfettamente; manterrà un sistema online a tempo indeterminato, anche se periodicamente va a dormire (cosa che il pi non può comunque).
Un intervallo di controllo decente è di 3-5 secondi; questa attività non avrà alcun impatto significativo sulle risorse di sistema.
È assolutamente necessario disabilitare l'auto-configurazione di rete prima ,. compresi ifplugd
e altri daemon di rete, altrimenti ciò interferirà con i tuoi sforzi:
Come posso disabilitare la rete configurata automaticamente su Raspbian?
In effetti l'ho usato apt-get remove ifplugd
.
Per avviare la rete all'avvio (poiché utilizzo il pi headless), ho questo set per l'esecuzione su raspbian da /etc/rc.local
:
wifi_mod=`lsmod | grep 8192cu`
if [ "$wifi_mod" ]; then
echo "Starting wifi..."
/usr/bin/nice -n -10 /usr/local/bin/wifi &
else
echo "Starting ethernet..."
/sbin/ifconfig eth0 up
/sbin/dhclient eth0
fi
/usr/local/bin/wifi
è la sceneggiatura. Se non sai a cosa nice
serve, leggi man nice
.
Il punto if
è che se il mio dongle wifi è collegato al pi, il modulo 8192cu verrà caricato dal kernel a questo punto - quindi il wifi dovrebbe iniziare. In caso contrario, si presume che l'ethernet sia collegato e debba essere utilizzato (in caso contrario, dhclient verrà semplicemente eliminato e non vi sarà alcun accesso alla rete).
Perché questo funzioni probabilmente dovrai farlo
Quindi, questo ottiene un pi senza testa sulla rete all'avvio e lo mantiene lì. Se desideri un modo per passare a eth mentre corri senza effettuare l'accesso, potresti fare qualcosa con le regole udev per estrarre il dongle wifi.