Ich bevorzuge es, die meisten Funktionen des Netzwerk-Autokonfigurations- und Verbindungsmanagement-Daemons zu deaktivieren und mich selbst darum zu kümmern. Hier ist ein (Bash-) Skript, das die Verbindung aufrecht erhält, solange das Netzwerk verfügbar ist und Sie keine Probleme mit dem WLAN-Treiber oder der Stromversorgung haben. Die Idee ist, alle N Sekunden einen Ping-Befehl an den Router zu senden. Wenn dies fehlschlägt, stellen Sie die Verbindung erneut her:
#!/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
So /etc/wifi.conf
könnte in diesem Fall enthalten:
router_ip=192.168.0.1
log=/var/log/wifi.log
wlan=wlan0
eth=eth0
essid=someNetwork
check_interval=5
Dies alles setzt ein offenes unverschlüsseltes Netzwerk voraus (andernfalls müssen Sie die entsprechenden Befehle hinzufügen). Ich habe diesen Ansatz auf verschiedenen Linux-Rechnern verwendet, einschließlich dem pi, und er funktioniert einwandfrei. es wird ein System auf unbestimmte Zeit online halten, auch wenn es regelmäßig in den Ruhezustand geht (was der Pi sowieso nicht kann).
Ein angemessenes Überprüfungsintervall beträgt 3-5 Sekunden. Diese Aktivität hat keine wesentlichen Auswirkungen auf die Systemressourcen.
Sie müssen unbedingt zuerst die automatische Netzwerkkonfiguration deaktivieren . einschließlich ifplugd
und anderer Netzwerk-Daemons, oder dies wird Ihre Bemühungen stören:
Wie kann ich das automatisch konfigurierte Netzwerk unter Raspbian deaktivieren?
Ich habe in der Tat verwendet apt-get remove ifplugd
.
Um beim Booten mit dem Networking zu beginnen (da ich den pi headless verwende), muss dieser Satz auf Raspbian ausgeführt werden von /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
ist das Drehbuch. Wenn Sie nicht wissen, wofür es nice
ist, lesen Sie man nice
.
Der Punkt von if
ist, dass, wenn mein Wifi-Dongle in den Pi eingesteckt ist, das 8192cu-Modul an diesem Punkt vom Kernel geladen wird - also sollte Wifi starten. Wenn nicht, wird davon ausgegangen, dass das Ethernet angeschlossen ist und verwendet werden sollte (wenn dies nicht der Fall ist, scheißt dhclient einfach aus und es gibt keinen Netzwerkzugriff).
Damit dies funktioniert, müssen Sie wahrscheinlich
Dadurch wird beim Booten ein headless pi auf das Netzwerk übertragen und dort belassen. Wenn Sie möchten, dass Sie beim Laufen zu eth wechseln, ohne sich anzumelden, können Sie mit den udev-Regeln etwas unternehmen, um den WLAN-Dongle herauszuziehen.