Bluetooth (Français) - ArchWiki

Jump to content

# Bluetooth (Français)

From ArchWiki

Related articles

- Bluetooth mouse
- Bluetooth keyboard
- Bluetooth headset
- Blueman
- ObexFTP

Cet article ou section a besoin d'être traduit(e).

Notes: Cet article ne respecte pas la structure de sa version anglophone, merci de le réécrire en conséquence. Vous pouvez aussi ajouter à la version anglophone les informations à-jour et dignes d’intérêt qui ne seraient portées que par la version francophone. Voir ArchWiki:Translation Team (Français) (Discuss in Talk: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

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

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.

Note: La sortie peut être désactivée par défaut. Il faut alors sélectionner le statut de la sortie (OFF, A2DP, HFP) dans l'onglet "Configuration" de pavucontrol.

Vous pouvez alors envoyer le son des applications vers cette sortie à l'aide de pavucontrol.

Note: casque audio sennheiser EPOS BTD 800

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.

Note: ce logiciel est récent et a potentiellement quelques bugs. N’hésitez pas à les remonter

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

- activez `hidd.service`:

    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

## Voir Aussi

OpenObex (en)
Bluez (en)

Category:

- Bluetooth (Français)

Hidden categories:

- Pages or sections flagged with Template:Translateme (Français)
- Pages with broken package links
- Pages with dead links