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


9

Eu tenho uma máquina Ubuntu executando 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é eu atender manualmente à reinicialização do gerenciador de rede ou desligar e ligar 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 não for possível encontrar a rede para reiniciar o serviço gerenciador de rede e conectar-se a esse SSID específico?


Eu acho que isso pode ser devido a um novo bug do gerenciador de rede, como também comecei a enfrentar esse problema apenas recentemente, depois de atualizar para o Ubuntu 15.04.
Sadi

11
Existem vários relatórios de erros que sugerem que pode haver um problema. Você poderia postar detalhes da sua versão do gerenciador de rede do kernel (uname -a) e também os detalhes da sua placa WiFi.
DaveM 29/05

Respostas:


7

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

Parece que eu 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. Também tenho um arquivo .desktop para manter esse script em execução toda vez que faço 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

Nota: Você precisará digitar seu nome de usuário no caminho indicado Exec=acima.

Nota: Às vezes, reiniciar o Wi-Fi dessa maneira não é suficiente; nesse caso, tenho que reiniciar o Network Manager digitando este comando uma ou duas vezes no terminal:sudo service network-manager restart

Portanto, pode ser uma idéia melhor 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


1

Não sei por que, mas, como você mencionou, às vezes, quando o wifi falha, o gerenciador de rede não encontra a rede novamente.

Eu acho que o problema é que o gerenciador de rede, após uma falha na conexão wifi, não atualiza a lista de wifi (e parece que o gerenciador de rede oculta a rede problemática). O gerenciador de rede não possui uma opção de menu de re-varredura e desativar e ativar a caixa de seleção sem fio no menu do gerenciador de rede não força uma nova varredura de wifi (como reiniciar o serviço).

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

sudo iwlist wlan0 scan

Ele executa uma verificação 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 efeito colateral, o gerenciador de rede atualiza automaticamente sua lista e encontra a rede perdida.

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

Mas, como você mencionou, você pode agendá-lo e fazê-lo sem testar a conectividade (o processo de verificação 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 sudo ou executado com privilégios de root. Ele envia apenas 1 ping com 1 segundo tempo limite.


A solução acima é boa, mas como capturar a notificação do gerenciador de rede (nm) de que a conexão caiu. Isso deve ser possível a partir do próprio nm, uma rápida olhada na fonte pareceria propor a funcionalidade existente. A mensagem é retirada do dbus e o ícone nm é atualizado; portanto, é possível que seja um erro, ou talvez outra parte do sistema capte a queda da conexão e foi modificada e o aviso não passa mais para tentar se reconectar?
DaveM 29/05

0

Acho que o problema é como a conexão se perde devido a problemas de conectividade do roteador. Reiniciar o gerenciador de rede não poderia ajudar quando o próprio roteador estava com problemas. Em vez disso, você pode criar um script para colocar o processo em execução no software para suspender o uso do SIGSTOP quando a conexão for perdida e novamente acionar o processo para continuar usando o SIGCONT quando a rede estiver disponível. E adicione o script aos seus trabalhos cron, agendando-o para ser executado a cada minuto.

Para sua referência: http://hints.macworld.com/article.php?story=20030915193440334

Espero que isto ajude.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.