Bluetooth sous Linux
Dernière mise à jour : 21/11/2002
Cette page va tenter de vous guider dans l'installation d'un périphérique Bluetooth sous Linux et de la communication avec un autre périphérique non connecté à votre machine. J'ai pour cela utilisé un dongle USB (c'est le connecteur sur la droite de la photo ci-dessous) qui vous permet de transformer n'importe quelle machine ayant un port USB en carte Bluetooth. Le second périphérique est mon téléphone cellullaire Sony Ericsson Ti68i qui possède le bluetooth d'entrée.
Pour bien débuter, il faut télécharger quelques sources à installer sur votre machine. Pour cela connectez vous sur le site de bluez qui fournit tous les fichiers nécessaires au support Bluetooth sous Linux. Bien que le kernel contienne une portion de code pour le bluetooth, je vous recommande de ne pas le compiler mais d'insérer plutôt les modules bluez à la place. Dans la page de téléchargement, récupérez les sources suivants : kernel, libs, utils, sdp, hcidump et rfcomm. Tel que bluez le recommande, ajoutez ceci dans votre /etc/modules.conf :
alias net-pf-31 bluez
alias bt-proto-0 l2cap
alias char-major-10-189 ussp
alias char-major-208 ussp
Compilez à présent chacun des sources un par un en commencant par le kernel. Faîtes donc un tar xvzf bluez-kernel-xxxx.tar.gz ; cd bluez-kernel-xxxx ; ./configure ; make ; make install ; ldconfig. Le depmod est secondaire car le make install le fait tout seul. Faîtes de même pour bluez-libs et bluez-utils (dans cet ordre, c'est important). Compilez et installez en dernier les bluez-sdp et bluez-hcidump (toujours dans l'ordre énoncé). Vous avez à présent un système prêt à recevoir le bluetooth. Terminez par rfcomm pour lequel vous devez décompacter puis aller dans le sous répertoire ussp pour construire le module avec make ; make install et créer les périphériques à l'aide du script mkdev.ussp. Compilez ensuite l'utilitaire rfcomm par les commandes classiques.
Connectez à présent votre périphérique USB. Votre système devrait alors le repérer tout seul si vous avez configuré votre kernel correctement avec USB et si vous avez suivit le début de ce tutoriel pour installer les modules. Voici ce que me dit /var/log/messages :
Nov 20 22:33:49 tux kernel: hub.c: USB new device connect on bus2/1, assigned device number 2
Nov 20 22:33:49 tux kernel: usb.c: USB device 2 (vend/prod 0xa12/0x1) is not claimed by any active driver.
Nov 20 22:33:49 tux /etc/hotplug/usb.agent: Setup bluetooth hci_usb for USB product a12/1/373
Nov 20 22:33:49 tux kernel: bluetooth.c: USB Bluetooth support registered
Nov 20 22:33:49 tux kernel: usb.c: registered new driver bluetooth
Nov 20 22:33:49 tux kernel: bluetooth.c: USB Bluetooth converter detected
Nov 20 22:33:49 tux kernel: bluetooth.c: Bluetooth converter now attached to ttyUB0 (or usb/ttub/0 for devfs)
Nov 20 22:33:49 tux kernel: bluetooth.c: USB Bluetooth tty driver v0.12
Nov 20 22:33:49 tux /etc/hotplug/usb.agent: missing kernel or user mode driver bluetooth
Nov 20 22:33:49 tux kernel: BlueZ Core ver 2.2 Copyright (C) 2000,2001 Qualcomm Inc
Nov 20 22:33:49 tux kernel: Written 2000,2001 by Maxim Krasnyansky
Nov 20 22:33:49 tux kernel: BlueZ HCI USB driver ver 2.1 Copyright (C) 2000,2001 Qualcomm Inc
Nov 20 22:33:49 tux kernel: Written 2000,2001 by Maxim Krasnyansky
Nov 20 22:33:49 tux kernel: usb.c: registered new driver hci_usb
Nov 20 22:33:49 tux /etc/hotplug/usb.agent: missing kernel or user mode driver hci_usb
Ici, tout s'est bien passé car mon système possédait les bons devices dans /dev. En effet, par défaut, votre périphérique (enfin en tout cas le mien ;) tente de s'initialiser sur /dev/ttyUB0. Si vous ne l'avez pas dans votre système, créez le à l'aide de la commande suivante : mknod /dev/ttyUB0 c 216 0. Attention : les possesseurs de distributions utilisant devfs devront utiliser leur fichier de configuration (généralement /etc/devfsd.conf) pour rentrer les paramètres nécessaires à la création du périphérique (lisez la documentation disponible sur le site des modules bluez, tout y est expliqué en Anglais). Vous devez ensuite vérifier que votre périphérique s'initialise correctement au niveau des modules, si votre système ne l'a déjà fait, chargez les dans cet ordre : modprobe bluez l2cap hci_dump. Attention : si vous avez compilé le support USB bluetooth, retirez le module de /lib/modules et refaîtes un depmod -a, les modules bluez ne peuvent pas utiliser ce module mais il risque d'être chargé par votre système et le dongle ne marchera alors pas.
Il ne nous reste plus qu'à initialiser et interroger le dongle. Pour l'initialiser, faîtes un hciconfig hci up. S'il ne vous insulte pas, c'est bon signe. Pour le vérifier, faîtes un : hciconfig hci0. Il devrait alors vous retourner quelque chose de proche à ça :
bash-2.05# hciconfig hci0
hci0: Type: USB
BD Address: 00:10:60:29:12:CE ACL MTU: 192:8 SCO MTU: 64:8
UP RUNNING PSCAN ISCAN
RX bytes:346 acl:0 sco:0 events:11 errors:0
TX bytes:36 acl:0 sco:0 commands:10 errors:0
Il est ensuite venu le moment d'essayer la communication avec votre téléphone portable, pour se faire, lancez le menu découvrir sur votre téléphone (dans la section reception/envoi puis bluetooth. Et tapez ceci en ligne de commande : sdptool browse. Notez que vous pouvez aussi demander au portable de scanner les périphériques bluetooth disponibles près de lui, c'est le cas pour le mien qui a bien vu JACKDANIELS (le dongle USB :) Voici ce que retourne le mien :
bash-2.05# sdptool browse
Inquiring ...
Browsing 00:80:37:99:A4:51 ...
Service Name: Dial-up Networking
Service RecHandle: 0x10000
Service Class ID List:
"Dialup Networking" (0x1103)
"Generic Networking" (0x1201)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel/Port: 1
Profile Descriptor List:
"Dialup Networking" (0x1103)
Version: 0x0100
...
Assurez vous que le téléphone portable va accepter la connection du dongle, le mien par exemple m'a tout de suite indiqué une demande de connection lorsque j'essayais de faire un ping et proposais de le bloquer. Voici donc la commande pour faire 5 pings consécutifs sur votre téléphone : l2ping 00:80:37:99:A4:51 -c 5. Et voici le résultat en chiffres :
bash-2.05# l2ping 00:80:37:99:A4:51 -c 5
Ping: 00:80:37:99:A4:51 from 00:10:60:29:12:CE (data size 20) ...
0 bytes from 00:80:37:99:A4:51 id 200 time 41.86ms
0 bytes from 00:80:37:99:A4:51 id 201 time 38.83ms
0 bytes from 00:80:37:99:A4:51 id 202 time 42.61ms
0 bytes from 00:80:37:99:A4:51 id 203 time 35.41ms
0 bytes from 00:80:37:99:A4:51 id 204 time 45.26ms
5 sent, 5 received, 0% loss
Comme vous l'aurez (peut être) remarqué, le dongle USB a vu le téléphone portable et décrit un des services comme le dial-up networking, on devrait donc pouvoir se connecter dessus. Il faut donc charger le module rfcomm par la commande modprobe rfcomm. Attention : assurez vous d'avoir créé les devices ussp comme indiqué dans le source rfcomm/ussp/mkdev.ussp sinon cela ne marchera pas. Faîtes ensuite un : rfcomm 0 00:80:37:99:A4:51 1. Vous devez adapter cette commande à rfcomm 'device tty' 'addresse du portable' 'service'. Le service est obtenu par le scan juste avant. Vous devriez alors obtenir ceci :
bash-2.05# rfcomm 0 00:80:37:99:A4:51 1
Connected /dev/ttyU0 to 00:80:37:99:A4:51 on channel 1
Bravo ! Vous venez de connecter votre téléphone par bluetooth avec votre dongle USB sur votre PC. Vous pouvez alors à partir de ce moment transférer des fichiers et sauver votre carnet de téléphone et adresses de votre téléphone vers votre PC. Recherchez sur le web pour découvrir quelques addresses. Voici notemment un projet qui a retenu mon attention : . Je complèterais ces pages d'ici quelques temps avec des exemples sur les transferts.
|