Bluetooth : Différence entre versions
m (Robot : Retiré depuis Catégorie:Migration) |
(→Installation : utilisation du template {{rc}}) |
||
Ligne 16 : | Ligne 16 : | ||
Par la suite, il faut lancer le service ''bluetooth'' qui chargera automatiquement les modules ''bluetooth, hci_usb, l2cap'' et ''rfcomm''. | Par la suite, il faut lancer le service ''bluetooth'' qui chargera automatiquement les modules ''bluetooth, hci_usb, l2cap'' et ''rfcomm''. | ||
− | + | {{rc|bluetooth}} | |
On pourra ensuite rajouter le service dans [[rc.conf#Services|/etc/rc.conf]]: | On pourra ensuite rajouter le service dans [[rc.conf#Services|/etc/rc.conf]]: |
Version du 17 mai 2011 à 22:00
Sommaire
Pré-requis
Avoir un périphérique bluetooth ;-)
Certaines des commandes/utilisations de ce tutoriel peuvent ne pas fonctionner avec certains périphériques.
Installation
Pour l'utiliser, il suffit d'installer bluez (bien sûr, les dépendances suivent):
pacman -S bluez
Selon le cas, il peut etre nécessaire d'installer openobex, obexftp et obexfs.
Par la suite, il faut lancer le service bluetooth qui chargera automatiquement les modules bluetooth, hci_usb, l2cap et rfcomm.
/etc/rc.d/bluetooth start
On pourra ensuite rajouter le service dans /etc/rc.conf:
DAEMONS=([...]dbus hal @bluetooth)
Configuration
La configuration de base se fait depuis le fichier /etc/conf.d/bluetooth:
Une modification de ce fichier nécessite un redémarrage du service:
/etc/rc.d/bluetooth restart
Utilisation de base
Détection et recherche de services
Connaître les infos sur son périphérique:
$ hcitool dev Devices: hci0 00:xx:xx:xx:xx:xx $ hciconfig -a hci0: Type: USB BD Address: 00:xx:xx:xx:xx:xx ACL MTU: 377:10 SCO MTU: 16:0 UP RUNNING PSCAN ISCAN RX bytes:157726 acl:879 sco:866 events:1027 errors:0 TX bytes:865889 acl:2879 sco:0 commands:206 errors:0 Features: 0xff 0xfe 0x0d 0x38 0x08 0x08 0x00 0x00 Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 Link policy: RSWITCH HOLD SNIFF PARK Link mode: SLAVE ACCEPT Name: 'xxx' Class: 0x08010c Service Classes: Capturing Device Class: Computer, Laptop HCI Ver: 1.2 (0x2) HCI Rev: 0x0 LMP Ver: 1.2 (0x2) LMP Subver: 0x309 Manufacturer: Broadcom Corporation (15)
Rechercher des périphériques aux alentours:
$ hcitool inq Inquiring ... 00:xx:xx:xx:xx:xx clock offset: 0x3c29 class: 0x500204 $ hcitool scan Scanning ... 00:xx:xx:xx:xx:xx K750i
Recherche des infos sur les services des périphériques:
sdptool browse 00:xx:xx:xx:xx:xx
Pour rechercher par exemple les informations nécessaire pour l'envoi de fichiers:
$ sdptool search OPUSH Inquiring ... Searching for OPUSH on xx:xx:xx:xx:xx:xx ... Service Name: OPP Service RecHandle: 0x10004 Service Class ID List: "OBEX Object Push" (0x1105) Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 5 "OBEX" (0x0008) Profile Descriptor List: "OBEX Object Push" (0x1105) Version: 0x0100
2 paramètres importants:
- Adresse MAC: xx:xx:xx:xx:xx:xx
- Canal OPUSH: 5 dans l'exemple (Channel: 5)
Envoyer un fichier
Il vous faut pour cela le paquet openobex.
$ obex_test -b xx:xx:xx:xx:xx:xx 5 Using Bluetooth RFCOMM transport OBEX Interactive test client/server. > c Connect OK! Version: 0x10. Flags: 0x00 > p PUT file (local, remote)> custom/avatar/tuxlogo.jpg logo.jpg name=custom/avatar/tuxlogo.jpg, size=23710 Going to send 23710 bytes Made some progress... Made some progress... Made some progress... Made some progress... PUT successful! > q
Encore plus simplement avec le paquet obexftp:
obexftp -b 00:xx:xx:xx:xx:xx -p test.jpg Browsing 00:xx:xx:xx:xx:xx ... Channel: 7 Connecting...done Sending "test.jpg"...\done Disconnecting...done
Parcourir et récupérer un fichier
On aura besoin de obexftp.
Lister les répertoires/fichiers disponible:
obexftp -b 00:xx:xx:xx:xx:xx -l
Récupérer un fichier en particulier
obexftp -b 00:xx:xx:xx:xx:xx -g test.jpg
On peut aussi monter le périphérique comme répertoire à l'aide de obexfs:
obexfs -b 00:xx:xx:xx:xx:xx repertoire_de_montage
Recevoir un fichier envoyé
Utilisation de RFCOMM
rfcomm permet de rattacher une connexion bluetooth au noyau.
Recherche de services
Pour exemple, on va prendre le service DUN qui permet d'établir une liaison ppp.
$ sdptool search DUN Inquiring ... Searching for DUN on 00:xx:xx:xx:xx:xx ... Service Name: Dial-up networking Service RecHandle: 0x10002 Service Class ID List: "Dialup Networking" (0x00001103) Protocol Descriptor List: "L2CAP" (0x00000100) "RFCOMM" (0x00000003) Channel: 1 Profile Descriptor List: "Dialup Networking" (0x00001103) Version: 0x0100
Configuration
Pour configurer une liaison avec le périphérique, il faut d'abord modifier le fichier /etc/bluetooth/rfcomm.conf:
rfcomm0 { # Automatically bind the device at startup bind yes; channel 1; # Bluetooth address of the device device 00:xx:xx:xx:xx:xx; }
Si on veut avoir une liaison au démarrage, il faut modifier le fichier /etc/rc.d/bluetooth pour avoir:
RFCOMM_ENABLE="true"
Utilisation
Maintenant, on est prêt à se connecter au périphérique en lancant en root:
rfcomm connect 0
ce qui est équivalent à
rfcomm connect 0 00:xx:xx:xx:xx:xx 1
Si un code pin est nécessaire, il vous faudra lancer un agent (si ce n'est déjà fait):
bluez-simple-agent
Une fois les commandes exécutées, vous devriez avoir un fichier /dev/rfcomm0 que vous pouvez utiliser comme périphérique pour une connexion ppp par exemple.
Par défaut, le démarrage du service bluetooth ne fait qu'attacher le périphérique sans initier la connection, ce qui est équivalent à la commande suivante:
rfcomm bind 0
Utilisation d'un casque/oreillette bluetooth
Auparavant, il était nécessaire d'installer le paquet btsco ou/et bluetooth-alsa... pour permettre la liaison audio en bluetooth, ce n'est plus le cas. Bluez comporte maintenant le nécessaire, afin d'utiliser il suffit d'avoir une installation alsa fonctionnel et de rajouter le fichier suivant: ~/.asoundrc:
pcm.bluetooth { type bluetooth device 00:11:22:33:44:55 }
Ensuite, on peut utiliser rfcomm pour appareiller le périphérique.
Pour l'utiliser avec mplayer par exemple:
mplayer -ao alsa:device=bluetooth fichier_media
On peut aussi mettre le périphérique bluetooth en tant que périphérique audio par défaut:
pcm.!default { type plug slave.pcm "bluetooth" }
(cf. FAQ Alsa)
Utilisation d'une souris bluetooth
De plus en plus d'ordinateurs sont livrés avec le bluetooth intégré, autant en profiter et libérer un port USB en s'affranchissant du dongle usb.
On peut éventuellement se passer de la configuration au niveau système et utiliser une configuration au niveau utilisateur -> GUI
Test
Par rapport à la configuration par défaut, il nous faut charger le module hidp et utiliser la commande hidd, nous verrons par la suite comment rendre ceci automatique.
Mais avant d'utiliser cette commande, il faut que votre souris soit en mode associatif, ce dernier est le plus souvent activé par la pression d'un bouton sous la souris.
modprobe hidp hidd --search Searching ... Connecting to device 00:0x:xx:xx:xx:xx
hidd --search recherche tous les périphériques en mode associatif et tente de s'y connecter. Si la souris est détecté mais qu'il n'est pas arrivé à se connecter, vous pouvez tenter:
hidd --connect 00:0x:xx:xx:xx:xx
Si tout s'est bien passé, vous devriez avoir votre souris qui fonctionne.
Configuration au démarrage
Pour faire fonctionner votre souris dès le démarrage, il vous faut dans le fichier /etc/conf.d/bluetooth:
- activer le daemon hidd:
HIDD_ENABLE="true"
- et lui demander de se connecter:
HIDD_OPTIONS="--connect 00:0x:xx:xx:xx:xx"
Il ne faut pas, bien sûr, oublier le daemon bluetooth dans le /etc/rc.conf
Connexion PAN
Utilisation
On peut utiliser le Bluetooth pour se connecter à un réseau à l'aide du mode PAN (Personnal Area Network) du périphérique, cette fonctionnalité est activé par défaut, il suffit de la configurer.
Dans le cas où ce n'est pas activé:
modprobe bnep
Prenons par exemple un périphérique tel un smartphone qui dispose de cette fonctionnalité, afin de s'y connecter, il suffit de lancer:
pand --connect 00:0x:xx:xx:xx:xx
Cette commande aura pour conséquence de créer un périphérique réseau bnep0 (ou x si ce n'est pas le premier).
Configuration du nouveau périphérique:
dhcpcd bnep0
Et vous voilà connecté pour peu que votre téléphone soit lui même connecté au net.
Configuration au démarrage
Pour se connecter dès le démarrage, il vous faut dans le fichier /etc/conf.d/bluetooth:
- activer le daemon pand:
PAND_ENABLE="true"
- et lui demander de se connecter:
PAND_OPTIONS="--connect 00:0x:xx:xx:xx:xx"
Plus le daemon bluetooth dans le /etc/rc.conf
Avancé
Il est possible de configurer le périphérique bluetooth après le démarrage en utilisant les commandes hciconfig, hcitool. Ces commandes sont à lancer en tant que root, certaines actions sont néanmoins possibles pour l'utilisateur normal à travers DBUS.
Pour appeler une fonction de l'api DBUS de BlueZ, la faire précéder par:
dbus-send --system --type=method_call --print-reply --dest=org.bluez /org/bluez/hci0
Pour modifier les modes de l'appareil:
Commande | Fonction DBUS | Visible | Nouvelles connections? | Période | |
---|---|---|---|---|---|
org.bluez.Adapter.GetMode | retourne le mode de l'appareil. | ||||
hciconfig hci0 noscan | org.bluez.Adapter.SetMode string:off | - | - | - | |
hciconfig hci0 pscan | org.bluez.Adapter.SetMode string:connectable | - | x | - | |
hciconfig hci0 piscan | org.bluez.Adapter.SetMode string:discoverable | x | x | x |