Come persistere su una connessione wifi dopo la disconnessione?


9

Ho una macchina Ubuntu che esegue un software che richiede Internet. Tuttavia, a volte il wifi non riesce (ad esempio il riavvio del router) e non trova più la rete, fino a quando non eseguo manualmente il servizio di riavvio del gestore di rete o spengo e riaccendo il wifi per trovarlo.

Esiste un modo possibile per eseguire un processo cron o un supervisord per monitorare la connettività e se non è possibile trovare la rete per riavviare il servizio gestore di rete e connettersi a quel SSID specifico?


Penso che ciò potrebbe essere dovuto a un nuovo bug del gestore di rete, dato che ho iniziato a riscontrare questo problema solo di recente, dopo l'aggiornamento a Ubuntu 15.04.
Sadi,

1
Esistono numerose segnalazioni di bug che suggeriscono che potrebbe esserci un problema. Potresti pubblicare i dettagli del tuo kernel (uname -a) e la versione del gestore di rete, e anche i dettagli della tua scheda WiFi.
DaveM,

Risposte:


7

Penso che ciò potrebbe essere dovuto a un nuovo bug del gestore di rete, dato che ho iniziato a riscontrare questo problema solo di recente - penso dopo aver aggiornato a Ubuntu 15.04.

Sembra che sia riuscito a risolvere temporaneamente questo problema come soluzione alternativa con questi due file:

  1. Ho un file di script per guardare la connessione WiFi e attivare e disattivare WiFi quando disconnesso, ad esempio ~/.bin/WiFi-Keep-Connectedcon questo contenuto:


#!/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. Ho anche un file .desktop per mantenere questo script in esecuzione ogni volta che accedo, ad esempio ~/.config/autostart/KeepWifiConnected.desktop, con questo contenuto:


[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: dovrai inserire il tuo nome utente nel percorso indicato Exec=sopra.

NB: A volte il riavvio del Wi-Fi in questo modo non è sufficiente, nel qual caso devo riavviare Network Manager immettendo questo comando una o anche due volte dal terminale:sudo service network-manager restart

Pertanto, potrebbe essere un'idea migliore modificare lo script sopra (per ogni evenienza) in questo modo:


#!/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

Non so perché, ma come dici tu, a volte quando il wifi fallisce, il gestore della rete non trova più la rete.

Penso che il problema sia che il gestore della rete, dopo un errore di connessione wifi, non aggiorna l'elenco wifi (e sembra che il gestore della rete nasconda la rete problematica). Il gestore di rete non ha un'opzione di menu per la nuova scansione e la disabilitazione e abilitazione della casella di controllo wireless nel menu del gestore di rete non impone una nuova scansione wifi (come riavvia il servizio).

Quando il gestore della rete perde la mia connessione wireless e non trova più il mio wifi (e sapevo che il wifi è operativo), eseguo il comando:

sudo iwlist wlan0 scan

Esegue una scansione wifi sull'interfaccia wlan0 (wlan0 è il nome dell'interfaccia wireless nel mio laptop) e mostra le reti wireless disponibili, ma come gestore di rete di effetti collaterali aggiorna automaticamente il suo elenco e trova la rete persa.

Preferisco eseguire il comando manualmente quando si verifica questo problema (la riconnessione della rete non garantisce il ripristino della comunicazione e alcuni programmi dovranno essere riavviati).

Ma, come accennato, puoi farlo cron e puoi farlo senza testare la connettività (il processo di scansione aggiorna il tuo elenco wifi ma non chiude la tua connessione wireless attuale, se sei connesso).

Se preferisci, puoi testare la connettività usando ping o iwconfig e se non sei connesso, avvia la scansione.

Qualcosa di simile a:

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

Ma ricorda che questo script deve essere sudo o eseguito con i privilegi di root. Invia solo 1 ping con timeout di 1 secondo.


La soluzione sopra va bene, ma come catturare la notifica dal gestore della rete (nm) che la connessione è caduta. Ciò dovrebbe essere possibile dall'interno della stessa, una rapida occhiata alla fonte sembrerebbe proporre la funzionalità che c'è. Il messaggio è preso da dbus e l'icona nm si aggiorna, quindi è possibile che si tratti di un bug, o forse un'altra parte del sistema rileva la caduta della connessione ed è stata modificata e l'avviso non passa più per tentare di riconnettersi?
DaveM,

0

Quello che penso sia il problema è che la connessione si perde a causa di problemi di connettività del router. Il riavvio del gestore di rete non può essere d'aiuto in caso di problemi con il router stesso. Piuttosto potresti creare uno script per mettere il processo che esegue il software per sospendere l'utilizzo di SIGSTOP quando si perde la connessione, e di nuovo attivare il processo per continuare a usare SIGCONT quando la rete diventa disponibile. E aggiungi lo script ai tuoi lavori cron, pianificandolo per l'esecuzione ogni minuto.

Per riferimento: http://hints.macworld.com/article.php?story=20030915193440334

Spero che sia di aiuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.