Je préfère désactiver la plupart des tâches du démon de configuration automatique du réseau et de gestion des connexions et les gérer moi-même. Voici un script (bash) qui maintiendra la connexion en place tant que le réseau est en place et que vous n’avez pas de pilote wifi défectueux ni de problème d’alimentation; L'idée est d'envoyer une requête ping au routeur toutes les N secondes et, en cas d'échec, de vous reconnecter:
#!/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
Donc, /etc/wifi.conf
dans ce cas pourrait contenir:
router_ip=192.168.0.1
log=/var/log/wifi.log
wlan=wlan0
eth=eth0
essid=someNetwork
check_interval=5
Tout cela suppose un réseau non crypté ouvert (sinon, vous devrez ajouter les commandes appropriées). J'ai utilisé cette approche sur diverses machines Linux, y compris la pi, et cela fonctionne parfaitement; il gardera un système en ligne indéfiniment, même s'il se met périodiquement en veille (ce que le pi ne peut pas de toute façon).
Un intervalle de vérification décent est 3-5 secondes; cette activité n'aura aucun impact significatif sur les ressources système.
Vous ne devez absolument désactiver la configuration automatique premier réseau ,. y compris ifplugd
et d’autres démons de réseautage, sinon cela entravera vos efforts:
Comment puis-je désactiver la mise en réseau autoconfigurée sur Raspbian?
J'ai en fait utilisé apt-get remove ifplugd
.
Pour démarrer la mise en réseau au démarrage (puisque j'utilise le pi headless), j'ai ce jeu pour fonctionner sur raspbian à partir de /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
est le script. Si vous ne savez pas à quoi ça nice
sert, lisez man nice
.
Le fait if
est que si mon dongle wifi est branché sur le pi, le module 8192cu sera chargé par le noyau à ce stade - le wifi devrait donc commencer. Si ce n'est pas le cas, alors on suppose que l'Ethernet est branché et qu'il devrait être utilisé (sinon, dhclient ne fera que déborder et il n'y aura pas d'accès au réseau).
Pour que cela fonctionne, vous devrez probablement
Donc, cela obtient un pi sans tête sur le réseau au démarrage et le maintient là. Si vous vouliez un moyen de passer à eth en cours d'exécution sans vous connecter, vous pouvez utiliser les règles udev pour retirer le dongle wifi.