Prefiero deshabilitar la mayor parte de la configuración automática de red y el daemon de administración de conexión y tratarlo yo mismo. Aquí hay un script (bash) que mantendrá la conexión activa mientras la red esté allí y no tenga un controlador wifi defectuoso o problemas de alimentación; la idea es hacer ping al enrutador cada N segundos, y si eso falla, vuelva a conectar:
#!/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
Entonces, /etc/wifi.conf
en este caso podría contener:
router_ip=192.168.0.1
log=/var/log/wifi.log
wlan=wlan0
eth=eth0
essid=someNetwork
check_interval=5
Todo esto supone una red abierta no encriptada (de lo contrario, tendrá que agregar los comandos apropiados). He utilizado este enfoque en varias máquinas Linux, incluido el pi, y funciona a la perfección; mantendrá un sistema en línea indefinidamente, incluso si se va a dormir periódicamente (lo que el pi no puede de todos modos).
Un intervalo de verificación decente es de 3-5 segundos; Esta actividad no tendrá un impacto significativo en los recursos del sistema.
A pesar de todo hay que desactivar la configuración automática de la red primero ,. incluidos ifplugd
y otros demonios de redes, o esto interferirá con sus esfuerzos:
¿Cómo puedo desactivar las redes autoconfiguradas en Raspbian?
De hecho lo usé apt-get remove ifplugd
.
Para iniciar la red en el arranque (ya que uso el pi sin cabeza), tengo este conjunto para ejecutar en raspbian desde /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
Es el guión. Si no sabes para qué nice
sirve, lee man nice
.
El punto if
es que si mi dongle wifi está enchufado en el pi, el núcleo cargará el módulo 8192cu en este punto, por lo que el wifi debería comenzar. Si no es así, se supone que el ethernet está enchufado y debe usarse (si no lo está, dhclient simplemente no funcionará y no habrá acceso a la red).
Para que esto funcione, probablemente tendrá que
Entonces, esto obtiene un pi sin cabeza en la red en el arranque y lo mantiene allí. Si desea una forma de cambiar a eth mientras se ejecuta sin iniciar sesión, puede hacer algo con las reglas de udev para extraer el dongle wifi.