Stampa

Riavviare il network manager dopo la sospenzione o ibernazione

Dopo anni di frustrazione ho forse trovato la soluzione al problema che affligge il mio netbook Asus 1215P fornito di interfaccia WiFi:

Broadcom Corporation BCM4313 802.11bgn Wireless Network Adapter

Versione dopo versione di Ubuntu  ho sempre sperato in una soluzione da parte degli sviluppatori che non è mai arrivata e bazzicando su internet ho trovato molte discussioni sui problemi causati da questo chipset WiFi e presunte soluzioni al problema che non hanno mai risolto il mio problema. Sintetizzando si tratta del fatto che il sistema dopo un risveglio dalla sospensione o dalla ibernazione, in talune circostanze, non riesce più a collegarsi con la rete WiFi. Problema che data la sua natura non sistematica creava molti fastidi perché poteva verificarsi inaspettatamente in momenti poco opportuni.

Da subito una soluzione a questo problema è stata sempre quella di spegnere e riaccendere il WiFi con l'apposito pulsante. Operazione che riesce con buona probabilità se non fosse per una percentuale, se pur bassa di casi, in cui non ha effetto e anche ripetendola più e più volte non consente di accedere alla rete WiFi.

L'altro giorno, parlando a mensa con un mio collega di lavoro di questo problema, lui mi diede il suggerimento di provare a stoppare e riavviare il network manager. Lo fecì tramite il Monitor di sistema e verificai che il netwok manager veniva riavviato in maniera automatica e la connessione ristabilita immediatamente. Ottima soluzione è abbastanza ripetibile. Fino ad oggi ha funzionato sempre.

Intuendo che si trattasse di un problema del network manager feci qualche altra ricerca in internet che mi portò a questa discussione:

 Link alla discussione sul forum Ubuntu.

In cui è presente un workaround al problema e che ne spiegherebbe anche la natura aleatoria. Dovrebbe trattarsi di un problema che affligge il network manager (probabilmente legato anche ai driver proprietari Broadcom) per cui se il sistema viene sospeso o ibernato mentre e connessione con una rete e il risveglio avviene in un momento in cui quella rete non è più disponibile il networ manager non riesce a collegarsi con un'altra rete disponibile. Cose che potrebbe anche essere nel mio caso avendo io due access point uno al piano terra e un extender al primo piano.

Che tipo di work around è?

In pratica si tratta di uno script bash che viene eseguito al risveglio di una ibernazione o sospensione e che uccide il network manager. I file è il seguente:

/etc/pm/sleep.d/10_restart-networkmanager

#!/bin/sh
case "$1" in
        resume|thaw)
                pkill NetworkManager
                ;;
        suspend|hibernate)
                # Do nothing
                ;;
esac