Bluetooth

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Bluetooth and the translation is 100% complete.
Resources

Cet article décrit la configuration et l'usage des contrôleurs Bluetooth et des appareils Bluetooth.

Prérequis

Pour suivre cet article, l'utilisateur doit avoir préalablement configuré udev et USB.

Installation

Noyau

Le plus souvent, il suffira d'activer les protocoles RFCOMM (CONFIG_RFCOMM), HIDP (CONFIG_BT_HIDP), HCI USB (CONFIG_BT_HCIBTUSB) et/ou HCI UART (CONFIG_BT_HCIUART). Le pilote d'entrée-sortie utilisateur pour les équipements récepteurs HID (CONFIG_UHID) doit être activé dans le cas des claviers et souris Bluetooth.

KERNEL Enabling Bluetooth support
[*] Networking support --->
      <M>   Bluetooth subsystem support --->
              [*]   Bluetooth Classic (BR/EDR) features
              <*>     RFCOMM protocol support
              [ ]       RFCOMM TTY support
              < >     BNEP protocol support
              [ ]       Multicast filter support
              [ ]       Protocol filter support
              <*>     HIDP protocol support
              [*]     Bluetooth High Speed (HS) features
              [*]   Bluetooth Low Energy (LE) features
                    Bluetooth device drivers --->
                      <M> HCI USB driver
                      <M> HCI UART driver
      <*>   RF switch subsystem support --->
    Device Drivers --->
          HID support --->
            <*>   User-space I/O driver support for HID subsystem

Les micrologiciels

La plupart des contrôleurs Bluetooth ont besoin de micrologiciel (firmware) pour pouvoir fonctionner. Si le contrôleur est compatible avec Linux, dmesg indiquera la plupart du temps si un micrologiciel est nécessaire. Le paquet sys-kernel/linux-firmware doit, en règle générale, proposer un micrologiciel mais parfois certains équipements ne pourront fonctionner qu'avec un micrologiciel propriétaire.

root #emerge --ask --noreplace sys-kernel/linux-firmware

Options de la variable USE

BlueZ est une implémentation du protocole Bluetooth pour Linux disponible en installant le paquet net-wireless/bluez.

USE flags for net-wireless/bluez Bluetooth Tools and System Daemons for Linux

btpclient Enable BTP client
cups Add support for CUPS (Common Unix Printing System)
debug Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces
deprecated Build deprecated plugins
doc Add extra documentation (API, Javadoc, etc). It is recommended to enable per package instead of globally
experimental Build experimental plugins
extra-tools Install tools that upstream doesn't install on purpose by default. All this tools shouldn't be used. Then, please notify upstream about you still need them to let them know the situation.
mesh Add support for Bluetooth Mesh control application and advertising bearer.
midi Enable MIDI support
obex Enable OBEX transfer support
readline Enable support for libreadline, a GNU line-editing library that almost everyone wants
selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur
systemd Enable use of systemd-specific libraries and features like socket activation or session tracking
test Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently)
test-programs Install tools for testing of various Bluetooth functions
udev Enable virtual/udev integration (device discovery, power and storage device support, etc)

Bluetooth peut être globalement activé en donnant la valeur bluetooth à la variable USE :

FILE /etc/portage/make.conf
USE="bluetooth"

Installation

Le système doit être mis à jour si la variable USE a été modifiée pour prendre la valeur bluetooth:

root #emerge --ask --changed-use --deep @world

Installer BlueZ:

root #emerge --ask --noreplace net-wireless/bluez

Configuration

Droits d'accès

Les droits d'accès pour les équipements Bluetooth sont automatiquement gérés par D-Bus, et l'accès est automatiquement accordé à tous les utilisateurs par défaut.

Services

OpenRC

Démarrer Bluetooth :

root #rc-service bluetooth start

Lancer Bluetooth au démarrage :

root #rc-update add bluetooth default

systemd

Démarrer Bluetooth :

root #systemctl start bluetooth

Lancer Bluetooth au démarrage :

root #systemctl enable bluetooth

Utilisation

Configuration du contrôleur

Afficher l'information sur le contrôleur :

Remarque
hciconfig et d'autres fonctionnalités peuvent être utilisées à la condition que le paquet net-wireless/bluez soit installé avec la valeur de la variable USE deprecated.
root #hciconfig -a
hci0:   Type: BR/EDR  Bus: USB
        BD Address: 00:02:72:2F:A9:33  ACL MTU: 1021:8  SCO MTU: 64:1
        UP RUNNING PSCAN 
        RX bytes:1166 acl:0 sco:0 events:43 errors:0
        TX bytes:960 acl:0 sco:0 commands:43 errors:0
        Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
        Link policy: RSWITCH SNIFF 
        Link mode: SLAVE ACCEPT 
        Name: 'BlueZ 5.21'
        Class: 0x000104
        Service Classes: Unspecified
        Device Class: Computer, Desktop workstation
        HCI Version: 4.0 (0x6)  Revision: 0x1000
        LMP Version: 4.0 (0x6)  Subversion: 0x220e
        Manufacturer: Broadcom Corporation (15)

hci0 est le nom du contrôleur et UP (3ème ligne) indique que le contrôleur est activé.

Activer le contrôleur si hciconfig indique (avec DOWN) (3ème ligne) que le contrôleur est désactivé:

root #hciconfig hci0 up
Important
Au moment de l'essai d'activation du contrôleur, peut s'afficher le message suivant: Can't init device hci0: Operation not possible due to RF-kill

Dans ce cas, requêter l'état de l'émetteur radio Bluetooth à l'aide de rfkill :

root #rfkill list bluetooth
0: hci0: Bluetooth
        Soft blocked: no
        Hard blocked: no

rfkill est fourni par >=sys-apps/util-linux-2.31. Il peut aussi être installé par le paquet net-wireless/rfkill (non maintenu).

Remarque
Si Bluetooth est bloqué ou désactivé dans le BIOS/UEFI, rfkill peut incorrectement indiquer que le contrôleur est dans l'état Hard blocked: no.

Débloquer le contrôler si rfkill indique (par le message Soft blocked: yes) que le contrôleur est bloqué :

root #rfkill unblock bluetooth

Si rfkill indique (par le message Hard blocked: yes) que le contrôleur est bloqué, débloquer le contrôleur en changeant la position d'un interrupteur physique ou en appuyant sur une touche de fonction du clavier.

Les contrôleurs Blutooth peuvent être automatiquement activés en spécifiant AutoEnable=true dans le fichier /etc/bluetooth/main.conf:

FILE /etc/bluetooth/main.conf
[Policy]
AutoEnable=true

Il peut arriver que les contrôleurs Bluetooth aient été bloqués par l'action d'un des outils logiciels de gestion de l'énergie (udev). S'assurer dans ce cas que la valeur de state est fixée à 1 dans le fichier de règles correspondant ou sinon effacer complètement la ligne suivante :

FILE /etc/udev/rules.d/10-local-powersave.rules
SUBSYSTEM=="rfkill", ATTR{type}=="bluetooth", ATTR{state}="1"

Appairage

Les appareils Bluetooth doivent être appairés avec un contrôleur Bluetooth avant toute utilisation. Pour cela, il faut entrer un code PIN (ou tout autre type de code) dans les deux équipements par le biais d'un agent interactif. Certains appareils, comme les casques audio, ne permettent pas d'entrer un code PIN arbitraire. Ces appareils utilisent un code PIN statique, qui est d'habitude 0000, 1111, 1234 or 9999. D'autres appareils (par exemple La télécommande BD de Sony) ne demandent pas d'entrer un code PIN et, dans ce cas, essayer de rentrer un code PIN à l'invite fera échouer l'appairage. Avec ce type d'appareil, l'étape de l'appairage peut être sautée.

Cet article ne porte que sur l'appairage des appareils avec bluetoothctl, qui est un agent interactif en ligne de commande fourni avec le paquet net-wireless/bluez. Si un environnement de bureau graphique est utilisé, l'appairage peut être mené à bien à l'aide d'un agent interactif doté d'une interface graphique. Pour KDE, utiliser kde-plasma/bluedevil, pour GNOME, net-wireless/gnome-bluetooth, et pour GTK choisir entre net-wireless/blueman ou net-wireless/blueberry.

Remarque
Les appareils antérieurement appairés devront l'être à nouveau après une mise à jour logicielle vers BlueZ 4.

Démarrer bluetoothctl :

user $bluetoothctl

Lister les contrôleurs disponibles :

[bluetooth]#list

Afficher l'information sur un contrôleur :

[bluetooth]#show controller_mac_address

Etablir le contrôleur par défaut :

[bluetooth]#select controller_mac_address

Mettre en route le contrôleur :

[bluetooth]#power on

Activer l'agent et en faire l'agent par défaut :

[bluetooth]#agent on
[bluetooth]#default-agent

Rendre le contrôleur visible (pour une durée temporaire de 3 minutes) et appairable :

[bluetooth]#discoverable on
[bluetooth]#pairable on

Analyser l'environnement pour trouver des appareils appairables :

[bluetooth]#scan on

Mettre l'appareil en mode d'appairage, ce qui en général nécessite d'appuyer sur un bouton ou une combinaison de boutons, d'habitude pour plusieurs secondes.

Découvrir l'adresse MAC de l'appareil :

[bluetooth]#devices

Appairer avec l'appareil :

[bluetooth]#pair mac_address_de_appareil

Entrer le PIN s'il est demandé :

[agent]PIN code: ####

Autoriser le service si cela est demandé :

[agent]Authorize service uuid_du_service (yes/no): yes

Considérer l'appareil comme un appareil de confiance :

[bluetooth]#trust address_mac_de_appareil

Connecter l'appareil :

[bluetooth]#connect device_mac_address

Afficher l'information sur l'appareil :

[bluetooth]#info adresse_mac_de_appareil

L'appareil est désormais appairé :

[bluetooth]#quit

Désactiver le Bluetooth

Pour désactiver Bluetooth pendant qu'il s'exécute, exécuter la commande suivante:

root #rfkill block bluetooth

Pour désactiver Bluetooth automatiquement à chaque démarrage, choisir entre les possibilités suivantes :

Utiliser udev pour déactiver Bluetooth

En cas d'utilisation de UDEV, il suffit d'installer la règle suivante, ce qui va désactiver Bluetooth :

FILE /etc/udev/rules.d/80-disable-bluetooth.rules
SUBSYSTEM=="rfkill", ATTR{type}=="bluetooth", ATTR{state}="0"

Utiliser OpenRc pour déactiver Bluetooth

En cas d'utilisation de sys-apps/openrc, il faut installer le script suivant pour les services locaux ; ne pas oublier de le rendre exécutable :

FILE /etc/local.d/disable-bluetooth.start
#!/bin/sh
rfkill block bluetooth
root #chmod o+x /etc/local.d/disable-bluetooth.start

Désactiver Bluetooth au niveau du noyau

Quand le noyau intègre Bluetooth comme fonctionnalité modulaire, il faut désactiver le chargement des modules Bluetooth :

FILE /etc/modprobe.d/blacklist-bluetooth.conf
blacklist bnep
blacklist bluetooth
blacklist btusb

En cas de problème

TLP et laptop_mode

Si laptop-mode-tools est installé ou TLP, s'assurer qu'ils ne désactivent pas Bluetooth pour économiser de l'énergie.

Voir aussi