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.
La prima parte di questa guida tratterà 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).
L'ultima parte della guida elencherà in dettaglio le applicazioni che traggono vantaggio dalle possibilità che offre la tecnologia Bluetooth.
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 2.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 2.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 |
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 3.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 3.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 3.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 3.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: 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). |
Una volta conclusa la configurazione di BlueZ, si posson far ripartire i servizi necessari.
Codice 3.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 3.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) |
4. 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 4.1: Controllo dei dispositivi locali |
# hcitool dev
Devices:
hci0 00:01:02:03:04:05
|
Codice 4.2: Scansione dei dispositivi remoti |
# hcitool scan
Scanning ...
00:0A:0B:0C:0D:0E Grayhat
|
Codice 4.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 4.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 4.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 4.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 4.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 4.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) |
5. Applicazioni Desktop per Bluetooth
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 gli utenti gnome, una scelta azzeccata può essere il pacchetto gnome-bluetooth, ch fornisce le funzioni base principalmente usate, come puoi vedere qui sotto.
Codice 5.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):
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 5.2: Installare gnome-phone-manager |
# emerge gnome-phone-manager
|
Come si può verificare qui sotto, con KDE e kdebluetooth sono presenti molte più funzionalità rispetto all'applicazione per il desktop Gnome.
Codice 5.3: Installare kdebluetooth |
# emerge kdebluetooth
|
Altre applicazioni interessanti
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.
I contenuti di questo documento sono rilasciati sotto la licenza Creative Commons - Attribution / Share Alike.