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.
rc.local
. Rotación de registro WRT, esa es una pregunta separada que se relaciona con los archivos de registro en general (pero verman logrotate
). En este momento, ese script bloqueará (sobrescribirá) cualquier registro anterior si existe con la misma ruta, no se agregará. Para la depuración, a veces lo he usadowifi.$$.log
en el archivo wifi.conf, de modo que es poco probable que el último registro se bloquee y pueda comparar una sesión con otra después de haber modificado algo.$$
es el pid del proceso "wifi".Bueno, hay una solución muy simple:
/etc/ifplugd/action.d/
y cambie el nombre delifupdown
archivo aifupdown.original
cp /etc/wpa_supplicant/ifupdown.sh ./ifupdown
sudo reboot
Eso es todo. Pruebe esto apagando / encendiendo su AP; debería ver que su Raspberry Pi se reconecta correctamente.
fuente
action_wpa -> ../../wpa_supplicant/action_wpa.sh
, ¿quizás este es el predeterminado ahora?dhcpcd
distribuciones basadas, con el fin de conseguir este se ejecuta en RPI3 lo que necesitaapt-get install rcconf
y cambia dedhcpcd
anetworking
Recientemente me topé con una aplicación de consola que clasifica toda la configuración inalámbrica. También puede usar esta herramienta para configurar la interfaz LAN.
Instalará muchos otros paquetes y ejecutará su propio demonio en segundo plano, pero seguro que hace que la configuración sea mucho más fácil. Ejecútalo con
Si recibe un mensaje que dice que no se detectaron redes, presione
P
(debe ser mayúscula, use [SHIFT] p) y escriba wlan0 en el campo de la interfaz inalámbrica y presione F10 para guardar.R
para actualizar la lista.Puede que tenga que presionar
C
para conectarse al punto de acceso. Si estaba conectado, lo más probable es que elimine la interfaz LAN y muestre la conexión inalámbrica.También gestiona la conexión, por lo que se volverá a conectar a cualquier punto de acceso inalámbrico configurado si se desconecta por cualquier motivo.
Probé desconectar el adaptador WiFi y volver a enchufarlo. Tarda entre 60 y 90 segundos, pero se volverá a conectar a WiFi (aunque creo que la LAN debe estar desconectada)
¡Espero eso ayude!
fuente
wicd
wicd-curses
, mi RPi 3 comenzó a congelarse al azar. Nunca antes se estaba congelando y la congelación desapareció inmediatamente una vez que lo desinstalé. ¡Tener cuidado!Esto se puede resolver sin scripts adicionales.
En / etc / network / interfaces poner:
allow-hotplug wlan0 iface wlan0 inet manual wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf iface default inet dhcp
El roaming permite que la interfaz se auto-cure.
fuente
netcfg
Tratar
netcfg
. Sin más detalles sobre qué distribución está utilizando, no puedo proporcionar muchos más detalles, pero debería hacer lo que desee.fuente
Otra solución, como extraída de esta .
Primero configure su configuración wifi:
sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
agregue una sección como esta:Luego, su configuración de red con
sudo vi /etc/dhcpcd.conf
:Luego cree este archivo de secuencia de comandos en algún lugar, por ejemplo,
/home/pi/reconnect.sh
y déle+x
permiso para ser ejecutable.Luego inicie sesión como root con
sudo su
y edite el crontab de root concrontab -e
.Al final de este archivo agregue esta línea:
10 * * * * /home/pi/reconnect.sh
Eso significa: "ejecutar ese script cada 10 minutos (como root)"
Ahora, si tiene una conexión, el script se cerrará y no pasará nada. Si no puede hacer ping a su enrutador, el script intentará volver a conectarse a él usando wpa_supplicant.
Tenga en cuenta que todo lo que se repita desde un script cron (en este caso solo cuando está desconectado) se enviará por correo electrónico a la raíz. Entonces, si ha configurado sus alias de correo y postscript, recibirá un correo electrónico cada vez que se desconecte la conexión wifi de su pi y luego volverá con éxito nuevamente gracias al script.
fuente
Esto funcionó para mí, usando Raspian Jessie el 30 de marzo de 2017:
http://alexba.in/blog/2015/01/14/automatically-reconnecting-wifi-on-a-raspberrypi/
fuente