Hacer un script bash que se reconecta al AP cuando se pierde la conexión

Hacer un script bash que se reconecta al AP cuando se pierde la conexión

Tengo problemas con WIFI en ubuntu. Intenté actualizar el sistema pero sigue igual. Lo que sucede es que de repente pierdo la conexión con mi enrutador y cuando presiono la barra de WIFI el sistema no detecta ningún AP que tenga que Desmarque la opción "habilitar WIFI", luego vuelva a verificarla para que funcione y se vuelva a conectar automáticamente.

Estoy pensando en hacer un script bash que detecte cuando la PC está desconectada del enrutador por cualquier motivo, y cuando esté desconectada deshabilite y luego habilite el wifi. Me refiero a automatizar el restablecimiento de la conexión, ¿es posible?

Supongo que debo usar esto.

nmcli nm wifi off
nmcli nm wifi on

pero ¿cómo puedo hacer que el script sepa si la PC está desconectada del WIFI?

Respuesta1

Es más sencillo de lo que crees:

#!/bin/bash

if ! [ "$(ping -c 1 google.com)" ]; then
    nmcli nm wifi off
    nmcli nm wifi on
fi

Luego puede usar un trabajo cron para que este script se ejecute cada minuto.

Respuesta2

Aunque la respuesta es correcta, hay que tener en cuenta que:

1) funcionará si el usuario ha iniciado sesión o no; este podría ser el comportamiento deseado o no, según la aplicación;

2) si la reconexión se demora más de 1 minuto, nunca llegarás...

Escribí un script simple que puedo ejecutar con los scripts iniciales de mi sesión gráfica y que puede ser un buen candidato. Redirijo su salida a un archivo para poder seguirlo con mi utilidad SLogger.

Aquí está el guión... nunca se sabe.

#!/bin/bash
while /bin/true; do
    if ! [ "$(ping -c 1 google.com)" ]; then
        echo "Warning: connection lost at $(date) -- restart"  
        nmcli nm wifi off
        sleep 5
        nmcli nm wifi on
        sleep 60
        if ! [ "$(ping -c 1 google.com)" ]; then
             echo "Waiting for connection going up at $(date)"
             sleep 60
        else 
             echo "Connection on at $(date)" 
        fi
#    else
#        echo "Connection OK on $(date)"
    fi
sleep 60
done

información relacionada