Bluetooth

De ArchwikiFR
Révision datée du 17 mai 2011 à 23:00 par Cdemoulins (discussion | contributions) (Configuration à distance : utilisation du template {{rc}})


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:

A compléter

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
A compléter

Recevoir un fichier envoyé

A compléter

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
Note : Pour une utilisation en tant qu'utilisateur, il faut modifier les permissions de /dev/rfcommX pour y permettre l'accès. (avec un règle udev par exemple)

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.

-> API DBUS de BlueZ.

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

GUI

A compléter

Liens externes

OpenObex (en)
Bluez (en)