¿Cómo persistir en una conexión wifi después de la desconexión?


9

Tengo una máquina Ubuntu que ejecuta un software que requiere internet. Sin embargo, a veces el wifi falla (reinicio del enrutador, por ejemplo) y no encuentra la red nuevamente, hasta que reparo manualmente el reinicio del administrador de red o apago y enciendo el wifi para encontrarlo.

¿Hay alguna manera posible de ejecutar un trabajo cron o un trabajo de supervisión para monitorear la conectividad y si no se puede encontrar la red para reiniciar el servicio de administrador de red y conectarse a ese SSID específico?


Creo que esto podría deberse a un nuevo error del administrador de red, ya que también comencé a experimentar este problema recientemente, creo que después de actualizar a Ubuntu 15.04.
Sadi

1
Hay una serie de informes de errores que sugieren que puede haber un problema. ¿Podría publicar detalles de su kernel (uname -a) y la versión del administrador de red, y también detalles de su tarjeta WiFi.
DaveM

Respuestas:


7

Creo que esto podría deberse a un nuevo error del administrador de red, ya que también comencé a experimentar este problema recientemente, creo que después de actualizar a Ubuntu 15.04.

Parece que he logrado resolver este problema temporalmente como una solución alternativa con estos dos archivos:

  1. Tengo un archivo de secuencia de comandos para ver la conexión WiFi y activar y desactivar WiFi cuando esté desconectado, por ejemplo ~/.bin/WiFi-Keep-Connected, con este contenido:


#!/bin/bash
while true; do
    LC_ALL=C nmcli -t -f TYPE,STATE dev | grep "^wifi:disconnected$"
    if [ $? -eq 0 ]; then
        rfkill block wifi && rfkill unblock wifi
        sleep 10
    fi
    sleep 10
done

  1. También tengo un archivo .desktop para mantener este script ejecutándose cada vez que inicio sesión, por ejemplo ~/.config/autostart/KeepWifiConnected.desktop, con este contenido:


[Desktop Entry]
Type=Application
Exec=/home/"username"/.bin/WiFi-Keep-Connected
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=Keep WiFi Connected
Icon=networkmanager

Nota: Deberá ingresar su nombre de usuario en la ruta indicada Exec=anteriormente.

NB: a veces reiniciar Wi-Fi de esta manera no es suficiente, en cuyo caso tengo que reiniciar Network Manager ingresando este comando una o incluso dos veces desde el terminal:sudo service network-manager restart

Por lo tanto, podría ser una mejor idea modificar el script anterior (por si acaso) así:


#!/bin/bash
while true; do
    LC_ALL=C nmcli -t -f TYPE,STATE dev | grep "^wifi:disconnected$"
    if [ $? -eq 0 ]; then
        rfkill block wifi && rfkill unblock wifi
        sleep 10
    fi
    LC_ALL=C nmcli -t -f TYPE,STATE dev | grep "^wifi:disconnected$"
    if [ $? -eq 0 ]; then
        gksudo service network-manager restart
        sleep 10
    fi
    sleep 10
done


1

No sé por qué, pero como mencionas, a veces cuando falla el wifi, el administrador de red no encuentra la red nuevamente.

Creo que el problema es que el administrador de red, después de una falla de conexión wifi, no actualiza la lista de wifi (y parece que el administrador de red oculta la red problemática). Network-manager no tiene una opción de menú para volver a escanear, y deshabilitar y habilitar la casilla de verificación inalámbrica en el menú de network-manager no obliga a un nuevo escaneo wifi (como lo hace reiniciar el servicio).

Cuando el administrador de red pierde mi conexión inalámbrica y no vuelve a encontrar mi wifi (y sé que el wifi está operativo), ejecuto el comando:

sudo iwlist wlan0 scan

Realiza un escaneo wifi en la interfaz wlan0 (wlan0 es el nombre de la interfaz inalámbrica en mi computadora portátil) y le muestra las redes inalámbricas disponibles, pero como efecto secundario, el administrador de red actualiza automáticamente su lista y encuentra la red perdida.

Prefiero ejecutar el comando manualmente cuando ocurre este problema (la reconexión de red no garantiza la reanudación de la comunicación y algunos programas deberán reiniciarse).

Pero, como mencionas, puedes cronificarlo y puedes hacerlo sin probar la conectividad (el proceso de escaneo actualiza tu lista wifi pero no cierra tu conexión inalámbrica actual, si estás conectado).

Si lo prefiere, puede probar la conectividad utilizando ping o iwconfig y, si no está conectado, inicie el escaneo.

Algo como:

#!/bin/bash
if ! ping -c 1 -W 1 your_router_ip &> /dev/null
then
    iwlist wlan0 scan
fi

Pero recuerde que este script se debe sudo o ejecutar con privilegios de root. Envía solo 1 ping con 1 segundo de tiempo de espera.


La solución anterior está bien, pero cómo detectar la notificación del administrador de red (nm) de que la conexión se ha caído. Esto debería ser posible desde nm, una mirada rápida a través de la fuente parece sugerir que la funcionalidad está ahí. El mensaje se toma de dbus y el icono nm se actualiza, por lo que es posible que se trate de un error, o tal vez otra parte del sistema detecta la caída de la conexión y se ha modificado y el aviso ya no pasa para intentar volver a conectarse.
DaveM

0

Creo que el problema es que la conexión se pierde debido a problemas de conectividad del enrutador. Reiniciar el administrador de red no podría ayudar cuando el enrutador en sí tiene problemas. En su lugar, podría crear un script para suspender el proceso que ejecuta el software usando SIGSTOP cuando se pierde la conexión, y nuevamente activar el proceso para continuar usando SIGCONT cuando la red esté disponible. Y agregue el script a sus trabajos cron, programándolo para que se ejecute cada minuto.

Para su referencia: http://hints.macworld.com/article.php?story=20030915193440334

Espero que esto ayude.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.