17.2. Bluetooth

Bluetooth è uno standard wireless che connette tra di loro diversi dispositivi come cellulari, PDA, periferiche o componenti di sistema come tastiera o mouse e notebook. Il nome deriva da un re danese di nome Blatand (“Harold Bluetooth” in inglese), il quale nel decimo secolo riuscì a rappacificare e unire diverse fazioni scandinave belligerenanti. Il logo di Bluetooth si basa sulla runa “H” (simile ad una stella) e “B”.

Bluetooth si differenzia da IrDA in quanto i singoli dispositivi non devono “vedersi” direttamente e in quanto i dispositivi possono costituire una rete. Comunque si ha un tetto massimo di 720 Kbps per la velocità di trasmissione dei dati (indicazione valida per la versione 1.2). In teoria Bluetooth consente una comunicazione tra dei dispositivi anche attraverso delle mura, ma molto dipende anche dallo spessore delle mura e dalla classe alla quale appartengono i dispositivi, vi sono tre classi che si distinguono in base alla loro portata massima che varia dai 10 fino ai 100 metri.

17.2.1. Concetti basiliari

17.2.1.1. Software

Per poter utilizzare la tecnologia Bluetooth serve un adapter per Bluetooth (sia esso integrato nel dispositivo o un dongle esterno), driver e un cosiddetto “bluetooth protocol stack”.

Il kernel Linux include già una serie di driver per l'utilizzo di Bluetooth. Come “Protocol Stack” si ricorre al sistema Bluez. Affinché le diverse applicazioni possano funzionare con Bluetooth, vanno installati Inoltre i pacchetti di base (bluez-libs, e bluez-utils che mettono a disposizione alcuni servizi e programmi richiesti. Per alcuni adapter (Broadcom, AVM BlueFritz!) è inoltre necessario installare bluez-firmware. I vecchi pacchetti bluez-pan e bluez-sdp sono stati integrati nei pacchetti di base. bluez-cups permette di stampare tramite una connessione Bluetooth.

17.2.1.2. Flusso di lavoro

Un sistema Bluetooth è composto da quattro strati connessi tra di loro per mettere a disposizione la funzionalità desiderata:

Hardware

L'adapter e driver adatto che assicura il supporto tramite il kernel Linux.

File di configurazione

La gestione del sistema Bluetooth.

Daemonen

Servizi che gestiti tramite i file di configurazione mettono a disposizione le diverse funzionalità.

Applicazioni

Programmi che rendono accessibili e gestibili le funzionalità messe a disposizione dal daemon per l'utente.

Inserendo l'adapter Bluetooth viene caricato il relativo driver tramite il sistema hotplug. Dopo che il driver è stato caricato, viene controllato in base al file di configurazione se va lanciato Bluetooth. In questo caso viene stabilito quali servizi debbano essere lanciati. In base a ciò vengono avviati i rispettivi daemon. Per motivi di sicurezza il sistema Bluetooth è disabilitato di default nella configurazione standard.

17.2.1.3. I profili

In Bluetooth i servizi vengono definiti in cosiddetti profili. Lo standard di Bluetooth prevede ad esempio dei profili per il transfer di dati (profilo “File Transfer”), la stampa (profilo “Basic Printing”) e connessioni di rete (profilo “Personal Area Network”).

Affinché un dispositivo possa avvalersi di un servizio di un altro dispositivo, entrambi i dispositivi devono supportare il profilo in questione — un dato che spesso purtroppo non è deducibile né dalla confezione né dal rispettivo manuale del dispositivo. Inoltre vi sono dei produttori che seguono alla lettera le definizioni dei singoli profili ed altri meno. Di solito comunque ciò non si ripercuote sul processo di comunicazione tra i dispositivi.

17.2.2. La configurazione

17.2.2.1. Configurazione Bluetooth tramite

Il modulo Bluetooth (si veda la figura Figure 17.2, “: configurazione Bluetooth”) permette di configurare il supporto a Bluetooth sul vostro sistema. Non appena il sistema hotplug rivela un adapter Bluetooth nel vostro sistema, Bluetooth viene avviato automaticamente con le impostazioni qui stabilite.

Figure 17.2. : configurazione Bluetooth

: configurazione Bluetooth

Come prima cosa stabilite se sul vostro sistema debbano essere avviati i servizi Bluetooth. Se per la creazione della connessione con la controparte è richiesta un PIN, inseritelo. Successivamente giungete tramite Configurazione del daemon avanzata nella finestra delle selezioni per la configurazione mirata dei servizi offerti (in Bluetooth detti anche Profile). Tutti i dispositivi disponibili vengono visualizzati in un elenco e possono essere accessi o spenti tramite Abilitare o Disabilitare. Tramite Modifica aprite una finestra popup sul servizio (daemon) selezionato in cui potete passarli ulteriori argomenti. Apportate delle modifiche solo con cognizione di causa. Una volta conclusa la configurazione del daemon, uscite dal dialogo con Ok. Dalla finestra principale giungete tramite Opzioni di sicurezza arrivate alla finestra attinente agli aspetti di sicurezza in cui poter eseguire le impostazioni su cifratura, procedimento di autenticazione e scansione. Una volta terminato con le impostazioni di sicurezza, ritornate nella finestra principale. Uscitene con Fine, ed il vostro sistema Bluetooth è pronto.

Se intendete creare una rete tramite Bluetooth, abilitate nella finestra Configurazione avanzata daemon il PAND e adattate servendovi del bottone Modifica il modo del daemon. Per una connessione di rete Bluetooth funzionante un pand deve girare nel modo Listen e la controparte nel modo Search. Di default è preimpostato il modo Listen. Adattate il comportamento del vostro pand locale. Configurate inoltre nel modulo Scheda di rete l'interfaccia bnepX (X sta ad indicare il numero di dispositivo nel sistema).

17.2.2.2. Configurazione manuale di Bluetooth

I file di configurazione per i singoli componenti del sistema Bluez si trovano nella directory /etc/bluetooth. L'unica eccezione si ha per il file preposto all'inizializzazione dei componenti /etc/sysconfig/bluetooth che viene elaborata dal modulo .

Solo root potrà modificare i file di configurazione riportati di seguito. Attualmente purtroppo non vi è un'interfaccia grafica tramite la quale poter impostare i parametri. I file vanno dunque editati in un programma di elaborazione di testo. Di solito comunque le preimpostazioni sono sufficienti.

I codici PIN evitano che si creino delle connessioni indesiderate. Alla stregua del procedimento che conosciamo dalla telefonia mobile, i cellulari richiedono solitamente un codice PIN durante la prima presa di contatto (o meglio durante la configurazione sul cellulare della prima presa di contatto). Due dispositivi per poter scambiare dei dati tra di loro devono avere lo stesso PIN. Il codice PIN lo trovate sul sistema nel file /etc/bluetooth/pin. Attualmente sotto Linux vi è solo un PIN, a prescindere dal numero dei dispositivi Buetooth installati. Al momento non è possibile indirizzare più dispositivi con diversi codici PIN; in questi casi dovete impostare su tutti i dispositivi lo stesso PIN o disabilitare del tutto l'autenticazione PIN.

[Important]Connessioni Bluetooth e la sicurezza

Nonostante i codici PIN, bisogna tenere presente che è possibile intercettare la comunicazione tra due dispositivi. Ed inoltre tenete presente che bisogna prima abilitare l'autenticazione e cifratura di connessioni Bluetoot, essendo disabilitati.

Per eseguire abilitazione andate nel file di configurazione /etc/bluetooth/hcid.conf. Qui potete modificare diverse impostazioni come ad esempio il nome di dispositivo e la modalità di sicurezza. In linea di massima queste impostazioni dovrebbero rilevarsi sufficienti, in questa sezione ne illustreremo brevemente due. Il file contiene dei commenti che descrivono le opzioni delle singole impostazioni.

Nel file fornito a corredo vi sono due sezioni intitolate options e device. La prima contiene informazioni generali a cui ricorre hcid in fase di avvio. La seconda contiene le impostazioni per i singoli dispositivi Bluetooth locali. Per locale in questo contesto si intende che il dispositivo è fisicamente connesso al sistema. Tutti i dispositivi indirizzibili in modo wireless sono chiamati dispositivi remoti.

Una della impostazioni più importanti nella sezione options è security auto; che abilita l'autenticazione in base al PIN, laddove in caso di difficoltà auto può essere impostato su Non utilizzare PIN. Per un più elevato livello di sicurezza si consiglia di scegliere user, in modo che l'utente debba indicare ad ogni connessione il codice PIN.

Di sicuro interesse è la sezione che inizia con device . Qui potete stabilire con quale nome l'host debba essere visualizzato sulle controparti. Qui definite la classe dei dispositivi (Laptop o Server) e abilitate o disabilitate l'autenticazione ed il metodo di cifratura.

17.2.3. Componenti del sistema e tool utili

Bluetooth si basa sulla combinazione di diversi servizi: sono richiesti almeno due demoni che girano in background (in sottofondo): hcid (Host Controller Interface funge da interfaccia e permette di gestire il dispositivo Bluetooth; sdpd (Service Discovery Protocol comunica ai client remoti i servizi offerti dal sistema. Sia hcid che sdpd possono essere inizializzati espicitamente con rcbluetooth start se ciò non dovesse avvenire automaticamente all'avvio del sistema. Il comando va eseguito come utente root.

Segue una breve descrizione dei principali tool necessari per lavorare con Bluetooth. Anche se Bluetooth si lascia gestire tramite diversi componenti grafici, si consiglia di dare almeno un'occhiata a questi programmi.

Alcuni comandi possono essere eseguiti solo da root, come ad es. l2ping <indirizzo_del_dispositivo>, che vi permette di testare la connessione ad un dispositivo remoto.

17.2.3.1. hcitool

hcitool vi consente di stabilire se sono stati rilevati dispositivi locali o remoti. Con il comando hcitool dev sarà visualizzato il vostro dispositivo. L'output presenta una riga del tipo <nome_dell'_interfaccia> <indirizzo_del_dispositivo > per ogni dispositivo locale rilevato.

Con hcitool inq potete rilevare dispositivi remoti. Verranno riprodotti tre valori per ogni dispositivo rilevato: l'indirizzo di dispositivo, differenza orario e classe di dispositivo. Di maggior interesse è l'indirizzo di dispositivo. Questo comando viene utilizzato dagli altri comandi per identificare il dispositivo meta. La differenza orario è di interesse solo da un punto di vista prettamente tecnico. Nella classe sono codificati tipo di dispositivo e di servizio sotto forma di valore esadecimale.

Tramite hcitool name <indirizzo_del_dispositivo> potete rilevare il nome di dispositivo di un dispositivo remoto. Se si tratta ad esempio di ulteriore client, la classe e il nome di dispositivo emessi corrispondono ai dati riportati nel rispettivo /etc/bluetooth/hcid.conf. Indirizzi di dispositivi locali generano una comunicazione di errore.

17.2.3.2. hciconfig

/sbin/hciconfig emette ulteriori informazioni riguardanti il dispositivo locale. Invocando hciconfig senza nessun argomento vengono visualizzate delle informazioni sul dispositivo come nome di hciX), indirizzo di dispositivo fisico (numero composto di 12 cifre tipo 00:12:34:56:78) nonché delle informazioni sul volume dei dati trasmessi.

hciconfig hci0 name emette il nome che viene indicato dal vostro sistema nel caso di richieste di dispositivi remoti. hciconfig comunque non rileva solamente le impostazioni del dispositivo locale, ma permette anche di modificarle. Con hciconfig hci0 name TEST potete ad es. impostare il nome TEST.

17.2.3.3. sdptool

sdptool vi informa sul servizio offerto da un determinato dispositivo. sdptool browse <indirizzo_del_dispositivo> ritorna tutti i servizi del dispositivo, mentre con sdptool search <sigla._del_servizio> si può cercare in modo mirato un determinato servizio. Con questo comando vengono interrogati tutti i dispositivi raggiungibili per quel che riguarda il servizio richiesto. Se un dispositivo mette a disposizione il servizio cercato, il programma ritorna il nome completo ed una breve descrizione del dispositivo. Eseguendo sdptool senza alcun parametro si ottiene un elenco delle sigle dei servizi.

17.2.4. Applicazioni grafiche

L'URL sdp:/ in Konqueror ritorna un elenco dei dispositivi Bluetooth locali e remoti. Eseguendo un doppio clic sul dispositivo ottenete una rassegna sui servizi messi a disposizione dal dispositivo. Passate con il mouse su uno dei servizi elencati e in basso sulla finestra di stato del browser vedete quale profilo viene utilizzato per il servizio. Cliccate su un servizio e appare una finestra un cui vi verrà chiesto cosa intendete fare: salvare, utilizzare il servizio (a tal fine va lanciato una applicazione) o se interrompere l'operazione. Qui potete inoltre stabilire che questa finestra non dovrà più comparire, e che venga eseguita sempre l'operazione da voi selezionata. Tenete presente che per alcuni servizi non vi è (ancora) alcun supporto, per alcuni altri vanno eventualmente aggiunti dei pacchetti.

17.2.5. Esempi

17.2.5.1. Collegamento via rete tra due host H1 e H2

Nel primo esempio vogliamo creare un collegamento di rete tra due host, H1 e H2 con indirizzo di dispositivo Bluetooth baddr1 e baddr2 che si lasciano rilevare come descritto sopra tramite hcitool devsu entrambi i sistemi. Gli host alla fine devono entrare in contatto con l'indirizzo IP 192.168.1.3 (R1) e 192.168.1.4 (R2).

In Bluetooth la connessione si realizza tramite pand (Personal Area Networking). I comandi riportati di seguito devono essere eseguiti dall'utente root. Non entreremo nei dettagli per quel che riguarda i comandi di rete (ip), ci concentreremo invece sulle operazioni che interessano da vicino Bluetooth:

Sull'host H1) si lancia pand dando il comando pand -s. Sull' host H2 con pand -c <baddr1> si può creare il collegamento. Se a questo punto invocate su uno o entrambi gli host l'elenco delle interfacce di rete disponibili tramite ip link show, si avrà un output del genere:

bnep0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
    link/ether 00:12:34:56:89:90 brd ff:ff:ff:ff:ff:ff

al posto di 00:12:34:56:89:90 vi sarà l'indirizzo del dispositivo locale (baddr1 o baddr2). A questa interfaccia va assegnato ora un indirizzo IP e quindi va abilitata.

Per realizzare ciò, si immettono i seguenti due comandi su H1:

ip addr add 192.168.1.3/24 dev bnep0
ip link set bnep0 up

o per H2 si ha:

ip addr add 192.168.1.4/24 dev bnep0
ip link set bnep0 up

Ora H1 può essere indirizzato da H2 tramite l'indirizzo IP 192.168.1.3. Con ssh 192.168.1.4 potete eseguire il login da H1 (sempre che H2 gira un sshd, cosa che si ha di default sotto ). Il comando ssh  192.168.1.4 può essere immesso anche dall'utente “normale”.

17.2.5.2. Transfer di dati dal cellulare al computer

Nel secondo esempio illustreremo come trasferire una foto scattata con un foto cellulare (senza creare costi aggiuntivi ad es.: dovuti all'invio di una mail multimediale) sul computer. Chiaramente il modo in cui sono strutturati i menu del cellulare varia da modello a modello, ma il modo di procedere non si discosta più di tanto. All'occorrenza consultate la guida del vostro cellulare. La descrizione qui riportata si riferisce ad una foto scattata con un Sony Ericsson da trasferire sul portatile. Per realizzare questo trasferimento sul portatile è richiesto il servizio Obex-Push ed inoltre il portatile dovrà consentire l'accesso anche al cellulare. Innanzitutto dobbiamo mettere a disposizione il servizio sul portatile, ricorrendo al demone opd del pacchetto bluez-utils. Lanciatelo con:

opd --mode OBEX --channel 10 --daemonize --path /tmp --sdp

Due parametri sono quelli di rilievo. --sdp comunica il servizio a sdpd. Il parametro --path /tmp indica al programma dove memorizzare i dati ricevuti — in questo caso abbiamo /tmp. Potete indicare anche un altro percorso però non dimenticate che dovete disporre dell'accesso in scrittura sulla directory indicata.

Ora “presentate” il cellulare al portatile. Vi serve il menu Connessioni del cellulare e selezionate lì Bluetooth. Eventualmente andate su Attivare, prima di selezionare la voce Dispositivi propri. Selezionate Nuovo dispositivo e fate rilevare il portatile al vostro cellulare. Una volta rilevato, verrà visualizzato il suo nome sul display. Selezionate il dispositivo appartenente al portatile. A questo punto vi dovrebbe venir richiesto il codice PIN, immettete qui il codice PIN preso da /etc/bluetooth/pin. Ora il vostro cellulare riconosce il portatile e può scambiare dei dati con esso. Uscite dal menu e cercate il menu per le immagini. Selezionate la foto da trasferire e premete su Ancora. Nel menu che apparirà potete tramite Invia selezionare il modo in cui inviare la foto. Selezionate Tramite Bluetooth. A questo punto il portatile dovrebbe essere indirizzabile come dispositivo meta. Dopo aver selezionato il portatile avviene la trasmissione e la foto verrà archiviata nella directory specificata con il comando opd. Seguendo lo stesso approccio potreste anche trasferire un brano musicale sul vostro portatile.

17.2.6. Come risolvere possibili difficoltà

Se dovessero verificarsi dei problemi di connessione procedete come descritto di seguito. Ricordate sempre che la causa dell'errore può essere dovuta ad un dispositivo coinvolto nel processo di comunicazione e nel peggior dei casi, addirittura essere riconducibile ad entrambi le parti coinvolti nella connessione. Se possibile, cercate di eseguire delle verifiche con ulteriori dispositivi Bluetooth per escludere degli errori dovuti ai dispositivi:

Il dispositivo locale viene indicato nell'output di hcitool dev?

Se il dispositivo locale non compare nell'output allora o l'hcid non è stato avviato o il dispositivo non viene riconosciuto come dispositivo Bluetooth. Ciò può verificarsi per ragioni diverse: il dispositivo è rotto, manca il giusto driver. Nel caso di notebook con Bluetooth integrato vi è anche spesso un interruttore on/off per dispositivi a comando radio come WLAN e Bluetooth. Consultate il manuale di sistema del vostro notebook se il vostro dispositivo ha un interruttore del genere. Riavviate il sistema Bluetooth con rcbluetooth restart e date una occhiata a /var/log/messages per vedere se si sono verificati degli errori.

Il vostro adapter Bluetooth richiede un file firmware?

In questo caso installate bluez-bluefw e riavviate il sistema Bluetooth con rcbluetooth restart.

Ritorna l'output di hcitool inq altri dispositivi?

Eseguite questo comando più volte, può darsi il caso che la connessione non funzioni perfettamente e ciò sia dovuto al fatto che la banda di frequenza di Bluetooth venga utilizzata anche da altri dispositivi.

I codici PIN concordano?

Controllate, se il codice PIN in /etc/bluetooth/pin ed il PIN dell'altro dispositivo concordano.

L'altro dispositivo “vede” il vostro sistema?

Provate a realizzare la connessione dall'altro dispositivo, verificate se il dispositivo vede il vostro sistema.

É possibile creare una connessione di rete (si veda l'esempio 1)?

Se il primo esempio non porta all'effetto desiderato (connessione via rete), la causa può essere dovuta a diverse ragioni: può darsi che uno dei due sistemi non supporti il protocollo ssh. Eseguite un test con: ping 192.168.1.3 o ping 192.168.1.4. Se funziona, controllate se è in esecuzione sshd. Una altra causa per l'insorgere di difficoltà può essere dovuta ad un conflitto delle impostazioni di uno od entrambi sistemi degli indirizzi (nell'esempio 192.168.1.X). Provate semplicemente con altri indirizzi, ad es. 10.123.1.2 e 10.123.1.3.

Il notebook compare come dispositivo meta (esempio 2). Il dispositivo mobile rileva il servizio Obex-Push sul portatile?

Andate nel menu Dispositivi propri e selezionate il rispettivo dispositivo e visualizzate Elenco dei servizi. Se manca (anche dopo aver aggiornato l'elenco) Obex-Push, allora il problema è dovuto all'opd sul portatile. L' opd è stato avviato? Avete l'accesso in scrittura per la directory indicata?

E' possibile avere un trasferimento nella direzione inversa?

Se avete installato il pacchetto obexftp alcuni dispositivi, vari modelli della Siemens e Sony Ericsson, ve lo consentono se eseguite il comando obexftp -b <indirizzo_ di_dispositivo> -B 10 -p <foto>. Consultate a riguardo la documentazione del pacchetto reperibile sotto /usr/share/doc/packages/obexftp.

17.2.7. Ulteriori informazioni

Per una valida rassegna delle diverse guide incentrate sull'utilizzo e la configurazione di Bluetooth, visitate il seguente sito: http://www.holtmann.org/linux/bluetooth/

Informazioni e guide:

  • Tanti link che trattano Bluetooth: http://www.holtmann.org/linux/bluetooth/

  • Connessione con PalmOS PDA (inglese): http://www.cs.ucl.ac.uk/staff/s.zachariadis/btpalmlinux.html

L'how-to ufficiale in lingua inglese per il Bluetooth Protocol Stack integrato nel kernel è: http://bluez.sourceforge.net/howto/index.html