Bluetooth

De ArchwikiFR


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

La dernière mouture de bluez n'étant pas totalement rétrocompatible, deux versions de bluez cohabitent actuellement dans les dépôts, à savoir bluez4 et bluez.

Pour utiliser l'une ou l'autre, il suffit d'installer bluez ou bluez4:

pacman -S bluez

ou

pacman -S bluez4

Selon le cas, il peut être nécessaire d'installer bluez-utils, openobex, obexftp et obexfs.

Lancement et démarrage automatique:

systemctl enable bluetooth.service 
systemctl start bluetooth.service

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:

systemctl restart bluetooth.service

Utilisation de base

Bluez Utils

bluez-utils contient un certain nombre de commandes offrant à l'utilisateur la possibilité de configurer le bluetooth en ligne de commande.

Informations du controlleur et détection des appareils

Connaître les infos sur son périphérique:

$ hcitool dev
Devices:
	hci0	5C:AC:4C:FB:C8:33

$ hciconfig -a
hci0:	Type: USB
	BD Address: 5C:AC:4C:FB:C8:33 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)

Si, en lieu et place de la ligne :

UP RUNNING PSCAN ISCAN

se trouve :

DOWN

Il suffit alors d'allumer le périphérique :

hciconfig hci0 up

À présent, il est possible d'éffectuer un scan des appareils 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 de services

Le package bluez-utils permet également d'obtenir des informations sur les services des périphériques :

sdptool browse 00:xx:xx:xx:xx:xx

Pour rechercher par exemple les informations nécessaires 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)

Apparier et connecter un appareil

Bluez (v5)

bluez (v5) est livré avec une commande intéractive :

$ bluetoothctl
[NEW] Controller 5C:AC:4C:FB:C8:33 samus-0 [default]
[bluetooth]#

Remarquons dans un premier que le contrôleur est reconnu automatiquement lors du lancement de la commande.

On peut obtenir la liste des commandes disponibles à l'aide de :

[bluetooth]# help
Available commands:
  list                       List available controllers
  show [ctrl]                Controller information
  select <ctrl>              Select default controller
  devices                    List available devices
  power <on/off>             Set controller power
  pairable <on/off>          Set controller pairable mode
  discoverable <on/off>      Set controller discoverable mode
  agent <on/off/capability>  Enable/disable agent with given capability
  default-agent              Set agent as the default one
  scan <on/off>              Scan for devices
  info <dev>                 Device information
  pair <dev>                 Pair with device
  trust <dev>                Trust device
  remove <dev>               Remove device
  connect <dev>              Connect device
  disconnect <dev>           Disconnect device
  version                    Display version
  quit                       Quit program

Pour pouvoir apparier son appareil, il va falloir déclarer un agent :

[bluetooth]# agent on
Agent registered

et mettre le contrôleur sous tension :

[bluetooth]# power on
Changing power on succeeded

Une fois ces étapes effectuées, on peut chercher les appareils à proximité :

[bluetooth]# scan on
Discovery started
[CHG] Controller 00:10:20:30:40:50 Discovering: yes
[NEW] Device 00:12:34:56:78:90 myLino
[CHG] Device 00:12:34:56:78:90 LegacyPairing: yes

Il ne reste plus qu'à apparier et connecter :

[bluetooth]# pair 00:12:34:56:78:90
Attempting to pair with 00:12:34:56:78:90
[CHG] Device 00:12:34:56:78:90 Connected: yes
[CHG] Device 00:12:34:56:78:90 Connected: no
[CHG] Device 00:12:34:56:78:90 Connected: yes
Request PIN code
[agent] Enter PIN code: 1234
[CHG] Device 00:12:34:56:78:90 Paired: yes
Pairing successful
[CHG] Device 00:12:34:56:78:90 Connected: no
[bluetooth]# connect 00:12:34:56:78:90
[CHG] Device 00:12:34:56:78:90 Connected: yes

Et voilà l'appareil est apparié et connecté.

Bluez 4

Avec bluez4 est livré un petit script python vous permettant d'apparier vos appareils. Il s'agit de bluez-simple-agent.

Dans un premier temps, lancez le script en root, pour lancer l'agent :

# bluez-simple-agent
Agent registered

L'appariement se fait alors en spécifiant le contrôleur par défaut ainsi que l'adresse du périphérique :

# bluez-simple-agent hci0 00:12:34:56:78:90

Suivez les instructions du script. Une fois le périphérique apparié, vous devriez obtenir une ligne ressemblant à :

New device (/org/bluez/13072/hci0/dev_00_12_34_56_78_90)

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 disponibles:

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 des paquets suplémentaires (btsco ou/et feu-bluetooth-alsa) pour permettre la liaison audio en bluetooth, ce n'est plus le cas. Bluez comporte maintenant le nécessaire, 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 de lancer le service bluetooth au démarrage.

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"

Et lancer le service bluetooth au démarrage.

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)

Outils personnels
Autres langues