Fazendo um script bash que reconecta ao AP quando a conexão é perdida

Fazendo um script bash que reconecta ao AP quando a conexão é perdida

Estou enfrentando problemas com WIFI no Ubuntu tentei atualizar o sistema mas ainda assim o que acontece é que de repente perco a conexão com meu roteador e quando pressiono a barra WIFI o sistema não detecta nenhum AP que preciso desmarque a opção "ativar WIFI" e verifique novamente para que funcione e ele se reconecte automaticamente.

Estou pensando em fazer um script bash que detecte quando o pc está desconectado do roteador por algum motivo, e quando for desconectado ele desabilita e depois habilita o wifi. quero dizer, como automatizar a redefinição da conexão possível?

acho que devo usar isso

nmcli nm wifi off
nmcli nm wifi on

mas como posso fazer com que o script saiba se o PC está desconectado do WIFI?

Responder1

É mais simples do que você pensa:

#!/bin/bash

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

Então você pode usar um cron job para que este script seja executado a cada minuto.

Responder2

Embora a resposta esteja correta, você deve levar em consideração que:

1) funcionará se o usuário estiver logado ou não --- este pode ser um comportamento desejado ou não, dependendo da aplicação;

2) se a reconexão atrasar mais de 1 minuto, você nunca chegará lá...

Escrevi um script simples que posso executar com os scripts iniciais da minha sessão gráfica e que pode ser um bom candidato. Eu redireciono sua saída para um arquivo para que eu possa segui-lo com meu utilitário SLogger.

Aqui está o roteiro --- você nunca 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

informação relacionada