sabato 2 marzo 2013

Nexus 7: Linux Tethering Bluetooth DUN con PdaNet & wvdial


DUN e' l'interfaccia bluetooth per il Dial Up Networking, cioe' per usare il dispositivo bluetooth (in questo caso il Nexus 7) come se fosse un modem per collegarsi in ppp (point-to-point protocol) ad Internet, uno dei metodi che possono essere usati per il tethering.
Bluetooth offre diversi tipi di servizi, divisi su canali differenti; solitamente l'interfaccia DUN viene fornita sul canale bluetooth 3.
Non tutti i telefoni/smatrphone/tablet offrono l'interfaccia DUN: per esempio il Nexus 7, se non si e' installata la patch XDA non-ufficiale per il tethering Abilitazione delle opzioni per Tethering/WiFi Hotspot, non la fornisce. E' possibile pero' installare una app che la aggiunge, che non necessita dei permessi di root: PdaNet.


Nexus 7: Linux Tethering Bluetooth DUN con PdaNet & wvdial


PdaNet fornisce interfaccia per USB-tethering (non funzionante con PC Linux, non c'e' il driver), Wifi hotspot (non sembra funzionare su Nexux 7) e Bluetooth DUN. Bluetooth DUN e' l'unica delle tre al momento utilizzabile con successo sotto Linux.

Linux Tools

Sul PC Linux servono le seguenti utilities:
  sdptool
  rfcomm
  wvdial
  pppd
sdptool non e' strettamente necessario ma e' utile per la ricerca dei servizi e dispositivi Bluetooth. wvdial non e' strettamente necessario ma e' utile per utilizzare facilmente pppd, che notoriamente non e' tra i tool piu' semplici da usare al mondo.
Inoltre servono installate le librerie `bluez` (bluetooth).

Dispositivo Bluetooth e canale

  • Attivare bluetooth sul Nesus 7 (Impostazioni/Bluetooth)
  • Attivare bluetooth sul PC
  • Installare PdaNet sul Nexus 7
  • Avviare PdaNet sul Nexus 7 e cliccare su "Activate Bluetooth DUN"
  • Rispondere "Consenti" alla domanda di rendere disponibile il dispositivo all'esterno per 120 secondi
    Ora bisogna accoppiare i due dispositivi bluetooth, cosa che io ho fatto con l'interfaccia grafica bluetooth di KDE. Probabilmente puo' essere fatta anche da linea di comando (non descritto qui, per ora). La procedura richiede di impostare da un lato una sequenza numerica, e di ripeterla digitandola sull'altro dispositivo.
    Quindi:
  • In una console del PC, lanciare:
      sdptool browse
    
    dopo qualche secondo dovreste ricevere un output simile:
      Inquiring ...
      Browsing 50:46:5D:79:BC:24 ...
      Service Name: Headset Gateway
      Service RecHandle: 0x10000
      Service Class ID List:
        "Headset Audio Gateway" (0x1112)
        "Generic Audio" (0x1203)
      Protocol Descriptor List:
        "L2CAP" (0x0100)
        "RFCOMM" (0x0003)
          Channel: 2
      Profile Descriptor List:
        "Headset" (0x1108)
          Version: 0x0102
      
      [...]
      
      Service Name: 
      Service RecHandle: 0x10005
      Service Class ID List:
        "Serial Port" (0x1101)
      Protocol Descriptor List:
        "L2CAP" (0x0100)
        "RFCOMM" (0x0003)
          Channel: 3
      
      [...]
      
      Service Name: OBEX Object Push
      Service RecHandle: 0x10009
      Service Class ID List:
        "OBEX Object Push" (0x1105)
      Protocol Descriptor List:
        "L2CAP" (0x0100)
        "RFCOMM" (0x0003)
          Channel: 12
        "OBEX" (0x0008)
      Profile Descriptor List:
        "OBEX Object Push" (0x1105)
          Version: 0x0100
    

    Il servizio che ci interessa e' il "Channel 3", a cui non e' assegnato nessun nome. Se avete applicato la patch Tethering/Wifi Hotspot for the Nexus 7 3G questo servizio avra' il nome "DUN", ma non serve per poterlo utilizzare. Il comando `sdptool browse` ha anche rivelato l'indirizzo bluetooth del dispositivo: in questo caso 50:46:5D:79:BC:24. Questo indirizzo sembra il MAC address wlan, ma in realta' non e' lo stesso.
NOTA
Non su tutti i dispositivi il canale DUN e' sempre il 3: per esempio ho un cellulare Nokia il cui canale DUN non e' sempre lo stesso; in questo caso uso un comando per determinare il canale DUN:
  sdptool search --bdaddr=50:46:5D:79:BC:24 dun | grep -i Channel | cut -c14-14

Attivare la linea modem

In una console del PC, lanciare:
  rfcomm release 0
  rfcomm bind 0 50:46:5D:79:BC:24 3
Inserendo l'indirizzo bluetooth del Nexus 7 rilevato in precedenza al posto di 50:46:5D:79:BC:24. A questo punto e' stata creata una porta seriale virtuale `/dev/rfcomm0` a cui risponde il "finto" modem di PdaNet. Se provate a collegarvi a `/dev/rfcomm0` con un terminale (ad es. picocom) rispondera' ai comandi AT come se fosse un modem.

Collegamento ad Internet (tethering)

Per collegarsi ad internet useremo wvdial, un tool da linea di comando per l'attivazione di connessioni pppd in maniera relativamente semplice. wvdial ha un file di configurazione in `/etc/wvdial.conf` a cui va aggiunta una sezione:
  [Dialer Nexus7]
  Phone = *99***1#
  Username = user
  Password = none
  New PPPD = yes
  Baud = 921600
  Modem = /dev/rfcomm0
  Stupid Mode = yes
  Init1 = ATZ
Le seguenti impostazioni sono solitamente nell'area generale di `/etc/wvdial.conf` ma possono essere aggiunte anche a quella Nexus7:
  Area Code =
  Phone = 0
  Username =
  Password =
  Ask Password = 0
  Dial Command = ATDT
  Compuserve = 0
  Force Address =
  Idle Seconds = 300
  DialMessage1 =
  DialMessage2 =
  ISDN = 0
  Auto DNS = 1
Il campo `Phone` qui utilizzato e' quello che si utilizza per il collegamento ad APN Vodafone. Non credo che nessuno di questi campi sia in realta' strettamente necessario, perche' PdaNet utilizza la connessione di rete attivata sul Nexus 7, qualunque essa sia, senza collegarsi effettivamente all'APN. Pero' wvdial si aspetta che ci siano.
Nel file `/etc/ppp/options` commentate i seguenti campi:
  # lcp-echo-interval 30
  # lcp-echo-failure 4
Ora per avviare il collegamento Internet, da una console di root lanciare:
  wvdial Nexus7

Nessun commento:

Posta un commento