Come far funzionare il data tethering su Android KitKat e Lollipop

Alcuni utilizzatori di android kitkat o lollipop si sono accorti che, sebbene sia possibile abilitare il data tethering tramite i menù di impostazione del telefono, e collegare altri dispositivi al proprio telefono via wifi, successivamente non è possibile navigare da quelli mentre la connettività dal proprio telefono continua a funzionare regolarmente.

Avendo lo stesso problema, ho trovato una soluzione non originale ma ben spiegata e soprattutto funzionante qui. La soluzione fornita nel forum da obn3g0n, che ringrazio, richiede un minimo di competenza tecnica; quanto segue è di fatto la traduzione in italiano delle istruzioni di obn3g0n, tuttavia è stata realizzata su un sistema Linux piuttosto che Windows. La soluzione non richiede il rooting del telefono.

Il problema è dovuto all’assenza o all’errata configurazione di una impostazione di configurazione nascosta all’interno del telefono android, chiamata tether_dun_required: questa, per consentire il tethering dovrebbe essere impostata a 0, ma su alcuni modelli è impostata a 1 oppure, come nel mio caso, è assente.

Per impostare correttamente la variabile di configurazione, senza necessità di rootare il telefono, occorre seguire i seguenti passi (N.B. come premesso, le istruzioni si applicano a un sistema linux, ma su Windows la procedura è pressoché analoga).

  1. Scaricare Android SDK (Developer Toolkit) per il proprio computer da qui: http://developer.android.com/sdk/index.html. Utilizzeremo solo i Platform Tools, che si possono trovare anche distribuiti da fonti non ufficiali, con dimensioni di download più ridotte. Personalmente preferisco le sorgenti ufficiali.
  2. Sui sistemi Linux non è necessario scaricare driver. Potrebbe essere necessario effettuare qualche modifica di configurazione, sotto /etc/udev/rules.d, ben spiegata su altri forum: nel mio caso non è stato necessario.
  3. Scaricato Android SDK per linux, dovreste avere un archivio di nome android-sdk_r24.4.1-linux.tgz (il numero di versione potrebbe essere diverso), create una cartella Android o con un nome di vostro interesse e spostateci l’archivio. Estraete quindi il contenuto dell’archivio tar xvfz  android-sdk_r24.4.1-linux.tgz
  4. L’archivio sarà estratto in una cartella android-sdk-linux. Portatevi all’interno della cartella android-sdk-linux/tools, e lanciate l’applicazione android (./android)
  5. Si aprirà la finestra di android sdk manager. Selezionate Android SDK Platform-tools e cliccate su Install. Accettate la licenza e avviate il download. Al termine chiudete la finestra del manager.
  6. Ora all’interno della cartella android-sdk-linux/platform-tools troverete l’applicazione adb.
  7. Tornate al vostro telefono, entrate in “Developer mode” cliccando 7 volte su “About phone” o seguendo la procedura indicata per il vostro dispositivo (nel mio caso cliccando 7 volte sulla versione del firmware).
  8. Una volta abilitato “Developer mode” entrate nel relativo menù e abilitate “USB debugging”.
  9. Collegate il telefono alla porta usb del PC.
  10. Sul pc avviate adb server come utente root:
    sudo adb kill-server
    sudo adb start-server
    sudo adb devices
    Seguire le istruzioni specifiche su altri forum se ciò non funzionasse sulla vostra macchina; per lanciare sudo dovete ovviamente disporre delle credenziali di root. Dopo aver inviato l’ultimo comando, dovreste vedere l’identificativo del vostro telefono.
  11. Se in qualunque momento apparisse l’avviso che dovete autorizzare o consentire l’accesso sul telefono, effettuate l’operazione sul vostro dispositivo mobile. Dovrebbe essere necessario effettuare l’autorizzazione una sola volta durante la sessione.
  12. Siamo a buon punto… Ora inviate il seguente comando, tutto intero, senza modifiche e su un’unica linea:
    adb shell content insert --uri content://settings/global --bind name:s:tether_dun_required --bind value:i:0
    Questo imposta la variabile di configurazione richiesta al valore 0.
    A seconda di come avete installato l’SDK, il comando adb potrebbe dover essere avviato fornendone il path completo, ad esempio digitando, dalla cartella in cui si trova: ./adb
  13. Riavviate il telefono, e inviate il seguente comando per verificare che la variabile sia ancora al valore corretto (tutto intero, senza modifiche e su un’unica linea):
    adb shell content query --uri content://settings/global --where "name='tether_dun_required'"
    La variabile dovrebbe essere impostata a 0. Potete lanciare lo stesso comando prima di effettuare l’impostazione per verificare se la variabile era già presente e/o impostata correttamente; nel mio caso era assente. Se il comando così com’è dovesse dare errore potete inviarlo nel modo seguente: adb shell content query --uri content://settings/global --where "name=\'tether_dun_required\'"
  14. Potete ora spegnere “Usb debugging” e “Developer mode”.
  15. Alcuni forum consigliano di verificare nelle impostazioni dei propri APN che siano impostati solo protocolli IPv4 e di togliere qualunque cosa faccia riferimento a IPv6, nel mio caso non è stato necessario.
  16. Se si naviga in tethering da PC, sempre secondo alcuni forum, qualora il proprio provider telefonico preveda limitazioni di uso del traffico dati (sul tethering o sulla navigazione da pc), potrebbe essere necessario usare plugin in grado di modificare lo “User agent” inviato dal proprio browser. Occorrerebbe pertanto utilizzare un plugin tipo “User agent switching” o simili oppure modificarlo direttamente dalle impostazioni del browser. Attenzione: è possibile che in questo modo l’esperienza di navigazione sia diversa da quella usuale.