Bluetooth (Français)
Bluetoothest un standard de communication sans fils pour l'interconnection des téléphones, ordinateurs, et autres périphériques électroniques. Sous Linux, l'implémentation du protocole Bluetooth repose sur BlueZ.
Installation
Pour l'utiliser, il suffit d'installer bluez (bien sûr, les dépendances suivent):
pacman -S bluez
Selon le cas, il peut être nécessaire d'installer bluez-utils, openobexAUR, obexftpAUR et obexfs[broken link: package not found].
Lancement et démarrage automatique:
systemctl enable bluetooth.service systemctl start bluetooth.service
Configuration
La configuration de base se fait depuis le fichier /etc/bluetooth/main.conf
:
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 contrôleur et détection des appareils
Connaître les infos sur son périphérique.
(Comme pour le wifi, certaines cartes peuvent ne pas se charger automatiquement, vous pouvez toutefois utiliser rfkill
fourni par util-linux)
Vérifier l'activation de la carte et si le résultat donne:
$ rfkill l 0: acer-wireless: Wireless LAN Soft blocked: no Hard blocked: no 1: acer-bluetooth: Bluetooth Soft blocked: yes Hard blocked: no 2: phy0: Wireless LAN Soft blocked: no Hard blocked: no
exécuter (afin de tout mettre à no):
$ rfkill unblock all
ensuite,
$ 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’effectuer 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)
Appairer et connecter un appareil
bluez est livré avec une commande interactive :
$ 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'à appairer 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é.
Envoyer un fichier
Il vous faut pour cela le paquet openobexAUR.
$ 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 obexftpAUR:
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 obexftpAUR.
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[broken link: package not found]:
obexfs -b 00:xx:xx:xx:xx:xx repertoire_de_montage
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 lançant 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 connexion, ce qui est équivalent à la commande suivante:
rfcomm bind 0
/dev/rfcommX
pour y permettre l'accès. (avec un règle udev par exemple)Utilisation d'un casque/oreillette Bluetooth
Il existe plusieurs méthodes pour permettre la liaison audio en Bluetooth. Nous en verrons deux ici : la première utilisant pulseaudio et la seconde utilisant bluez-alsa.
Avec pulseaudio
Dans le cas où vous utilisez pulseaudio, il faut tout d'abord installer le paquet supplémentaire pulseaudio-bluetooth.
Démarrez le service bluetooth.service
Connectez ensuite votre périphérique audio en suivant les étapes de la section Apparier et connecter un appareil.
Si tout fonctionne correctement, une nouvelle sortie son est maintenant disponible dans PulseAudio.
Vous pouvez alors envoyer le son des applications vers cette sortie à l'aide de pavucontrol.
Dans le cas d'un dongle USB non détecter dans la liste Gnome des périphériques Bluetooh il faut arrêter de le chercher ça sert a rien:
1- aller voir directement dans la liste des périphériques audio si le matériel est pas automatiquement détecter 2- $ journalctl -f
3- sortie de journal > config/udev: Adding input device EPOS EPOS BTD 800 (/dev/input/event20)Avec bluez-alsa (ie sans pulseaudio)
Depuis sa version 5, Bluez ne gère plus ALSA. Il faut un logiciel entre alsa et bluez. C'est ce qu'apporte bluez-alsa à l'instar du module Bluetooth de pulseaudio. Le paquet est disponible sur AUR bluez-alsa-gitAUR.
Ce paquet installe l'application bluealsa qui déclare au daemon Bluetooth qu'il peut se charger des périphériques audio et qui s'interface avec alsa pour créer un périphérique audio virtuel. Ensuite, il faut configurer alsa pour utiliser utiliser ce périphérique et spécifier le périphérique Bluetooth.
Pour pouvoir l'utiliser, il va falloir être dans le groupe audio :
# usermod -aG audio <user>
permettre à blueaudio de discuter avec bluez, pour cela, il faut ajouter au fichier /etc/dbus-1/system.d/bluetooth.conf
les lignes suivantes
/etc/dbus-1/system.d/bluetooth.conf
<policy user="bluealsa"> <allow send_destination="org.bluez"/> </policy>
Tout est bon pour démarrer le service bluealsa.service
Si la configuration est bonne, la commande journalctl -u bluealsa
doit vous répondre un message ressemblant à celui ci :
systemd[1]: Started BluezAlsa proxy. bluealsa[11362]: /usr/bin/bluealsa: ctl.c:353: Starting controller loop bluealsa[11362]: /usr/bin/bluealsa: bluez.c:677: Registering endpoint: 0000110A-0000-1000-8000-00805F9B34FB: /MediaEndpoint/A2DP_MPEG24_Source bluealsa[11362]: /usr/bin/bluealsa: bluez.c:677: Registering endpoint: 0000110A-0000-1000-8000-00805F9B34FB: /MediaEndpoint/A2DPSource bluealsa[11362]: /usr/bin/bluealsa: bluez.c:677: Registering endpoint: 0000110B-0000-1000-8000-00805F9B34FB: /MediaEndpoint/A2DP_MPEG24_Sink bluealsa[11362]: /usr/bin/bluealsa: bluez.c:677: Registering endpoint: 0000110B-0000-1000-8000-00805F9B34FB: /MediaEndpoint/A2DPSink bluealsa[11362]: /usr/bin/bluealsa: bluez.c:893: Registering profile: 00001108-0000-1000-8000-00805F9B34FB: /Profile/HSPHeadset bluealsa[11362]: /usr/bin/bluealsa: bluez.c:893: Registering profile: 00001112-0000-1000-8000-00805F9B34FB: /Profile/HSPAudioGateway bluealsa[11362]: /usr/bin/bluealsa: main.c:202: Starting main dispatching loop
Ensuite, il faut connecter le périphérique audio bluetooth en suivant les étapes de la section Apparier et connecter un appareil.
Pour tester, aplay
est votre ami :
aplay -D bluealsa:HCI=hci0,DEV=XX:XX:XX:XX:XX:XX,PROFILE=a2dp NeverGonnaGiveYouUp.wav
en remplaçant XX:XX:XX:XX:XX:XX par l'adresse MAC du périphérique bluetooth.
Pour ensuite avoir une configuration utilisable pour le commun des logiciels, il faut configurer alsa, avec le fichier ~/.asoundrc
par exemple, en y mettant :
defaults.bluealsa.interface "hci0" defaults.bluealsa.device "XX:XX:XX:XX:XX:XX" defaults.bluealsa.profile "a2dp"
Pour régler le son :
alsamixer -D bluealsa
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 depuis un des front-end graphiques (cf. Bluetooth#Graphical).
Test
Par rapport à la configuration par défaut, il nous faut charger le module hidd
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 service
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 (cf. http://wiki.bluez.org[dead link 2021-11-07 ⓘ]).
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 |