Como persistir em uma conexão wifi após a desconexão?

9

Eu tenho uma máquina Ubuntu rodando um software que requer internet. No entanto, às vezes, o wifi falha (reinicialização do roteador, por exemplo) e não encontra a rede novamente, até que eu reinicie manualmente o reinício do gerenciador de rede ou desligo o wifi para encontrá-lo.

Existe uma maneira possível de executar uma tarefa cron ou uma tarefa supervisord para monitorar a conectividade e se a rede não puder ser encontrada para reiniciar o serviço gerenciador de rede e se conectar a esse SSID específico?

    
por Blue Genie 24.05.2015 / 09:51

3 respostas

7

Acho que isso pode ser devido a um novo bug do gerenciador de rede, já que também comecei a ter esse problema apenas recentemente - acho que depois de atualizar para o Ubuntu 15.04.

Parece que consegui resolver esse problema temporariamente como uma solução alternativa para esses dois arquivos:

  1. Eu tenho um arquivo de script para assistir à conexão Wi-Fi e ativar e desativar o Wi-Fi quando desconectado, por exemplo, ~/.bin/WiFi-Keep-Connected , com este conteúdo:


#!/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. Eu também tenho um arquivo .desktop para manter esse script em execução toda vez que eu fizer login, por exemplo ~/.config/autostart/KeepWifiConnected.desktop , com este conteúdo:


[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

Observação: você precisará inserir seu nome de usuário no caminho fornecido para Exec= acima.

NB: Às vezes, reiniciando o Wi-Fi dessa maneira não é suficiente, nesse caso eu tenho que reiniciar o Network Manager inserindo este comando uma ou duas vezes a partir do terminal: sudo service network-manager restart

Portanto, pode ser uma idéia melhor para modificar o script acima (apenas no caso) assim:


#!/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
    
por Sadi 29.05.2015 / 12:45
1

Eu não sei porque, mas como você menciona, às vezes quando o wifi falha, o network-manager não encontra a rede novamente.

Eu acho que o problema é que o network-manager, após uma falha na conexão wifi, não atualiza a lista do wifi (e parece que o network-manager esconde a rede problemática). O Network-manager não possui uma opção de menu de re-scan, e desabilitar e habilitar o checkbox wireless no menu network-manager não força uma nova varredura wifi (como o reinício do serviço faz).

Quando o gerenciador de rede perde minha conexão wireles e não encontra meu wifi novamente (e sei que o wifi está operativo), eu executo o comando:

sudo iwlist wlan0 scan

Ele realiza uma varredura wifi na interface wlan0 (wlan0 é o nome da interface sem fio no meu laptop) e mostra as redes sem fio disponíveis, mas como um gerenciador de rede de efeito colateral atualiza automaticamente sua lista e localiza a rede perdida .

Eu prefiro executar o comando manualmente quando esse problema ocorrer (a reconexão de rede não garante a retomada da comunicação e alguns programas precisarão ser reiniciados).

Mas, como você mencionou, você pode croná-lo, e você pode fazê-lo sem testar a conectividade (o processo de varredura atualiza sua lista de wi-fi, mas não fecha sua conexão sem fio atual, se você estiver conectado).

Se preferir, você pode testar a conectividade usando ping ou iwconfig e, se não estiver conectado, inicie a verificação.

Algo como:

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

Mas lembre-se de que esse script deve ser sudoado ou executado com privilégios de root. Envia apenas 1 ping com tempo limite de 1 segundo.

    
por acesargl 29.05.2015 / 12:07
0

O que eu acho que o problema é que a conexão se perde devido a problemas de conectividade do roteador. Reiniciar o gerenciador de rede não pode ajudar quando o próprio roteador está tendo problemas. Em vez disso, você poderia criar um script para colocar o processo executando o software para suspender usando SIGSTOP quando a conexão for perdida e novamente acionar para continuar processando SIGCONT quando a rede se tornar acessível. E adicione o script às tarefas do cron, agendando-o para ser executado a cada minuto.

Para sua referência: link

Espero que isso ajude.

    
por Virtual Travels 29.05.2015 / 12:43