Gentoo Logo

Guida Gentoo Linux al Bluetooth

Indice:

1.  Introduzione

Cos'è il Bluetooth?

Il Bluetooth è uno standard industriale che permette agli utenti la connessione e lo scambio di file tra diversi dispositivi come personal computer, palmari o cellulari. Usando la tecnologia Bluetooth, si possono effettuare trasmissioni dati e voce senza l'utilizzo di cavi ad un costo ridotto. Il Bluetooth offre inoltre la possibilità di creare piccole LAN wireless e di sincronizzare dispositivi diversi.

Contenuto della guida

La prima parte di questa guida tratterà il riconoscimento dei dispositivi che supportano la tecnologia Bluetooth, permettendo agli utenti di acquistare apparecchiature che sanno già di poter utilizzare perfettamente. Il passo successivo sarà la configurazione del kernel e l'identificazione dei dispositivi Bluetooth installati nel sistema. Infine l'installazione degli strumenti necessari per la loro gestione e il corretto funzionamento.

La seconda parte tratterà la rilevazione dei dispositivi remoti, come stabilire una connessione da e verso il dispositivo impostando o una Radio Frequency Communication (RFCOMM) o una Personal Area Network (PAN).

L'ultima parte della guida elencherà in dettaglio le applicazioni che traggono vantaggio dalle possibilità che offre la tecnologia Bluetooth.

2.  Dispositivi supportati

Dispositivi certificati e non-certificati Bluetooth

Importante: Questi prodotti dovrebbero funzionare anche se alcuni di loro non sono certificati. Gentoo comunque, non garantisce nessun supporto.

Una lista dei dispositivi supportati può essere consultata presso questa pagina: Bluetooth device features and revision information by Marcel Holtmann.

3.  Configurazione del sistema

Configurazione del Kernel

Dato che l'ultimo ramo stabile del kernel linux è il 2.6, la configurazione verrà effettuata utilizzando questa versione. La maggior parte dei dispositivi Bluetooth è connessa tramite porta USB, quindi sarà necessario attivare anche questo supporto. Fate riferimento alla guida USB e Gentoo Linux.

Codice 3.1: Configurazione del kernel 2.6

Networking  --->

<*> Bluetooth subsystem support  --->

--- Bluetooth subsystem support
<M>   L2CAP protocol support
<M>   SCO links support
<M>   RFCOMM protocol support
[*]     RFCOMM TTY support
<M>   BNEP protocol support
[*]     Multicast filter support
[*]     Protocol filter support
<M>   HIDP protocol support

Bluetooth device drivers  --->
<M> HCI USB driver
[*]   SCO (voice) support
<M> HCI UART driver
[*]   UART (H4) protocol support
[*]   BCSP protocol support
[*]   Transmit CRC with every BCSP packet
<M> HCI BCM203x USB driver
<M> HCI BPA10x USB driver
<M> HCI BlueFRITZ! USB driver
(I quattro driver sottostanti sono per dispositivi Bluetooth PCMCIA
e verranno visualizzati solo se si seleziona anche il supporto PCMCIA nel kernel.)
<M> HCI DTL1 (PC Card) driver
<M> HCI BT3C (PC Card) driver
<M> HCI BlueCard (PC Card) driver
<M> HCI UART (PC Card) device driver
(Il driver sottostante abilita HCI Emulation software)
<M> HCI VHCI (Virtual HCI device) driver

(Tornare indietro di tre livelli fino a Device Drivers e controllare se
il supporto all'USB è abilitato. Questo è necessario se si utilizza un'antenna
Bluetooth. Quelle in commercio di solito utilizzano la porta USB)
USB support  --->

<*> Support for Host-side USB
--- USB Host Controller Drivers
<M> EHCI HCD (USB 2.0) support
[ ]   Full speed ISO transactions (EXPERIMENTAL)
[ ]   Root Hub Transaction Translators (EXPERIMENTAL)
<*> OHCI HCD support
<*> UHCI HCD (most Intel and VIA) support
< > SL811HS HCD support

Riavviare il sistema con il nuovo kernel. Se non si verificano errori, il Pc sarà pronto per il Bluetooth.

Importante: Il proprio dispositivo USB potrebbe avere due modalità, e quella predefinita potrebbe essere HID anzichè HCI. In questo caso, usate l'utilità hid2hci per cambiare la modalità da HID a HCI. Questa modifica non è permanente e dovrà essere ripetuta al successivo riavvio.

Codice 3.2: Verificare la presenza del dispositivo Bluetooth

(Come controllare la presenza del dispositivo)
# cat /proc/bus/usb/devices | grep -e^[TPD] | grep -e Cls=e0 -B1 -A1
(La stringa Cls=e0(unk. ) identifica l'adattatore Bluetooth.)
T:  Bus=02 Lev=02 Prnt=03 Port=00 Cnt=01 Dev#=  4 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=e0(unk. ) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=0a12 ProdID=0001 Rev= 5.25
(Probabile schermata di lsusb da sys-apps/usbutils)
# lsusb
Bus 003 Device 002: ID 046d:c00e Logitech, Inc. Optical Mouse
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 002: ID 0db0:1967 Micro Star International Bluetooth Dongle

4.  BlueZ - Lo Stack Bluetooth

Installare BlueZ

Ora che il dispositivo è stato riconosciuto dal kernel, c'è bisogno di un layer che permetta alle applicazioni di comunicare con l'adattatore Bluetooth. BlueZ fornisce lo stack Bluetooth ufficiale di Linux. Gli ebuild necessari sono bluez-libs e bluez-utils. I dispositivi che necessitano il firmware Broadcom hanno bisogno anche di bluez-firmware.

Codice 4.1: Installazione di bluez-libs e bluez-utils

# emerge net-wireless/bluez-libs net-wireless/bluez-utils

Configurazione di BlueZ e allineamento PIN

È arrivato il momento di vedere se il dispositivo è stato rilevato correttamente dal sistema. Prima però avviare il servizio Bluetooth.

Codice 4.2: Eseguire hciconfig

(Avvio di Bluetooth)
# /etc/init.d/bluetooth start
* Starting Bluetooth ...
*     Starting hcid ...                                              [ ok ]
*     Starting sdpd ...                                              [ ok ]
*     Starting rfcomm ...                                            [ ok ]

# hciconfig
hci0:   Type: USB
        BD Address: 00:01:02:03:04:05 ACL MTU: 192:8  SCO MTU: 64:8
        DOWN
        RX bytes:131 acl:0 sco:0 events:18 errors:0
        TX bytes:565 acl:0 sco:0 commands:17 errors:0

L'output precedente mostra che il dispositivo Bluetooth è stato riconosciuto. Notare come ora sia DOWN. Una volta completata la configurazione sarà possibile renderlo attivo. Il percorso del file di configurazione è /etc/bluetooth/hcid.conf. Le modifiche necessarie al file di configurazione sono indicate qui sotto. Per ulteriori dettagli, consultare man hcid.conf.

Codice 4.3: Modificare /etc/bluetooth/hcid.conf

(Sono indicate le modifiche raccomandate)

# HCId options
options {
        # Automatically initialize new devices
        autoinit yes;

(Cambiare security in "auto")
        # Security Manager mode
        #   none - Security manager disabled
        #   auto - Use local PIN for incoming connections
        #   user - Always ask user for a PIN
        #
        security auto;

        # Pairing mode
        pairing multi;

(Se si stanno usando: <=bluez-libs-2.x e <=bluez-utils-2.x
         c'è bisogno solamente di un gestore di pin)
        (Per usare /etc/bluetooth/pin-helper cambiare la variabile pin_helper)
        # PIN helper
        pin_helper /etc/bluetooth/pin-helper;
}

# Default settings for HCI devices
device {
(Impostare il nome del dispositivo, utilizzare quello che si ritiene più opportuno)
        # Local device name
        #   %d - device id
        #   %h - host name
        name "BlueZ at %h (%d)";

        # Local device class
        class 0x3e0100;

        # Inquiry and Page scan
        iscan enable; pscan enable;

        # Default link mode
        lm accept;

        # Default link policy
        lp rswitch,hold,sniff,park;

(Non modificare niente, se non si sa di cosa si tratta)
        # Authentication and Encryption (Security Mode 3)
        #auth enable;
        #encrypt enable;
}

Il passo successivo è quello di configurare il numero PIN. Servirà per l'allineamento di questo dispositivo con gli altri.

Codice 4.4: Modificare /etc/bluetooth/pin

(Sostituire 123456 con il numero pin che si preferisce.)
123456

Importante: Il numero inserito deve essere lo stesso nei dispositivi che si vuore connettere alla rete Bluetooth, in modo da garantire il corretto allineamento. Deve anche essere tenuto segreto, altrimenti sarà possibile, per chiunque ne sia a conoscenza, stabilire una connessione ai dispositivi della rete.

Nota: Se si stanno usando <=bluez-libs-2.x e <=bluez-utils-2.x si possono scegliere tra differenti gestori di pin, in base alle proprie preferenze. Tra i tanti si segnalano: /usr/lib/kdebluetooth/kbluepin (net-wireless/kdebluetooth), /usr/bin/bluepin o /etc/bluetooth/pin-helper.

Nota: A partire dalla versione >=bluez-libs-3.x e >=bluez-utils-3.x, i gestori di pin sono stati sostituiti da agenti di passkey. Sono disponibili alcuni agenti di passkey con interfaccia grafica che aiutano a gestire il proprio PIN, per esempio i pacchetti bluez-gnome e kdebluetooth. Da riga di comando si può anche usare passkey-agent (appartenente al pacchetto bluez-utils).

Configurazione dei servizi

Una volta conclusa la configurazione di BlueZ, si posson far ripartire i servizi necessari.

Codice 4.5: Avviare il demone Bluetooth

# /etc/init.d/bluetooth restart
(si può anche inserire nel runlevel di default)
# rc-update add bluetooth default
* bluetooth added to runlevel default
* rc-update complete.

Assicurarsi che il demone Bluetooth venga avviato correttamente. Se hcid e sdpd sono in esecuzione, allora è stato configurato tutto in modo corretto. Ora non resta che verificare se il dispositivo sia attivo con le nuove impostazioni.

Codice 4.6: Verificare se il demone Bluetooth è partito correttamente

(Controllare se i servizi sono in esecuzione)
# ps -ae | grep hcid
26050 ?        00:00:00 hcid
# ps -ae | grep sdpd
26054 ?        00:00:00 sdpd

# hciconfig -a
hci0:   Type: USB
        BD Address: 00:0A:0B:0C:0D:0E ACL MTU: 192:8 SCO MTU: 64:8
        UP RUNNING PSCAN ISCAN
        RX bytes:125 acl:0 sco:0 events:17 errors:0
        TX bytes:565 acl:0 sco:0 commands:17 errors:0
        Features: 0xff 0xff 0x0f 0x00 0x00 0x00 0x00 0x00
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
        Link policy: RSWITCH HOLD SNIFF PARK
        Link mode: SLAVE ACCEPT
        Name: 'BlueZ at bluehat (0)'
        Class: 0x3e0100
        Service Classes: Networking, Rendering, Capturing, Object Transfer,
        Audio
        Device Class: Computer, Uncategorized
        HCI Ver: 1.1 (0x1) HCI Rev: 0x1e7 LMP Ver: 1.1 (0x1) LMP Subver: 0x1e7
        Manufacturer: Cambridge Silicon Radio (10)

5.  Rilevare e Connettere i dispositivi remoti

Rilevare i dispositivi Bluetooth di altri host

A questo punto sarà possibile rilevare i dispositivi Bluetooth installati su altre macchine, indipendentemente dal sistema operativo che le ospita, tramite il comando hcitool.

Codice 5.1: Controllo dei dispositivi locali

# hcitool dev
Devices:
        hci0    00:01:02:03:04:05

Codice 5.2: Scansione dei dispositivi remoti

# hcitool scan
Scanning ...
        00:0A:0B:0C:0D:0E       Grayhat

Codice 5.3: Interrogazione dei dispositivi remoti

# hcitool inq
Inquiring ...
        00:0A:0B:0C:0D:0E       clock offset: 0x5579    class: 0x72010c

Una volta conosciuto l'indirizzo MAC del dispositivo remoto, è possibile controllare se è correttamente allineato.

Codice 5.4: Eseguire l2ping

# l2ping 00:0A:0B:0C:0D:0E
Ping: 00:0A:0B:0C:0D:0E from 00:01:02:03:04:05 (data size 20) ...
20 bytes from 00:0A:0B:0C:0D:0E id 200 time 69.85ms
20 bytes from 00:0A:0B:0C:0D:0E id 201 time 9.97ms
20 bytes from 00:0A:0B:0C:0D:0E id 202 time 56.86ms
20 bytes from 00:0A:0B:0C:0D:0E id 203 time 39.92ms
4 sent, 4 received, 0% loss

Impostare una Radio Frequency Communication (RFCOMM)

Nota: L'impostazione della Radio Frequency Communication (Comunicazione in Radiofrequenza) è opzionale.

E' possibile stabilire una comunicazione in radiofrequenza con un altro dispositivo Bluetooth usando il comando rfcomm. Per semplificare le cose, specialmente per gli utenti con più dispositivi, è consigliabile modificare le impostazioni predefinite del file di configurazione rfcomm in /etc/bluetooth/rfcomm.conf.

L'intero segmento che inizia con rfcomm0 { e finisce con } riguarda la configurazione del dispositivo che, una volta connesso al sistema, sarà identificato come /dev/rfcomm0. Viene mostrato come esempio la configurazione per rfcomm0. Aggiungere poi tutti i dispositivi che si desidera collegare.

Codice 5.5: Modificare /etc/bluetooth/rfcomm.conf

(Sono visualizzati solo i cambiamenti necessari)
rfcomm0 {
        # Automatically bind the device at startup
        (Creare il file di periferica /dev/rfcomm0 al'avvio)
        bind yes;

        # Bluetooth address of the device
        (Inserire l'indirizzo del dispositivo a cui ci si vuole connettere)
        device 00:0A:0B:0C:0D:0E;

}

Dopo la configurazione di RFCOMM, è possibile connettersi a qualsiasi dispositivo. Se il file /etc/bluetooth/rfcomm.conf è stato modificato come sopra indicato, sarà sufficiente digitare solamente il comando visualizzato qui sotto. In caso contrario, viene illustrato anche un metodo di connessione alternativo.

Codice 5.6: Stabilire una connessione RFCOMM

(Lo 0 si riferisce a rfcomm0 nel file di configurazione)
# rfcomm connect 0 
Connected /dev/rfcomm0 to 00:0A:0B:0C:0D:0E on channel 1
Press CTRL-C for hangup

(Se non è stato modificato il file /etc/bluetooth/rfcomm.conf)
# rfcomm connect 0 00:0A:0B:0C:0D:0E 1
Connected /dev/rfcomm0 to 00:0F:DE:69:50:24 on channel 1
Press CTRL-C for hangup

Il primo parametro dopo il comando connect è il nodo TTY del dispositivo RFCOMM che verrà usato (di solito è 0). Il secondo parametro indica l'indirizzo MAC del dispositivo remoto. Il terzo invece è opzionale e specifica il canale da utilizzare. Per connettersi ad un dispositivo è necessario che questo sia in attesa di connessioni in ingresso. Possiamo interrompere la comunicazione in ogni momento, semplicemente premendo CTRL+C.

Codice 5.7: Attesa per le connessioni RFCOMM in entrata

# rfcomm listen 0 1
Waiting for connection on channel 1

Come per il comando connect, listen può ricevere due parametri. Il primo specifica il nodo del device TTY RFCOMM (di solito 0) che verrà utilizzato per le connessioni, mentre il secondo indica il canale.

Tutte le volte che si esegue il comando rfcomm, si può anche specificare il dispositivo fisico da usare. Qui sotto è riportato un piccolo esempio, utilizzando due semplici comandi.

Codice 5.8: Selezione del dispositivo fisico per le connessioni RFCOMM

# rfcomm -i hci0 listen 0 1
Waiting for connection on channel 1
(Mettere in ascolto un determinato dispositivo) 
# rfcomm -i hci0 connect 0 00:0A:0B:0C:0D:0E 1
(Usare uno specifico dispositivo per il collegamento)

Configurare una Personal Area Network (PAN)

Nota: Notare che impostare una Personal Area Network è opzionale. Questa sezione descrive come configurare e connettersi ad un Network Access Point. In maniera molto simile potete impostare anche una Group Ad-Hoc Network.

Per prima cosa, bisogna aver caricato il modulo bnep. Probabilmente si preferisce averlo caricato automaticamente tutte le volte che viene avviato il computer.

Codice 5.9: Caricare il modulo bnep

# modprobe bnep
# echo "bnep" >> /etc/modules.autoload.d/kernel-2.6

Bisogna quindi avviare il demone pand sull'host che fornirà il NAP. Va inoltre specificato se si desidera fornire un servizio NAP, dove l'host in questione sarà il master e gli altri che si connetteranno saranno slave, o un servizio GN, Group ad-hoc Network.

Codice 5.10: Avviare il demone pand

# pand --listen --role NAP --master --autozap

Una volta messo in ascolto l'host master, agli altri host slave non rimane che connettersi ad esso.

Codice 5.11: Connettersi al Network Access Point

# pand --connect 00:0A:0B:0C:0D:0E --service NAP --autozap

Se tutto va per il meglio, non rimane che configurare gli indirizzo IP sugli host slave.

Codice 5.12: bnep configurazione indirizzo IP

host0 # ifconfig bnep0 192.168.2.1
host1 # ifconfig bnep0 192.168.2.2

host0 # ifconfig bnep0
bnep0     Link encap:Ethernet  HWaddr 00:0A:0B:0C:0D:0E
          inet addr:192.168.2.1  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::210:60ff:fea3:cb41/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:208 (208.0 b)  TX bytes:188 (188.0 b)

host1 # ifconfig bnep0
bnep0     Link encap:Ethernet  HWaddr 00:01:02:03:04:05
          inet addr:192.168.2.2  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::210:60ff:fea2:dd2a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:208 (208.0 b)  TX bytes:188 (188.0 b)

E' possibile quindi fare alcuni test per verificare il corretto funzionamento della rete.

Codice 5.13: IP ping tra le interfacce bnep

host1 # ping 192.168.2.1
PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.
64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=34.0 ms
64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=37.3 ms

--- 192.168.2.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 34.045/35.690/37.336/1.656 ms

6.  Applicazioni Desktop per Bluetooth

Introduzione

Ci sono numerosi programmi per il desktop, per cui questo capitolo è stato suddiviso in tre parti, applicazioni per GNOME, per KDE e l'ultimo per quelle che non utilizzano un windows manager particolare.

Per Gnome

Per gli utenti gnome, una scelta azzeccata può essere il pacchetto gnome-bluetooth, ch fornisce le funzioni base principalmente usate, come puoi vedere qui sotto.

  • gnome-bluetooth-manager: Per gestire i dispositivi remoti Bluetooth.
  • gnome-obex-send: Per mandare file verso altri dispositivi.
  • gnome-obex-server: Per ricevere file.

Codice 6.1: Installare gnome-bluetooth

# emerge gnome-bluetooth

Verrà aggiunta una voce nel menù Applicazioni > Strumenti di Sistema dove si potrà scegliere se eseguire l'applicazione per la gestione dei dispositivi o per lo scambio dei file.

Per trasferire file (modo più semplice):

  • Dal Telefono al Computer - Manda il file dal Telefono via Bluetooth e questo verrà prelevato e salvato dal PC nella propria cartella /home.

gnome-phone-manager è un'elegante applicazione che può esser utilizzata per mandare e ricevere messaggi da e verso il telefono, usando solamente il proprio pc. Non sarà più necessario l'uso del cellulare per leggere o scrivere messaggi, dato che si potrà fare tutto tramite questo programma. Comparirà inoltre a schermo un avviso ogni volta che verrà ricevuto un nuovo messaggio. L'installazione è, come sempre, molto semplice.

Codice 6.2: Installare gnome-phone-manager

# emerge gnome-phone-manager

Per KDE

Come si può verificare qui sotto, con KDE e kdebluetooth sono presenti molte più funzionalità rispetto all'applicazione per il desktop Gnome.

  • kbluetoothd: Bluetooth Meta Server.
  • kbtsearch: Utilità per la ricerca dei dispositivi Bluetooth.
  • khciconfig: Monitor Bluetooth.
  • kioclient: KIO client da linea di comando.
  • qobexclient: Coltellino svizzero per testing/sviluppo su OBEX.
  • kbtobexclient: Un Framework Applicativo per Bluetooth.
  • kioobex_start
  • kbtserialchat
  • kbemusedsrv: Server Bemused per KDE.
  • kbtobexsrv: OBEX Push Server per Bluetooth.
  • kbluepin: Applicazione KDE KPart.
  • auth-helper: Un programma di supporto per kbtobexsrv che invia una richiesta di autenticazione verso un determinato link ACL.

Codice 6.3: Installare kdebluetooth

   # emerge kdebluetooth

Altre applicazioni interessanti

  • app-mobilephone/obexftp: Trasferimento file su OBEX per telefoni cellulari.
  • app-mobilephone/bemused: Bemused è un sistema che permette di controllare la propria collezione musicale dal telefono, utilizzando Bluetooth.
  • app-pda/multisync: Multisync permette di sincronizzare contatti, appuntamenti e note dal proprio telefono cellulare al computer, utilizzando una connessione Bluetooth. Include funzionalità di backup e ripristino, oltre che di sincronizzazione con il client email Evolution. È necessario impostare la use flag irmc per essere sicuri che multisync abbia il supporto al Bluetooth.
  • net-wireless/opd e net-wireless/ussp-push sono strumenti da linea di comando (server e client) che possono essere usati per inviare file al proprio telefono mobile.

7.  Ringraziamenti

Ringraziamenti speciali a Marcel Holtmann per il suo tempo dedicato allo sviluppo di Bluetooth e per la revisione di questa guida. Un grande ringraziamento anche a Douglas Russell per i suoi test hardware e per averla migliorata.



Stampa

Aggiornato il 21 ottobre 2007

Oggetto: In questa guida verrà spiegato come installare un dispositivo Bluetooth, come configurare correttamente il kernel ed illustrerà tutte le possibilità che una connessione Bluetooth offre.

Ioannis Aslanidis
Autore

Douglas Russell
Contributi

Marcel Holtmann
Contributi

Shyam Mani
Autore

Lukasz Damentko
Redazione

Alessandro D'Angelo
Traduzione

Cristiano Chiucchiolo
Traduzione

Andrea Perotti
Traduzione

Donate to support our development efforts.

Support OSL

Support OSL

Gentoo Centric Hosting: vr.org

VR Hosted

Tek Alchemy

Tek Alchemy

SevenL.net

SevenL.net

Global Netoptex Inc.

Global Netoptex Inc.

Bytemark

Bytemark

Linux World Expo

Linux World Expo

Copyright 2001-2008 Gentoo Foundation, Inc. Questions, Comments? Contact us.