Cela fait quelques années que je n'ai pas examiné la technologie Bluetooth sur le Raspberry Pi. À l'époque, le système d'exploitation était Raspbian qui correspondait à Debian 9 (Stretch
) et au noyau Linux 4.9.59 alors que maintenant le système d'exploitation, renommé Raspberry Pi OS, correspond à Debian 10 (Buster
avec un noyau 5.10.63). Que signifient ces changements pour la technologie sans fil ? En fait, très peu. Comme auparavant, quelques ajustements doivent encore être faits pour utiliser Bluetooth pour la lecture audio en continu dans la version Lite
du système d'exploitation. Je suppose que cela n'est pas nécessaire dans la version desktop
du système d'exploitation. Comme auparavant, le profil SAP est toujours chargé comme si le Pi avait une carte SIM intégrée, mais c'est toujours aussi facilement corrigé. Malheureusement, je n'ai pas pu trouver de solution de contournement fiable pour l' erreur Failed to set privacy: Rejected (0x0b), mais il ne semble pas y avoir de conséquences négatives.
Avec si peu de changements, pourquoi écrire un nouveau billet ? Pour la version française, la justification est assez facile puisque je n'avais pas encore traduit Bluetooth, BlueALSA and Buster et tant qu'à le faire, aussi bien mettre à jour l'article. Et puis, j'ai rajouté une exploration plus approfondie de l'utilisation d'un clavier Bluetooth avec un Pi sans tête. Je sais que c'est une contradiction évidente, mais cela doit être considéré comme une exploration de la technologie sans fil. Beaucoup plus idoine, j'ai également ajouté des sections sur la désactivation et la suppression de Bluetooth. J'ai également montré comment inverser les deux, car rien n'est permanent.
Table des matières
- Raspberry Pi OS Lite
- Adhésion au groupe
bluetooth
- Clavier Bluetooth
- Première connexion
- Connexions ultérieures
- Déconnexions rapides
- Diffusion d'une source audio en continu vers des appareils Bluetooth
- Tester ALSA
- Installer
bluealsa
- Diffusion audio en continu vers un haut-parleur Bluetooth
- Lecture audio en continu depuis un appareil Bluetooth - un téléphone Android
- Modifications au fichier d'unité
bluetooth.service
- Scripts Bluetooth
- Désactiver Bluetooth
- Supprimer Bluetooth
Tout d'abord, regardons l'état des choses lors du démarrage du Raspberry Pi après l'installation de Raspberry Pi OS Lite et sa mise à jour.
michel@hp:~$ ssh nostra@damus.local ouverture d'une session ssh
depuis l'ordinateur de bureau
...
nostra@damus:~ $ sudo apt update && sudo apt upgrade -y
...
nostra@damus:~ $ uname -a
Linux damus 5.10.63-v7+ #1459 SMP Wed Oct 6 16:41:10 BST 2021 armv7l GNU/Linux
Après une mise à niveau qui contient de nombreux changements, je préfère redémarrer (sudo reboot) puis ouvrir une nouvelle session. Le service bluetooth
devrait être activé sur tout Raspberry Pi équipé de la puce Wi-Fi/Bluetooth. Espérons qu'un adapataeur USB- Bluetooth puisse être utilisé avec des modèles plus anciens avec des résultats équivalents.
nostra@damus:~ $ sudo systemctl status blue*
● bluetooth.service - Bluetooth service
Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2021-10-25 21:13:46 ADT; 1h 39min ago
Docs: man:bluetoothd(8)
Main PID: 505 (bluetoothd)
Status: "Running"
Tasks: 1 (limit: 1935)
CGroup: /system.slice/bluetooth.service
└─505 /usr/lib/bluetooth/bluetoothd
Oct 25 21:13:46 damus systemd[1]: Starting Bluetooth service...
Oct 25 21:13:46 damus bluetoothd[505]: Bluetooth daemon 5.50
Oct 25 21:13:46 damus systemd[1]: Started Bluetooth service.
Oct 25 21:13:46 damus bluetoothd[505]: Starting SDP server
Oct 25 21:13:46 damus bluetoothd[505]: Bluetooth management interface 1.18 initialized
Oct 25 21:13:46 damus bluetoothd[505]: Sap driver initialization failed.
Oct 25 21:13:46 damus bluetoothd[505]: sap-server: Operation not permitted (1)
Oct 25 21:13:46 damus bluetoothd[505]: Failed to set privacy: Rejected (0x0b)
Oct 25 21:13:46 damus systemd[1]: Reached target Bluetooth.
Comme on peut le voir, c'est encore la version 5.50 de BlueZ, la « pile officielle du protocole Bluetooth sur Linux », qui est installée par défaut commen en 2019. Ce n'est en aucun cas la version la plus récente; mon ordinateur de bureau, un système Linux Mint 20.1, exécute la version 5.53 et la version 5.62 est sortie le 17 octobre 2021. On ne sera pas trop surpris que des problèmes rencontrés précédemment sont toujours présent. Avant d'examiner les détails, explorons un peu la pile BlueZ à l'aide de l'utilitaire bluetoothctl
.
nostra@damus:~ $ bluetoothctl
press Enter if the system hangs
[bluetooth]# scan on
No default controller available
Quelque chose ne va pas. Il s'avère qu'à ce stade, l'utilitaire doit être lancé par un utilisateur disposant de privilèges root
. Cela sera changé plus tard.
[bluetooth]# quit
nostra@damus:~ $ sudo bluetoothctl
Agent registered
[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:00:00:01 Discovering: yes
[NEW] Device B8:78:2E:00:00:01 B8-78-2E-00-00-01 un appareil Apple
[NEW] Device 04:92:26:00:00:01 ASUS_X00PD au téléphone Asus
...
[bluetooth]# info 04:92:26:00:00:01
Device 04:92:26:00:00:01 (public)
Name: ASUS_X00PD
Alias: ASUS_X00PD
Class: 0x005a020c
Icon: phone
Paired: no
Trusted: no
Blocked: no
Connected: no
...
[bluetooth]# info B8:78:2E:00:00:01
Device B8:78:2E:00:00:01 (public)
Alias: B8-78-2E-00-00-01
Paired: no
Trusted: no
Blocked: no
Connected: no
...
[bluetooth]# discoverable on
Changing discoverable on succeeded
[CHG] Controller B8:27:EB:00:00:01 Discoverable: yes
[bluetooth]# connect 04:92:26:00:00:01
Attempting to connect to 04:92:26:00:00:01
[CHG] Device 04:92:26:00:00:01 Connected: yes
...
[CHG] Device 04:92:26:00:00:01 ServicesResolved: yes
Failed to connect: org.bluez.Error.Failed
[bluetooth]# quit
Après que le Raspberry Pi fut déclaré découvrable (discoverable), il est apparu sur un téléphone Android en tant que périphérique Bluetooth à proximité nommé damus
qui est le nom d'hôte du Pi. Mais comme on peut le voir, le Pi n'a pas pu se connecter au téléphone, et la connexion n'a pas pu être établie dans la direction opposée. Cela ne veut pas dire que la pile BlueZ ne fonctionne pas, c'est qu'il manque des éléments nécessaires à l'établissement de la connexion audio habituelle entre un téléphone et des dispositifs. En revanche, on peut connecter un clavier Bluetooth au Pi, mais résolvons d'abord le problème des privilèges de l'utilisateur.
Étant donné que bluetoothctl
est utilisé pour appairer des appareils, une opération manuelle effectuée par l'utilisateur, il est logique qu'on puisse lancer l'utilitaire sans qu'il soit nécessaire que l'utilisateur obtienne explicitement les privilèges d'administrateur du système avec la commande sudo
. Cela est facilement réalisé en ajoutant l'utilisateur au groupe bluetooth
vérifiant avant que nostra
n'est pas déjà membre du groupe.
nostra@damus:~ $ groups
nostra adm dialout cdrom sudo audio video plugdev games users input netdev gpio i2c spi
nostra@damus:~ $ cat /etc/group | grep bluetooth
bluetooth:x:112: the group exists but nostra is not a member
nostra@damus:~ $ sudo adduser nostra bluetooth
Adding user `nostra' to group `bluetooth' ...
Adding user nostra to group bluetooth
Done.
Habituellement, il suffit de fermer la session et d'en ouvrir une autre pour que l'adhésion au nouveau groupe soit finalisée, mais pour une raison inconnue cela n'a pas fonctionné et j'ai dû redémarrer le système. Après il a été possible de lancer l'utilitaire bluetoothctl
et rechercher les appareil actifs.
nostra@damus:~ $ bluetoothctl
Agent registered
[bluetooth]# scan on
Discovery started
...
[NEW] Device 30:21:5C:00:00:01 AUDIOPOD2
[bluetooth]# connect 30:21:5C:00:00:01
Attempting to connect to 30:21:5C:00:00:01
[CHG] Device 30:21:5C:00:00:01 Connected: yes
[CHG] Device 30:21:5C:00:00:01 UUIDs: 00001108-0000-1000-8000-00805f9b34fb
[CHG] Device 30:21:5C:00:00:01 UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[CHG] Device 30:21:5C:00:00:01 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device 30:21:5C:00:00:01 UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Device 30:21:5C:00:00:01 UUIDs: 0000111e-0000-1000-8000-00805f9b34fb
[CHG] Device 30:21:5C:00:00:01 ServicesResolved: yes
Failed to connect: org.bluez.Error.Failed
[CHG] Device 30:21:5C:00:00:01 ServicesResolved: no
[CHG] Device 30:21:5C:00:00:01 Connected: no
Alors que les haut-parleurs Bluetooth ont été retrouvés, il était à nouveau impossible de s'y connecter, pour la même raison qu'il était impossible de se connecter au téléphone. Comme expliqué plus tard, il manque un pont entre le service bluetooth
et le système audio Linux. Néanmoins, BlueZ fonctionne correctement comme indiqué ci-dessous.
La pile BlueZ a été testée avec un clavier Bluetooth modèle WBK-1000BA d'Adesso, emprunté à ma conjointe qui l'utilise avec un ancien modèle d'IPad.
Deux sessions SSH avec le Pi seront utilisées dans ce test. Elles sont distinguées par les couleurs de fond différentes. Prouvons d'abord qu'il n'y a pas de périphérique d'entrée, à l'exception de mice
qui n'est, je suppose, qu'un dispositif virtuel réservé pour une souris puisqu'aucune n'est connectée.
nostra@damus:~ $ ls /dev/input
mice
Connectons-nous au clavier qui utilise un code NIP pour authentifier la connexion. Notez que le code change à chaque tentative de connexion. La procédure ressemble à un petit ballet. Voici l'essentiel de la procédure pour établir une connexion avec l'utilitaire bluetoothctl
.
- Lancez la recherche d'appareils Bluetooth.
- Appuyez sur le bouton de connexion du clavier Bluetooth. Le bouton est étiqueté <<o>> sur le clavier Adesso, mais pourrait avoir un libellé différent sur d'autres produits.
- Dès que le clavier est repéré par
bluetoothctl
, associez-le.
- Saisissez le code NIP affiché par
blueetoothctl
sur le clavier Bluetooth et terminez en appuyant sur la touche Entrée.
- Avec
blueetoothctl
, faites confiance au clavier une fois qu'il est jumelé.
- Toujours dans
bluetoothctl
, connectez-vous au clavier.
L'ordre d'exécution des deux dernières étapes n'est probablement pas important.
[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:00:00:01 Discovering: yes
[CHG] Device B8:78:2E:00:00:01 RSSI: -87
[CHG] Device B8:78:2E:00:00:01 ManufacturerData Key: 0x004c
[CHG] Device B8:78:2E:00:00:01 ManufacturerData Value:
09 06 03 23 c0 a8 00 a6 ...#....
Appuyez sur le bouton de connexion <<o>> sur le clavier Bluetooth
[NEW] Device DC:2C:26:21:7B:F6 Adesso Bluetooth 3.0 Keyboard
[CHG] Device 30:21:5C:00:00:01 RSSI: -54
[bluetooth]# pair DC:2C:26:21:7B:F6
Attempting to pair with DC:2C:26:21:7B:F6
[CHG] Device DC:2C:26:21:7B:F6 Connected: yes
[agent] PIN code: 361939
Saisissez 361939 Entrée sur le clavier Bluetooth
[CHG] Device DC:2C:26:21:7B:F6 Modalias: usb:v0A5Cp8502d011B
[CHG] Device DC:2C:26:21:7B:F6 UUIDs: 00001000-0000-1000-8000-00805f9b34fb
[CHG] Device DC:2C:26:21:7B:F6 UUIDs: 00001124-0000-1000-8000-00805f9b34fb
[CHG] Device DC:2C:26:21:7B:F6 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Device DC:2C:26:21:7B:F6 ServicesResolved: yes
[CHG] Device DC:2C:26:21:7B:F6 Paired: yes
Pairing successful
[CHG] Device DC:2C:26:21:7B:F6 ServicesResolved: no
[CHG] Device DC:2C:26:21:7B:F6 Connected: no
[CHG] Device DC:2C:26:21:7B:F6 RSSI: -72
Faites confiance au dispositif
[bluetooth]# trust DC:2C:26:21:7B:F6
[CHG] Device DC:2C:26:21:7B:F6 Trusted: yes
Changing DC:2C:26:21:7B:F6 trust succeeded
Enfin, établissez la connexion avec le clavier
[bluetooth]# connect DC:2C:26:21:7B:F6
Attempting to connect to DC:2C:26:21:7B:F6
[CHG] Device DC:2C:26:21:7B:F6 Connected: yes
Connection successful
[CHG] Device DC:2C:26:21:7B:F6 ServicesResolved: yes
[Adesso Bluetooth 3.0 Keyboard]#
Le clavier est connecté et peut être utilisé.
Le clavier Bluetooth ayant été ajouté à la liste des appareils approuvés, la prochaine fois qu'il devra être connecté, la tâche est beaucoup plus simple, car il ne sera pas nécessaire de saisir un code NIP. Ainsi, la reconnexion à un clavier approuvé est généralement une procédure en deux étapes, trois si vous oubliez la première, comme indiqué ci-dessous.
bluetooth]# connect DC:2C:26:21:7B:F6
Attempting to connect to DC:2C:26:21:7B:F6
Failed to connect: org.bluez.Error.Failed
Le clavier est-il en marche et le bouton de connexion Bluetooth <<o>> du clavier a-t-il été appuyé ?
[bluetooth]# connect DC:2C:26:21:7B:F6
Attempting to connect to DC:2C:26:21:7B:F6
[CHG] Device DC:2C:26:21:7B:F6 Connected: yes
Connection successful
[CHG] Device DC:2C:26:21:7B:F6 ServicesResolved: yes
La discussion sur l'utilisation d'un clavier Bluetooth dans le billet précédent se terminait ici avec la connexion de l'appareil. Maintenant, je peux aller un peu plus loin et tester si le clavier fonctionne en mettant à profit des connaissances acquises lors de l'ajout d'un récepteur IR à un Pi. Un clavier apparaît comme un périphérique input
dans le répertoire /dev
.
nostra@damus:~ $ ls /dev/input
event0 event1 event2 mice
On peut transmettre la sortie du périphérique event0
vers l'utilitaire de conversion hexadécimale xxd
qui affichera les messages provenant du clavier.
nostra@damus:~ $ cat /dev/input/event0 | xxd
la touche 1 du clavier est activée
00000000: e2ad 7961 556b 0600 0400 0400 1e00 0700 ..yaUk..........
00000010: e2ad 7961 556b 0600 0100 0200 0100 0000 ..yaUk..........
00000020: e2ad 7961 556b 0600 0000 0000 0000 0000 ..yaUk..........
00000030: e2ad 7961 0c1b 0700 0400 0400 1e00 0700 ..ya............
00000040: e2ad 7961 0c1b 0700 0100 0200 0000 0000 ..ya............
00000050: e2ad 7961 0c1b 0700 0000 0000 0000 0000 ..ya............
la touche 0 du clavier est activée
00000060: e5ad 7961 afe6 0300 0400 0400 2700 0700 ..ya........'...
00000070: e5ad 7961 afe6 0300 0100 0b00 0100 0000 ..ya............
00000080: e5ad 7961 afe6 0300 0000 0000 0000 0000 ..ya............
00000090: e5ad 7961 5f96 0400 0400 0400 2700 0700 ..ya_.......'...
000000a0: e5ad 7961 5f96 0400 0100 0b00 0000 0000 ..ya_...........
000000b0: e5ad 7961 5f96 0400 0000 0000 0000 0000 ..ya_...........
La plupart des octets affichés seront différents lors des essais suivants, car les horodatages constituent une grande partie de ces messages. Sachez que le clavier se déconnectera après environ une minute d'inactivité, pour économiser la batterie du clavier et alors on verra un message d'erreur!
cat: /dev/input/event0: No such device
L'utilitaire bluetoothctl
indiquera aussi que la connexion est rompue.
[CHG] Device DC:2C:26:21:7B:F6 Connected: no
[CHG] Device DC:2C:26:21:7B:F6 ServicesResolved: no
Il suffit d'appuyer sur une touche du clavier Bluetooth pour rétablir la connexion. Il n'est pas facile de suivre les événements, car /dev/input/event0
ne sera pas disponible tant que la connexion ne sera pas rétablie. Mais une fois que c'est le cas, alors cat /dev/input/event0 | xxd peut être utilisé pour suivre les frappes. Cependant, la première frappe qui a rétabli la connexion sera perdue. Voici ce que l'utilitaire de contrôle affiche lorsque le clavier se met en veille à plusieurs reprises, puis se réveille et se reconnecte lorsqu'une touche est enfoncée.
[CHG] Device DC:2C:26:21:7B:F6 Connected: yes
[CHG] Device DC:2C:26:21:7B:F6 Connected: no
[CHG] Device DC:2C:26:21:7B:F6 Connected: yes
...
Il est déconcertant de constater que ces connexions sont à l'origine d'erreurs apparentes.
nostra@damus:~ $ journalctl -u bluetooth
...
Oct 28 19:24:36 damus bluetoothd[484]: No agent available for request type 0
Oct 28 19:24:36 damus bluetoothd[484]: device_request_pin: Operation not permitted
Oct 28 19:31:54 damus bluetoothd[484]: No agent available for request type 0
Oct 28 19:31:54 damus bluetoothd[484]: device_request_pin: Operation not permitted
...
Les mêmes messages d'erreur s'affichent dans l'état du service BlueZ.
nostra@damus:~ $ systemctl status bluetooth
● bluetooth.service - Bluetooth service
Loaded: loaded (/lib/systemd/system/bluetooth.service; disabled; vendor preset: enabled)
Active: active (running) since Thu 2021-10-28 19:14:04 ADT; 32min ago
Docs: man:bluetoothd(8)
Main PID: 484 (bluetoothd)
Status: "Running"
Tasks: 1 (limit: 1935)
CGroup: /system.slice/bluetooth.service
└─484 /usr/lib/bluetooth/bluetoothd --noplugin=sap
Oct 28 19:17:08 damus bluetoothd[484]: No agent available for request type 0
Oct 28 19:17:08 damus bluetoothd[484]: device_request_pin: Operation not permitted
...
Oct 28 19:24:36 damus bluetoothd[484]: No agent available for request type 0
Oct 28 19:24:36 damus bluetoothd[484]: device_request_pin: Operation not permitted
Oct 28 19:31:54 damus bluetoothd[484]: No agent available for request type 0
Oct 28 19:31:54 damus bluetoothd[484]: device_request_pin: Operation not permitted
Il se passe en fait beaucoup plus de choses.
nostra@damus:~ $ journalctl | grep -i blue
...
Oct 28 19:24:36 damus kernel: input: Adesso Bluetooth 3.0 Keyboard as /devices/platform/soc/3f201000.serial/tty/ttyAMA0/hci0/hci0:12/0005:0A5C:8502.0004/input/input9
Oct 28 19:24:36 damus kernel: input: Adesso Bluetooth 3.0 Keyboard Consumer Control as /devices/platform/soc/3f201000.serial/tty/ttyAMA0/hci0/hci0:12/0005:0A5C:8502.0004/input/input10
Oct 28 19:24:36 damus kernel: input: Adesso Bluetooth 3.0 Keyboard System Control as /devices/platform/soc/3f201000.serial/tty/ttyAMA0/hci0/hci0:12/0005:0A5C:8502.0004/input/input11
Oct 28 19:24:36 damus kernel: hid-generic 0005:0A5C:8502.0004: input,hidraw0: BLUETOOTH HID v1.1b Keyboard [Adesso Bluetooth 3.0 Keyboard] on B8:27:EB:00:00:01
Oct 28 19:24:36 damus bluetoothd[484]: No agent available for request type 0
Oct 28 19:24:36 damus bluetoothd[484]: device_request_pin: Operation not permitted
Oct 28 19:24:36 damus systemd-logind[358]: Watching system buttons on /dev/input/event2 (Adesso Bluetooth 3.0 Keyboard System Control)
Oct 28 19:24:36 damus systemd-logind[358]: Watching system buttons on /dev/input/event0 (Adesso Bluetooth 3.0 Keyboard)
Oct 28 19:24:36 damus systemd-logind[358]: Watching system buttons on /dev/input/event1 (Adesso Bluetooth 3.0 Keyboard Consumer Control)
Oct 28 19:31:54 damus kernel: input: Adesso Bluetooth 3.0 Keyboard as /devices/platform/soc/3f201000.serial/tty/ttyAMA0/hci0/hci0:11/0005:0A5C:8502.0005/input/input12
Oct 28 19:31:54 damus kernel: input: Adesso Bluetooth 3.0 Keyboard Consumer Control as /devices/platform/soc/3f201000.serial/tty/ttyAMA0/hci0/hci0:11/0005:0A5C:8502.0005/input/input13
Oct 28 19:31:54 damus kernel: input: Adesso Bluetooth 3.0 Keyboard System Control as /devices/platform/soc/3f201000.serial/tty/ttyAMA0/hci0/hci0:11/0005:0A5C:8502.0005/input/input14
Oct 28 19:31:54 damus kernel: hid-generic 0005:0A5C:8502.0005: input,hidraw0: BLUETOOTH HID v1.1b Keyboard [Adesso Bluetooth 3.0 Keyboard] on B8:27:EB:00:00:01
Oct 28 19:31:54 damus bluetoothd[484]: No agent available for request type 0
Oct 28 19:31:54 damus bluetoothd[484]: device_request_pin: Operation not permitted
Oct 28 19:31:54 damus systemd-logind[358]: Watching system buttons on /dev/input/event1 (Adesso Bluetooth 3.0 Keyboard Consumer Control)
Oct 28 19:31:54 damus systemd-logind[358]: Watching system buttons on /dev/input/event2 (Adesso Bluetooth 3.0 Keyboard System Control)
Oct 28 19:31:54 damus systemd-logind[358]: Watching system buttons on /dev/input/event0 (Adesso Bluetooth 3.0 Keyboard)
Je ne prétendrai pas que je comprends tout cela, sauf peut-être pour ce qui est de Watching system button on /dev/input/event0
puisque c'est le périphérique surveillé. Si vous voulez vraiment être submergé d'informations, utilisez l'utilitaire btmon
.
nostra@damus:~ $ sudo btmon 2>&1
...
0 pressed on the keyboard
> ACL Data RX: Handle 11 flags 0x02 dlen 14 #73 [hci0] 73.137203
Channel: 65 len 10 [PSM 19 mode 0] {chan 1}
a1 01 00 00 27 00 00 00 00 00 ....'.....
> ACL Data RX: Handle 11 flags 0x02 dlen 14 #74 [hci0] 73.204702
Channel: 65 len 10 [PSM 19 mode 0] {chan 1}
a1 01 00 00 00 00 00 00 00 00 ..........
1 pressed on the keyboard
> ACL Data RX: Handle 11 flags 0x02 dlen 14 #75 [hci0] 84.477197
Channel: 65 len 10 [PSM 19 mode 0] {chan 1}
a1 01 00 00 1e 00 00 00 00 00 ..........
> ACL Data RX: Handle 11 flags 0x02 dlen 14 #76 [hci0] 84.544696
Channel: 65 len 10 [PSM 19 mode 0] {chan 1}
a1 01 00 00 00 00 00 00 00 00 ..........
keyboard disconnecting
> ACL Data RX: Handle 11 flags 0x02 dlen 12 #77 [hci0] 206.224541
L2CAP: Disconnection Request (0x06) ident 6 len 4
Destination CID: 65
Source CID: 68
< ACL Data TX: Handle 11 flags 0x00 dlen 12 #78 [hci0] 206.224692
L2CAP: Disconnection Response (0x07) ident 6 len 4
Destination CID: 65
Source CID: 68
< HCI Command: Exit Sniff Mode (0x02|0x0004) plen 2 #79 [hci0] 206.224729
Handle: 11
> HCI Event: Command Status (0x0f) plen 4 #80 [hci0] 206.227494
Exit Sniff Mode (0x02|0x0004) ncmd 1
Status: Success (0x00)
> HCI Event: Mode Change (0x14) plen 6 #81 [hci0] 206.273366
Status: Success (0x00)
Handle: 11
Mode: Active (0x00)
Interval: 0.000 msec (0x0000)
> ACL Data RX: Handle 11 flags 0x02 dlen 12 #82 [hci0] 206.299640
L2CAP: Disconnection Request (0x06) ident 7 len 4
Destination CID: 64
Source CID: 64
> HCI Event: Number of Completed Packets (0x13) plen 5 #83 [hci0] 206.537577
Num handles: 1
Handle: 11
Count: 1
< ACL Data TX: Handle 11 flags 0x00 dlen 12 #84 [hci0] 206.838335
L2CAP: Disconnection Response (0x07) ident 7 len 4
Destination CID: 64
Source CID: 64
> HCI Event: Number of Completed Packets (0x13) plen 5 #85 [hci0] 207.004426
Num handles: 1
Handle: 11
Count: 1
> HCI Event: Disconnect Complete (0x05) plen 4 #86 [hci0] 207.004640
Status: Success (0x00)
Handle: 11
Reason: Remote User Terminated Connection (0x13)
@ MGMT Event: Device Disconnected (0x000c) plen 8 {0x0002} [hci0] 207.004672
BR/EDR Address: DC:2C:26:21:7B:F6 (Iton Technology Limited)
Reason: Connection terminated due to authentication failure (0x04)
@ MGMT Event: Device Disconnected (0x000c) plen 8 {0x0001} [hci0] 207.004672
BR/EDR Address: DC:2C:26:21:7B:F6 (Iton Technology Limited)
Reason: Connection terminated due to authentication failure (0x04)
2 pressed on the keyboard
> HCI Event: Connect Request (0x04) plen 10 #87 [hci0] 406.250489
Address: DC:2C:26:21:7B:F6 (Iton Technology Limited)
Class: 0x000540
Major class: Peripheral (mouse, joystick, keyboards)
Minor class: 0x10
Link type: ACL (0x01)
< HCI Command: Accept Connection Request (0x01|0x0009) plen 7 #88 [hci0] 406.250569
Address: DC:2C:26:21:7B:F6 (Iton Technology Limited)
Role: Master (0x00)
> HCI Event: Command Status (0x0f) plen 4 #89 [hci0] 406.251668
Accept Connection Request (0x01|0x0009) ncmd 1
Status: Success (0x00)
> HCI Event: Role Change (0x12) plen 8 #90 [hci0] 406.410640
Status: Success (0x00)
Address: DC:2C:26:21:7B:F6 (Iton Technology Limited)
Role: Master (0x00)
> HCI Event: Connect Complete (0x03) plen 11 #91 [hci0] 406.436758
Status: Success (0x00)
Handle: 12
Address: DC:2C:26:21:7B:F6 (Iton Technology Limited)
Link type: ACL (0x01)
Encryption: Disabled (0x00)
< HCI Command: Read Remote Supported Features (0x01|0x001b) plen 2 #92 [hci0] 406.436948
Handle: 12
> HCI Event: Command Status (0x0f) plen 4 #93 [hci0] 406.437941
Read Remote Supported Features (0x01|0x001b) ncmd 1
Status: Success (0x00)
> HCI Event: Read Remote Supported Features (0x0b) plen 11 #94 [hci0] 406.437954
Status: Success (0x00)
Handle: 12
Features: 0xbf 0x06 0x86 0x78 0x18 0x1e 0x59 0x87
3 slot packets
5 slot packets
Encryption
Slot offset
Timing accuracy
Role switch
Sniff mode
Power control requests
Channel quality driven data rate (CQDDR)
Paging parameter negotiation
Power control
Broadcast Encryption
Enhanced inquiry scan
Interlaced inquiry scan
Interlaced page scan
RSSI with inquiry results
AFH capable slave
AFH classification slave
Sniff subrating
Pause encryption
AFH capable master
AFH classification master
Extended Inquiry Response
Secure Simple Pairing
Encapsulated PDU
Non-flushable Packet Boundary Flag
Link Supervision Timeout Changed Event
Inquiry TX Power Level
Enhanced Power Control
Extended features
< HCI Command: Read Remote Extended Features (0x01|0x001c) plen 3 #95 [hci0] 406.438014
Handle: 12
Page: 1
> HCI Event: Command Status (0x0f) plen 4 #96 [hci0] 406.438418
Read Remote Extended Features (0x01|0x001c) ncmd 1
Status: Success (0x00)
> HCI Event: Read Remote Extended Features (0x23) plen 13 #97 [hci0] 406.438585
Status: Success (0x00)
Handle: 12
Page: 1/0
Features: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
< HCI Command: Remote Name Request (0x01|0x0019) plen 10 #98 [hci0] 406.438664
Address: DC:2C:26:21:7B:F6 (Iton Technology Limited)
Page scan repetition mode: R2 (0x02)
Page scan mode: Mandatory (0x00)
Clock offset: 0x0000
< ACL Data TX: Handle 12 flags 0x00 dlen 10 #99 [hci0] 406.438689
L2CAP: Information Request (0x0a) ident 1 len 2
Type: Extended features supported (0x0002)
> HCI Event: Max Slots Change (0x1b) plen 3 #100 [hci0] 406.439485
Handle: 12
Max slots: 5
> HCI Event: Command Status (0x0f) plen 4 #101 [hci0] 406.439628
Remote Name Request (0x01|0x0019) ncmd 1
Status: Success (0x00)
> ACL Data RX: Handle 12 flags 0x02 dlen 16 #102 [hci0] 406.444548
L2CAP: Information Response (0x0b) ident 1 len 8
Type: Extended features supported (0x0002)
Result: Success (0x0000)
Features: 0x00000280
Fixed Channels
Unicast Connectionless Data Reception
< ACL Data TX: Handle 12 flags 0x00 dlen 10 #103 [hci0] 406.444612
L2CAP: Information Request (0x0a) ident 2 len 2
Type: Fixed channels supported (0x0003)
> HCI Event: Number of Completed Packets (0x13) plen 5 #104 [hci0] 406.450859
Num handles: 1
Handle: 12
Count: 2
> ACL Data RX: Handle 12 flags 0x02 dlen 12 #105 [hci0] 406.452003
L2CAP: Connection Request (0x02) ident 2 len 4
PSM: 17 (0x0011)
Source CID: 67
@ MGMT Event: Device Connected (0x000b) plen 18 {0x0002} [hci0] 406.452033
BR/EDR Address: DC:2C:26:21:7B:F6 (Iton Technology Limited)
Flags: 0x00000000
Data length: 5
Class: 0x000540
Major class: Peripheral (mouse, joystick, keyboards)
Minor class: 0x10
@ MGMT Event: Device Connected (0x000b) plen 18 {0x0001} [hci0] 406.452033
BR/EDR Address: DC:2C:26:21:7B:F6 (Iton Technology Limited)
Flags: 0x00000000
Data length: 5
Class: 0x000540
Major class: Peripheral (mouse, joystick, keyboards)
Minor class: 0x10
< ACL Data TX: Handle 12 flags 0x00 dlen 16 #106 [hci0] 406.452120
L2CAP: Connection Response (0x03) ident 2 len 8
Destination CID: 64
Source CID: 67
Result: Connection pending (0x0001)
Status: No further information available (0x0000)
< ACL Data TX: Handle 12 flags 0x00 dlen 10 #107 [hci0] 406.452134
L2CAP: Information Request (0x0a) ident 3 len 2
Type: Extended features supported (0x0002)
> ACL Data RX: Handle 12 flags 0x02 dlen 20 #108 [hci0] 406.454590
L2CAP: Information Response (0x0b) ident 2 len 12
Type: Fixed channels supported (0x0003)
Result: Success (0x0000)
Channels: 0x0000000000000006
L2CAP Signaling (BR/EDR)
Connectionless reception
> HCI Event: Remote Name Req Complete (0x07) plen 255 #109 [hci0] 406.459745
Status: Success (0x00)
Address: DC:2C:26:21:7B:F6 (Iton Technology Limited)
Name: Adesso Bluetooth 3.0 Keyboard
> ACL Data RX: Handle 12 flags 0x02 dlen 16 #110 [hci0] 406.459918
L2CAP: Information Response (0x0b) ident 3 len 8
Type: Extended features supported (0x0002)
Result: Success (0x0000)
Features: 0x00000280
Fixed Channels
Unicast Connectionless Data Reception
< ACL Data TX: Handle 12 flags 0x00 dlen 10 #111 [hci0] 406.459977
L2CAP: Information Request (0x0a) ident 4 len 2
Type: Fixed channels supported (0x0003)
> HCI Event: Number of Completed Packets (0x13) plen 5 #112 [hci0] 406.460036
Num handles: 1
Handle: 12
Count: 2
> ACL Data RX: Handle 12 flags 0x02 dlen 20 #113 [hci0] 406.488361
L2CAP: Information Response (0x0b) ident 4 len 12
Type: Fixed channels supported (0x0003)
Result: Success (0x0000)
Channels: 0x0000000000000006
L2CAP Signaling (BR/EDR)
Connectionless reception
< ACL Data TX: Handle 12 flags 0x00 dlen 16 #114 [hci0] 406.488440
L2CAP: Connection Response (0x03) ident 2 len 8
Destination CID: 64
Source CID: 67
Result: Connection successful (0x0000)
Status: No further information available (0x0000)
< ACL Data TX: Handle 12 flags 0x00 dlen 12 #115 [hci0] 406.488454
L2CAP: Configure Request (0x04) ident 5 len 4
Destination CID: 67
Flags: 0x0000
> HCI Event: Number of Completed Packets (0x13) plen 5 #116 [hci0] 406.491970
Num handles: 1
Handle: 12
Count: 2
> ACL Data RX: Handle 12 flags 0x02 dlen 16 #117 [hci0] 406.493340
L2CAP: Configure Request (0x04) ident 3 len 8
Destination CID: 64
Flags: 0x0000
Option: Maximum Transmission Unit (0x01) [mandatory]
MTU: 48
< ACL Data TX: Handle 12 flags 0x00 dlen 18 #118 [hci0] 406.493392
L2CAP: Configure Response (0x05) ident 3 len 10
Source CID: 67
Flags: 0x0000
Result: Success (0x0000)
Option: Maximum Transmission Unit (0x01) [mandatory]
MTU: 48
> ACL Data RX: Handle 12 flags 0x02 dlen 14 #119 [hci0] 406.494527
L2CAP: Configure Response (0x05) ident 5 len 6
Source CID: 64
Flags: 0x0000
Result: Success (0x0000)
> HCI Event: Number of Completed Packets (0x13) plen 5 #120 [hci0] 406.496987
Num handles: 1
Handle: 12
Count: 2
> ACL Data RX: Handle 12 flags 0x02 dlen 12 #121 [hci0] 406.498272
L2CAP: Connection Request (0x02) ident 4 len 4
PSM: 19 (0x0013)
Source CID: 66
< ACL Data TX: Handle 12 flags 0x00 dlen 16 #122 [hci0] 406.498352
L2CAP: Connection Response (0x03) ident 4 len 8
Destination CID: 65
Source CID: 66
Result: Connection pending (0x0001)
Status: Authorization pending (0x0002)
< ACL Data TX: Handle 12 flags 0x00 dlen 16 #123 [hci0] 406.498560
L2CAP: Connection Response (0x03) ident 4 len 8
Destination CID: 65
Source CID: 66
Result: Connection successful (0x0000)
Status: No further information available (0x0000)
< ACL Data TX: Handle 12 flags 0x00 dlen 12 #124 [hci0] 406.498575
L2CAP: Configure Request (0x04) ident 6 len 4
Destination CID: 66
Flags: 0x0000
> HCI Event: Number of Completed Packets (0x13) plen 5 #125 [hci0] 406.503236
Num handles: 1
Handle: 12
Count: 2
> ACL Data RX: Handle 12 flags 0x02 dlen 16 #126 [hci0] 406.504572
L2CAP: Configure Request (0x04) ident 5 len 8
Destination CID: 65
Flags: 0x0000
Option: Maximum Transmission Unit (0x01) [mandatory]
MTU: 48
< ACL Data TX: Handle 12 flags 0x00 dlen 18 #127 [hci0] 406.504617
L2CAP: Configure Response (0x05) ident 5 len 10
Source CID: 66
Flags: 0x0000
Result: Success (0x0000)
Option: Maximum Transmission Unit (0x01) [mandatory]
MTU: 48
> ACL Data RX: Handle 12 flags 0x02 dlen 14 #128 [hci0] 406.505815
L2CAP: Configure Response (0x05) ident 6 len 6
Source CID: 65
Flags: 0x0000
Result: Success (0x0000)
> HCI Event: Number of Completed Packets (0x13) plen 5 #129 [hci0] 406.508262
Num handles: 1
Handle: 12
Count: 2
< HCI Command: Authentication Requested (0x01|0x0011) plen 2 #130 [hci0] 406.510809
Handle: 12
> HCI Event: Command Status (0x0f) plen 4 #131 [hci0] 406.511335
Authentication Requested (0x01|0x0011) ncmd 1
Status: Success (0x00)
> HCI Event: Link Key Request (0x17) plen 6 #132 [hci0] 406.511548
Address: DC:2C:26:21:7B:F6 (Iton Technology Limited)
< HCI Command: Link Key Request Reply (0x01|0x000b) plen 22 #133 [hci0] 406.511589
Address: DC:2C:26:21:7B:F6 (Iton Technology Limited)
Link key: f506601ff32d5a93f99933bd146182fe
> HCI Event: Command Complete (0x0e) plen 10 #134 [hci0] 406.513314
Link Key Request Reply (0x01|0x000b) ncmd 1
Status: Success (0x00)
Address: DC:2C:26:21:7B:F6 (Iton Technology Limited)
< ACL Data TX: Handle 12 flags 0x00 dlen 6 #135 [hci0] 406.515291
Channel: 67 len 2 [PSM 17 mode 0] {chan 0}
41 03 A.
> ACL Data RX: Handle 12 flags 0x02 dlen 13 #136 [hci0] 406.515488
Channel: 65 len 9 [PSM 19 mode 0] {chan 1}
a1 03 b5 dc 2c 26 21 7b f6 ....,&!{.
> ACL Data RX: Handle 12 flags 0x02 dlen 14 #137 [hci0] 406.515796
Channel: 65 len 10 [PSM 19 mode 0] {chan 1}
a1 01 00 00 1f 00 00 00 00 00 ..........
> ACL Data RX: Handle 12 flags 0x02 dlen 14 #138 [hci0] 406.517883
Channel: 65 len 10 [PSM 19 mode 0] {chan 1}
a1 01 00 00 00 00 00 00 00 00 ..........
> HCI Event: PIN Code Request (0x16) plen 6 #139 [hci0] 406.542052
Address: DC:2C:26:21:7B:F6 (Iton Technology Limited)
@ MGMT Event: PIN Code Request (0x000e) plen 8 {0x0002} [hci0] 406.542112
BR/EDR Address: DC:2C:26:21:7B:F6 (Iton Technology Limited)
Secure PIN: 0x00
@ MGMT Event: PIN Code Request (0x000e) plen 8 {0x0001} [hci0] 406.542112
BR/EDR Address: DC:2C:26:21:7B:F6 (Iton Technology Limited)
Secure PIN: 0x00
= bluetoothd: No agent available for request type 0 406.544175
= bluetoothd: device_request_pin: Operation not permitted [hci0] 406.544229
@ MGMT Command: PIN Code Negative Reply (0x0017) plen 7 {0x0001} [hci0] 406.542661
BR/EDR Address: DC:2C:26:21:7B:F6 (Iton Technology Limited)
< HCI Command: PIN Code Request Negative Reply (0x01|0x000e) plen 6 #140 [hci0] 406.542798
Address: DC:2C:26:21:7B:F6 (Iton Technology Limited)
> HCI Event: Command Complete (0x0e) plen 10 #141 [hci0] 406.545078
PIN Code Request Negative Reply (0x01|0x000e) ncmd 1
Status: Success (0x00)
Address: DC:2C:26:21:7B:F6 (Iton Technology Limited)
@ MGMT Event: Command Complete (0x0001) plen 10 {0x0001} [hci0] 406.545121
PIN Code Negative Reply (0x0017) plen 7
Status: Success (0x00)
BR/EDR Address: DC:2C:26:21:7B:F6 (Iton Technology Limited)
> HCI Event: Auth Complete (0x06) plen 3 #142 [hci0] 406.545420
Status: PIN or Key Missing (0x06)
Handle: 12
@ MGMT Event: Authentication Failed (0x0011) plen 8 {0x0002} [hci0] 406.545452
BR/EDR Address: DC:2C:26:21:7B:F6 (Iton Technology Limited)
Status: Authentication Failed (0x05)
@ MGMT Event: Authentication Failed (0x0011) plen 8 {0x0001} [hci0] 406.545452
BR/EDR Address: DC:2C:26:21:7B:F6 (Iton Technology Limited)
Status: Authentication Failed (0x05)
> ACL Data RX: Handle 12 flags 0x02 dlen 14 #143 [hci0] 406.545764
Channel: 65 len 10 [PSM 19 mode 0] {chan 1}
a1 01 00 00 e1 00 00 00 00 00 ..........
> ACL Data RX: Handle 12 flags 0x02 dlen 14 #144 [hci0] 406.546969
Channel: 65 len 10 [PSM 19 mode 0] {chan 1}
a1 01 00 00 00 00 00 00 00 00 ..........
> ACL Data RX: Handle 12 flags 0x02 dlen 13 #145 [hci0] 406.548149
Channel: 64 len 9 [PSM 17 mode 0] {chan 0}
a1 03 b5 dc 2c 26 21 7b f6 ....,&!{.
> HCI Event: Mode Change (0x14) plen 6 #146 [hci0] 406.549392
Status: Success (0x00)
Handle: 12
Mode: Sniff (0x02)
Interval: 22.500 msec (0x0024)
> ACL Data RX: Handle 12 flags 0x02 dlen 14 #147 [hci0] 406.721994
Channel: 65 len 10 [PSM 19 mode 0] {chan 1}
a1 01 00 00 e1 00 00 00 00 00 ..........
> ACL Data RX: Handle 12 flags 0x02 dlen 14 #148 [hci0] 406.723243
Channel: 65 len 10 [PSM 19 mode 0] {chan 1}
a1 01 00 00 00 00 00 00 00 00 ..........
> HCI Event: Number of Completed Packets (0x13) plen 5 #149 [hci0] 406.786516
Num handles: 1
Handle: 12
Count: 1
> ACL Data RX: Handle 12 flags 0x02 dlen 14 #150 [hci0] 406.901995
Channel: 65 len 10 [PSM 19 mode 0] {chan 1}
a1 01 00 00 e1 00 00 00 00 00 ..........
> ACL Data RX: Handle 12 flags 0x02 dlen 14 #151 [hci0] 406.903245
Channel: 65 len 10 [PSM 19 mode 0] {chan 1}
a1 01 00 00 00 00 00 00 00 00 ..........
> ACL Data RX: Handle 12 flags 0x02 dlen 13 #152 [hci0] 427.939477
Channel: 65 len 9 [PSM 19 mode 0] {chan 1}
a1 03 b4 dc 2c 26 21 7b f6 ....,&!{.
Malgré tous ces messages et erreurs, il semble que le BlueZ fonctionne correctement, du moins en ce qui concerne les périphériques d'entrée tels qu'un clavier.
Jadis BlueZ prenait ALSA en charge directement. Mais à partir de la version 5, la pile... agit comme un pont entre une application audio, qui implémente le profil audio Bluetooth, et un périphérique audio Bluetooth. Par conséquent, pour diffuser de l'audio depuis/vers un appareil Bluetooth en continu, il faut installer PulseAudio ... [ou] BlueALSA [qui a] moins de dépendances et [est] plus près du matériel. (Source : (Source:Bluetooth Audio ALSA Backend). Étant donné qu'il s'agit d'une distribution Lite
et que PulseAudio a été explicitement supprimé dans le passé, le paquet bluealsa
sera installé. Mais d'abord qu'est-ce qu'ALSA ? Et assurons-nous que cela fonctionne.
ALSA (Advanced Linux Sound Architecture) est un ensemble de pilotes, bibliothèques et services qui gèrent les cartes de son dans, vous l'aurez deviné, Linux. Pour tester son bon fonctionnement, copiez un fichier son de type wav
dans un répertoire et jouez-le avec l'utilitaire aplay
. Le fichier son doit être suffisamment long, peut-être 5 minutes, afin de lancer quelques tests. En principe, le tout devrait être très facile: ni .asoundrc
ni /etc/asound.conf
ne sont normalement requis. Vous devriez pouvoir jouer et enregistrer du son sans l'un ou l'autre (Source: Alsa Opensrc Org .asoundrc)
nostra@damus:~ $ aplay -vv Music/test.wav
Playing WAVE 'Music/test.wav' : Signed 16 bit Little Endian, Rate 8000 Hz, Mono
Plug PCM: Hardware PCM card 0 'bcm2835 ALSA' device 0 subdevice 0
Its setup is:
stream : PLAYBACK
access : RW_INTERLEAVED
format : S16_LE
subformat : STD
channels : 1
rate : 8000
exact rate : 8000 (8000/1)
msbits : 16
buffer_size : 4000
period_size : 1000
period_time : 125000
tstamp_mode : NONE
tstamp_type : MONOTONIC
period_step : 1
avail_min : 1000
period_event : 0
start_threshold : 4000
stop_threshold : 4000
silence_threshold: 0
silence_size : 0
boundary : 2097152000
appl_ptr : 0
hw_ptr : 0
###### + | 21%
On peut voir un VU-mètre (niveau sonore) émulé au bas du terminal ce qui confirme plus ou moins que le son est joué. Le meilleur test consiste à brancher un casque ou des haut-parleurs amplifiés dans une la prise 3,5 mm pour réellement entendre le son.
Ajustons le volume de l'aide d'un autre utilitaire ALSA, alsamixer
. Ouvrez une autre session avec le Pi et lancez-le.
nostra@damus:~ $ alsamixer
L'interface utilisateur textuelle interactive suivante s'affiche.

Il n'y a qu'un seul contrôle de volume, Headphone
, qui correspond à la sortie 3,5 mm. Le volume est augmenté en appuyant sur la touche + du clavier et diminué en appuyant sur -. Les touches du curseur vers le haut et le bas, ↑ et ↓, peuvent également être utilisées. On peut appuyer sur une touche d de 0 à 9 pour régler le contrôle du volume sur d*10%. Si le canal est en sourdine, alors MM est affiché en bas de la colonne au lieu de OO vu ci-dessus. La mise en sourdine peut être activée en appuyant sur la touche M (pour Mute). Voir la page de manuel ($ man alsamixer) pour plus de détails.
Il est temps d'installer Bluetooth Audio ALSA Backend, alias bluez-alsa, alias BlueALSA. Heureusement, le paquet est connu sous un seul nom: bluealsa
.
nostra@damus:~ $ sudo apt install bluealsa -y
Reading package lists... Done
...
The following NEW packages will be installed:
bluealsa libbluetooth3 libsbc1
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 182 kB of archives.
After this operation, 557 kB of additional disk space will be used.
...
Setting up bluealsa (0.13) ...
bluealsa.service is a disabled or a static unit, not starting it.
Processing triggers for dbus (1.12.20-0+deb10u1) ...
Processing triggers for libc-bin (2.28-10+rpt2+rpi1) ...
L'installation n'ayant pas démarré le service, faisons-le manuellement.
nostra@damus:~ $ sudo systemctl status bluealsa.service
● bluealsa.service - BluezALSA proxy
Loaded: loaded (/lib/systemd/system/bluealsa.service; static; vendor preset: enabled)
Active: inactive (dead)
nostra@damus:~ $ sudo systemctl start bluealsa.service
nostra@damus:~ $ sudo systemctl status bluealsa.service
● bluealsa.service - BluezALSA proxy
Loaded: loaded (/lib/systemd/system/bluealsa.service; static; vendor preset: enabled)
Active: active (running) since Tue 2021-10-26 15:29:38 ADT; 1s ago
Main PID: 1135 (bluealsa)
Tasks: 3 (limit: 1935)
CGroup: /system.slice/bluealsa.service
└─1135 /usr/bin/bluealsa
Oct 26 15:29:38 damus systemd[1]: Started BluezALSA proxy.
Il est désormais possible de se connecter aux enceintes Bluetooth.
nostra@damus:~ $ bluetoothctl
Agent registered
[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:00:00:01 Discovering: yes
...
[NEW] Device 30:21:5C:00:00:01 AUDIOPOD2
...
bluetooth]# devices
...
Device 30:21:5C:00:00:01 AUDIOPOD2
...
bluetooth]# connect 30:21:5C:00:00:01
Attempting to connect to 30:21:5C:00:00:01
[CHG] Device 30:21:5C:00:00:01 Connected: yes
[CHG] Device 30:21:5C:00:00:01 UUIDs: 00001108-0000-1000-8000-00805f9b34fb
[CHG] Device 30:21:5C:00:00:01 UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[CHG] Device 30:21:5C:00:00:01 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device 30:21:5C:00:00:01 UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Device 30:21:5C:00:00:01 UUIDs: 0000111e-0000-1000-8000-00805f9b34fb
[CHG] Device 30:21:5C:00:00:01 ServicesResolved: yes
[CHG] Device 30:21:5C:00:00:01 Paired: yes
Connection successful
[AUDIOPOD2]# quit
Il est temps de tester cette connexion.
nostra@damus:~ $ aplay -vv -D bluealsa:DEV=30:21:5C:00:00:01 music/test.wav
Playing WAVE 'music/test.wav' : Signed 16 bit Little Endian, Rate 8000 Hz, Mono
Plug PCM: Rate conversion PCM (48000, sformat=S16_LE)
Converter: linear-interpolation
Protocol version: 10002
Its setup is:
stream : PLAYBACK
access : RW_INTERLEAVED
format : S16_LE
subformat : STD
channels : 1
rate : 8000
exact rate : 8000 (8000/1)
msbits : 16
buffer_size : 4095
period_size : 682
period_time : 85333
tstamp_mode : NONE
tstamp_type : GETTIMEOFDAY
period_step : 1
avail_min : 682
period_event : 0
start_threshold : 4095
stop_threshold : 4095
silence_threshold: 0
silence_size : 0
boundary : 268369920
Slave: Route conversion PCM (sformat=S16_LE)
Transformation table:
0 <- 0
1 <- 0
Its setup is:
stream : PLAYBACK
access : MMAP_INTERLEAVED
format : S16_LE
subformat : STD
channels : 1
rate : 48000
exact rate : 48000 (48000/1)
msbits : 16
buffer_size : 24576
period_size : 4096
period_time : 85333
tstamp_mode : NONE
tstamp_type : GETTIMEOFDAY
period_step : 1
avail_min : 4096
period_event : 0
start_threshold : 24576
stop_threshold : 24576
silence_threshold: 0
silence_size : 0
boundary : 1610612736
Slave: BlueALSA PCM: /org/bluealsa/hci0/dev_30_21_5C_30_F1_C4/a2dp
BlueALSA BlueZ device: /org/bluez/hci0/dev_30_21_5C_30_F1_C4
BlueALSA Bluetooth codec: 0
################+ | 31%
Lançons alsamixer
à nouveau dans un autre terminal, mais cette fois en ajoutant que la carte de son bluealsa
doit être utilisée.
nostra@damus:~ $ alsamixer -D bluealsa

Passez d'un contrôle à l'autre en tapant sur les touches p ou n sur le clavier ou en utilisant les touches du curseur ← ou →. Le contrôle du volume du haut-parleur Bluetooth est nommé AUDIOPOD2 - A2DP
. Bien entendu, le nombre de commandes et leurs noms dépendent de l'enceinte en question.
Par défaut, bluealsa
active le profil a2dp
en tant que source, ce qui signifie que le Pi ne peut que transmettre un flux audio vers un appareil Bluetooth. Pour recevoir les flux audio depuis un appareil Bluetooth pour éventuellement les stocker ou les jouer, le fichier de configuration doit être modifié.
nostra@damus:~ $ sudo nano /lib/systemd/system/bluealsa.service
[Unit]
Description=BluezALSA proxy
Requires=bluetooth.service
After=bluetooth.service
[Service]
Type=simple
User=root
ExecStart=/usr/bin/bluealsa -p a2dp-source -p a2dp-sink
Bien a2dp-source
est le profil par défaut qui a rendu possible la diffusion audio vers un appareil Bluetooth, il doit être inclus dans la ligne de commande lors de l'ajout de -p a2dp-sink
sinon il sera désactivé.
Pour être honnête, il n'est pas très simple de commencer à diffuser le flux audio d'un téléphone ou d'une tablette vers le Pi et d'en faire la sortie sur la prise 3,5 mm ou la sortie HDMI. La procédure ressemble un peu à l'utilisation d'un clavier Bluetooth. Il faut appairer l'autre appareil sur le téléphone et le sur Pi, puis de se connecter au téléphone avec bluetoothctl
. Jouez une source de son sur le téléphone, comme une chanson ou une vidéo. Si la liaison Bluetooth a été réussie, le son ne sera pas entendu depuis les haut-parleurs du téléphone, mais assurez-vous que le volume est réglé près du maximum. Puis sur le Pi lancez l'utilitaire bleualsa-aplay
avec l'adresse MAC du Bluetooth du téléphone.
nostra@damus:~ $ sudo bluealsa-aplay 04:92:26:00:00:01
On peut aussi utiliser l'adresse MAC plus simple, 00:00:00:00:00:00
, qui devrait aussi fonctionner.
N'oubliez pas qu'il y a deux commandes de volume en jeu, la commande de volume du téléphone ou de la tablette et la commande de volume de la carte son du Raspberry Pi. Comme mentionné ci-dessus, je trouve qu'il est plus facile de commencer avec le téléphone ou la tablette jouant à plein volume ou presque.
Le problème de délai de transit demeure. En pratique, l'audio des vidéos visionnées sur le téléphone ou la tablette ne peut pas être diffusé vers le Raspberry Pi, à moins que vous soyez du genre à aimer les versions doublées en français des films des années 50 et 60 du studio Tōhō au sujet des monstres venant de l'espace. J'ai testé pour voir si l'utilisation d'un matériel différent apporterait de meilleures performances. J'ai complètement désactivé les puces Wi-Fi et Bluetooth (le Broadcom BCM43438 sur le Pi 3 B) et j'ai essayé de diffuser l'audio d'une vidéo avec un adaptateur USB-Bluetooth bon marché.
nostra@damus:~ $ lsusb
Bus 001 Device 004: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
...
Il n'y a eu aucune amélioration. L'adaptateur pourrait être en cause, car il n'implémente que Bluetooth 4.0 tandis que le Pi 3 B exécute Bluetooth 4.1. La puce Broadcomm a été remplacée par une puce Cypress sur les Pi 3 B+ et PI 4 B. Ceci est particulièrement significatif sur le Pi 4 qui prend en charge Bluetooth 5.0 (seulement 4.2 sur le 3 B+) et il est rapporté que le rayon d'action augmente de 4 et la vitesse de près de 2 fois par rapport à la version 4. Quelque chose à tester à l'avenir, si jamais je mets la main sur un Pi 4 ou un autre système avec Bluetooth 5.0. Bien entendu, le périphérique audio jouant le son, qu'il s'agisse d'un haut-parleur ou d'un casque, doit également implémenter Bluetooth 5.0, car le plus vieux protocole sera nécessairement utilisé lorsque le récepteur et la source ont des capacités différentes. Dans tous les cas, je pense que le problème de latence est inhérent à la technologie ce qui explique pourquoi certains lecteurs vidéo peuvent retarder la lecture vidéo pour aider à synchroniser le son.
Rappelez-vous les trois erreurs signalées lors du démarrage du service bluetooth
.
Oct 25 21:13:46 damus bluetoothd[505]: Sap driver initialization failed.
Oct 25 21:13:46 damus bluetoothd[505]: sap-server: Operation not permitted (1)
Oct 25 21:13:46 damus bluetoothd[505]: Failed to set privacy: Rejected (0x0b)
Les deux premiers messages signalent un échec lors du chargement du profil d'accès SIM (sap
). Étant donné qu'il n'y a pas de carte SIM sur un Raspberry Pi, cette panne est à prévoir. Il est assez simple de modifier le fichier d'unité pour demander au service d'ignorer ce profil.
nostra@damus:~ $ sudo nano /lib/systemd/system/bluetooth.service
[Unit]
Description=Bluetooth service
Documentation=man:bluetoothd(8)
ConditionPathIsDirectory=/sys/class/bluetooth
[Service]
Type=dbus
BusName=org.bluez
ExecStart=/usr/lib/bluetooth/bluetoothd --noplugin=sap
NotifyAccess=main
#WatchdogSec=10
Restart=on-failure
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
LimitNPROC=1
ProtectHome=true
ProtectSystem=full
[Install]
WantedBy=bluetooth.target
Alias=dbus-org.bluez.service
L'option --noplugin=sap
supprimera les messages d'erreur associés au profil sap
. J'ai aussi activé le redémarrage en cas d'échec pour la seule raison que cela est fait sur mon ordinateur de bureau.
L'erreur Failed to set privacy
, qui semble beaucoup plus importante, s'est avérée insoluble. Mes solutions précédentes qui impliquaient le redémarrage du service bluetooth
dans une tâche cron
au démarrage du Pi ou l'ajout d'une ligne à un fichier de service comme proposé par Ben Windsor ne fonctionnent plus. Je n'ai pas pu obtenir de résultats fiables avec les autres solutions de contournement trouvées dans regression from 0.8 to 0.9 -- BLE connection fails until bluetooth service is restarted #8 sur GitHub de RPi-Distro.
Il faut souligner que la plupart de celles-ci utilisent hciconfig
qui est déprécié et [ne seront] plus [sont] là dans les nouvelles versions de bluez. Ainsi, même si ces mesures de contournement devaient fonctionner, ce ne sera plus le cas à la prochaine mise à jour de BlueZ dans Raspberry Pi OS.
Les commandes peuvent être transmises à l'utilitaire de contrôle Bluetooth, bluetoothctl
, directement sur sa ligne de commande sans évoquer son mode interactif. Pour connecter le haut-parleur sans fil, la commande est bluetoothctl connect 30:21:5C:00:00:01 à l'invite de la console ou dans un fichier de script. S'il n'est pas nécessaire d'afficher la sortie sur le terminal, elle peut être redirigée vers le périphérique null
: bluetoothctl connect 30:21:5C:00:00:01 >/dev/null. Seul le son émis par le haut-parleur lorsqu'une connexion est établie confirmera que l'opération a réussi. Déconnecter le haut-parleur est tout aussi simple : bluetoothctl disconnect 30:21:5C:00:00:01 >/dev/null. Ces commandes peuvent être utilisées comme des scripts d'une seule ligne et être activées par un commutateur virtuel dans Domoticz ou un autre logiciel domotique. Il y a un problème cependant; la commande de connexion ne fonctionnera que si le haut-parleur (ou tout autre appareil) a déjà été appairé ou connecté (ce qui associe implicitement l'appareil). Pour tester cela, retirons l'appareil et essayons immédiatement de s'y connecter.
nostra@damus:~ $ bluetoothctl remove 30:21:5C:00:00:01
[CHG] Device 30:21:5C:00:00:01 ServicesResolved: no
Device has been removed
nostra@damus:~ $ bluetoothctl connect 30:21:5C:00:00:01
Device 30:21:5C:00:00:01 not available
Il est nécessaire d'attendre que le périphérique soit découvert, ce qui signifie qu'il faut activer la découverte.
[bluetooth]# scan on
Failed to start discovery: org.bluez.Error.InProgress ce message indique que la découverte était déjà activée
attendre jusqu'à la découverte du haut-parleur :
[NEW] Device AUDIOPOD2
on peut maintenant appairer et connecter le haut-parleur
[bluetooth]# pair 30:21:5C:00:00:01
Attempting to pair with 30:21:5C:00:00:01
[CHG] Device 30:21:5C:00:00:01 Connected: yes
[CHG] Device 30:21:5C:00:00:01 UUIDs: 00001108-0000-1000-8000-00805f9b34fb
[CHG] Device 30:21:5C:00:00:01 UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[CHG] Device 30:21:5C:00:00:01 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device 30:21:5C:00:00:01 UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Device 30:21:5C:00:00:01 UUIDs: 0000111e-0000-1000-8000-00805f9b34fb
[CHG] Device 30:21:5C:00:00:01 ServicesResolved: yes
[CHG] Device 30:21:5C:00:00:01 Paired: yes
Pairing successful
[CHG] Device 30:21:5C:00:00:01 ServicesResolved: no
[CHG] Device 30:21:5C:00:00:01 Connected: no
L'activation de la découverte si l'appareil n'est pas appairé peut être effectuée dans un script amélioré. En voici une version simplifiée.
# Use the MAC given on the command line or the default MAC if none given
BTMAC=${1:-30:21:5C:00:00:01}
# check if the device is paired
bluetoothctl info $BTMAC >/dev/null
if [ $? -ne 0 ]
then
# dev not paired, enable scanning for 15 seconds to pair
bluetoothctl --timeout 15 scan on>/dev/null
fi
bluetoothctl connect $BTMAC >/dev/null
exit $?
Lorsque la découverte est lancée, bluetooth
passe en mode interactif et s'exécute au premier plan jusqu'à ce que la commande quit
ou exit
soit saisie. L'option timeout 15
garantit que l'utilitaire se ferme après la recherche des périphériques pendant 15 secondes, ce qui permet au script de continuer. Un test est effectué pour voir si l'appareil est déjà appairé pour éviter ce délai de 15 secondes. Je suppose que si des informations sur un appareil peuvent être affichées par l'utilitaire bluetoothctl
, l'appareil est déjà appairé et, dans ce cas, une connexion peut être tentée immédiatement. Autrement, on espère que le haut-parleur sera découvert avant l'expiration de ce délai de 15 secondees afin que la connexion soit réussie.
Voici une version un peu plus utile, car l'adresse MAC du périphérique Bluetooth, le temps de recherche des périphériques et le délai avant de se connecter si nécessaire peuvent tous être spécifiés sur la ligne de commande.
#!/bin/bash
# default values
BTMAC="30:21:5C:00:00:01"
CDELAY=15
STIME=60
usage() {
echo "Usage: $(basename $0) [ -m MAC_ADDRESS ] [ -d CONNECT_DELAY ] [-t SCAN_TIME]" 1>&2
}
exit_abnormal() {
usage
exit 1
}
# test number is a positive integer, syntax: test_number value var_name
test_number() {
re='^[0-9]+$'
if ! [[ $1 =~ $re ]]
then
echo "Error: $2 is not an integer" >&2;
exit_abnormal
fi
if [[ $1 == "0" ]]
then
echo "Error: $2 must be greater than 0" >&2;
exit_abnormal
fi
}
cline=$1
if [ "$cline" != "" ] && [ "${cline:0:1}" != "-" ]
then
echo "Error: $1 is an invalid option"
exit_abnormal
fi
while getopts ":m:d:t:h" options
do
case "${options}" in
m)
BTMAC=${OPTARG}
;;
d)
CDELAY=${OPTARG}
;;
t)
STIME=${OPTARG}
;;
h)
usage
exit 0
;;
:)
echo "Error: -${OPTARG} requires an argument."
exit_abnormal
;;
?)
echo "Error: -${OPTARG} is an unknown flag."
exit_abnormal
;;
*)
exit_abnormal
;;
esac
done
# test validity of parameters
test_number $CDELAY "CONNECT_DELAY"
test_number $STIME "SCAN_TIME"
if ! [[ $BTMAC =~ ^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$ ]]
then
echo "Error: \"$BTMAC\" is not a valid MAC address."
exit_abnormal
fi
# echo "OK:"
# echo " BTMAC: $BTMAC"
# echo " CDELAY: $CDELAY"
# echo " STIME: $STIME"
# check if the devide is paired
bluetoothctl info $BTMAC >/dev/null
if [ $? -ne 0 ]
then
# dev not paired, enable scanning for 60 seconds to pair
# but waiting only 15 seconds before trying to connect
nohup bluetoothctl --timeout $STIME scan on>/dev/null &>/dev/null &
sleep $CDELAY
fi
bluetoothctl connect $BTMAC >/dev/null
exit $?
Téléchargez le script : connect_bt_spearker et placez-le dans un répertoire qui se trouve dans le chemin de recherche tel que ~/.local/bin
. N'oubliez pas d'éditer les valeurs par défaut au début du script, d'autant plus que l'adresse MAC qu'on y trouve ne correspond probablement à aucun appareil. Le script peut être vu en action avec l'utilitaire htop
, où les processus sont répertoriés dans l'ordre de leur numéro PID.

Supposant que l'appareil n'a pas déjà été appairé, la recherche est activée pendant 60 secondes (valeur par défaut). Cependant cela se fait en arrière-plan. Donc immédiatement après l'activation de la découverte, le script dort pendant 15 secondes (encore une fois une valeur par défaut qui peut être modifiée). Les deux processus peuvent être vus sur la capture d'écran. Une fois le délai dépassé, une tentative de connexion à l'appareil sera effectuée. Puisque de nombreuses instances de bluetoothctl
peuvent être exécutées simultanément, la découverte de périphérique se déroule toujours en arrière-plan pendant qu'une connexion avec le haut-parleur est en cours. Vraisemblablement, s'il faut plus de 15 secondes pour découvrir le locuteur, cela se fera en une minute, de sorte que lors de l'exécution ultérieure du script, la probabilité d'une connexion réussie soit améliorée. Voir Running bash commands in the background properly by Felix Milea-Ciobanu, au sujet de l'utilisation de hup
and & pour exécuter un programme comme un service en arrière-plan.
En fait, je ne pense pas que ce script sera d'une grande utilité. Pour l'utiliser, il faut connaître l'adresse MAC de l'enceinte. Puisque la façon la plus évidente d'obtenir cette adresse est d'appairer l'appareil manuellement, il est fort probable que l'appareil soit déjà dans la liste des périphériques connus. Donc, à moins que l'appareil ne soit délibérément retiré, il ne devrait pas y avoir de difficulté à se connecter au haut-parleur. De plus, je soupçonne que la plupart feraient confiance au haut-parleur.
[bluetooth]# trust 30:21:5C:00:00:01
Dès lors, la connexion avec l'enceinte sera automatiquement rétablie chaque fois que le Pi et l'enceinte Bluetooth seront suffisamment rapprochés l'un de l'autre.
Les commandes pour augmenter ou diminuer le volume pourraient être utiles. Le volume peut être réglé sur un pourcentage donné ou diminué ou augmenté d'un pourcentage à l'aide du suffixe -ou +.
nostra@damus:~ $ amixer -D bluealsa sset "AUDIOPOD2 - A2DP" 90%
Simple mixer control 'AUDIOPOD2 - A2DP',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 127
Mono:
Front Left: Playback 115 [91%] [on]
Front Right: Playback 115 [91%] [on]
nostra@damus:~ $ amixer -D bluealsa sset "AUDIOPOD2 - A2DP" 10%-
Simple mixer control 'AUDIOPOD2 - A2DP',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 127
Mono:
Front Left: Playback 102 [80%] [on]
Front Right: Playback 102 [80%] [on]
Il est possible de supprimer toutes les sorties de la commande avec l'option -q
. Dans ce cas, on peut obtenir explicitement le volume de lecture.
nostra@damus:~ $ amixer -q -D bluealsa sset "AUDIOPOD2 - A2DP" 50%
nostra@damus:~ $ amixer -D bluealsa sget "AUDIOPOD2 - A2DP"
Simple mixer control 'AUDIOPOD2 - A2DP',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 127
Mono:
Front Left: Playback 64 [50%] [on]
Front Right: Playback 64 [50%] [on]
Voici une autre façon de régler le volume de lecture. Notez que les volumes des canaux gauche et droit peuvent être spécifiés indépendamment. On pouvait en faire autant avec la commande sset
ci-dessus.
nostra@damus:~ $ amixer -D bluealsa cset numid=2 60,30
numid=2,iface=MIXER,name='AUDIOPOD2 - A2DP Playback Volume'
; type=INTEGER,access=rw------,values=2,min=0,max=127,step=1
: values=60,30
nostra@damus:~ $ amixer -D bluealsa cset numid=2 60%,30%
numid=2,iface=MIXER,name='AUDIOPOD2 - A2DP Playback Volume'
; type=INTEGER,access=rw------,values=2,min=0,max=127,step=1
: values=77,39
Comment sait-on que le volume de lecture est numid=2
? En listant le contenu du matériel.
nostra@damus:~ $ amixer -D bluealsa contents
numid=1,iface=MIXER,name='AUDIOPOD2 - A2DP Playback Switch'
; type=BOOLEAN,access=rw------,values=2
: values=on,on
numid=2,iface=MIXER,name='AUDIOPOD2 - A2DP Playback Volume'
; type=INTEGER,access=rw------,values=2,min=0,max=127,step=1
: values=83,83
Ces commandes de volume sont linéaires. Plus explicitement, le volume de chaque canal est une valeur de 0 à 127. Lorsque le volume est réglé à 50% ou 30%, amixer
fixe la valeur réelle à 0.5*127 ou 0.3*127 en arrondissant à l'entier le plus proche. Mais cela ne correspond pas du tout à la façon dont nous percevons le volume sonore. Avec l'option -M
(pour mapped), l'utilitaire fournit un mode adapté de réglage plus ou moins logarithmique du volume. Or, autant que je sache, cela ne fonctionne pas avec bluealsa
.
Il est certainement possible d'utiliser des balises Bluetooth pour la détection de présence dans des systèmes domotique tel Domoticz, ce n'est pas quelque chose que je fais. En fait, il n'y a plus aucune possibilité de connecter des appareils Bluetooth LE à courte portée à mon serveur domotique niché dans un coin reculé de la maison. Dans ce cas, il est logique de désactiver le service. Tout d'abord, examinons les modules, périphériques et services du noyau impliqués.
nostra@damus:~ $ lsmod | grep -i -E 'blue|hci'
hci_uart 40960 1
btbcm 16384 1 hci_uart
bluetooth 393216 27 hidp,hci_uart,bnep,btbcm
ecdh_generic 16384 2 bluetooth
rfkill 32768 4 bluetooth,cfg80211
nostra@damus:~ $ systemctl --all | grep -i -E 'blue|hci|bt'
sys-devices-platform-soc-3f201000.serial-tty-ttyAMA0-hci0.device loaded active plugged /sys/devices/platform/soc/3f201000.serial/tty/ttyAMA0/hci0
sys-subsystem-bluetooth-devices-hci0.device loaded active plugged /sys/subsystem/bluetooth/devices/hci0
bluealsa.service loaded active running BluezALSA proxy
bluetooth.service loaded active running Bluetooth service
bthelper@hci0.service loaded active exited Raspberry Pi bluetooth helper
hciuart.service loaded active running Configure Bluetooth Modems connected by UART
system-bthelper.slice loaded active active system-bthelper.slice
bluetooth.target loaded active active Bluetooth
Bluetooth est facilement désactivé avec l'ajout d'un overlay dans le fichier de configuration de l'arborescence matérielle du noyau.
nostra@damus:~ $ sudo nano /boot/config.txt
Ajouter les lignes suivantes dans le fichier.
...
# Additional overlays and parameters are documented /boot/overlays/README
# comment to enable Bluetooth
dtoverlay=disable-bt
...
Desactivez quelques services.
nostra@damus:~ $ sudo systemctl disable hciuart.service
Removed /etc/systemd/system/multi-user.target.wants/hciuart.service.
nostra@damus:~ $ sudo systemctl disable bluetooth.service
Synchronizing state of bluetooth.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable bluetooth
Removed /etc/systemd/system/bluetooth.target.wants/bluetooth.service.
Removed /etc/systemd/system/dbus-org.bluez.service.
Redémarrez et testez que tout cela n'est plus actif.
nostra@damus:~ $ lsmod | grep -i -E 'blue|hci|bt'
nostra@damus:~ $ systemctl -all | grep -i -E 'blue|hci|bt'
nostra@damus:~ $
Tous les packages sont toujours disponibles donc il est assez simple d'inverser cette opération. Activez d'abord à nouveau les services.
nostra@damus:~ $ sudo systemctl enable hciuart.service
Created symlink /etc/systemd/system/multi-user.target.wants/hciuart.service → /lib/systemd/system/hciuart.service.
nostra@damus:~ $ sudo systemctl disable bluetooth.service
Synchronizing state of bluetooth.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable bluetooth
Deuxièmement, supprimez l'overlay de désactivation.
nostra@damus:~ $ sudo nano /boot/config.txt
...
# Additional overlays and parameters are documented /boot/overlays/README
# uncomment to disable Bluetooth
#dtoverlay=disable-bt
...
Après le redémarrage, tout devrait revenir comme avant.
nostra@damus:~ $ lsmod | grep -i -E 'blue|hci'
hci_uart 40960 1
btbcm 16384 1 hci_uart
bluetooth 393216 27 hidp,hci_uart,bnep,btbcm
ecdh_generic 16384 2 bluetooth
rfkill 32768 4 bluetooth,cfg80211
nostra@damus:~ $ systemctl --all | grep -i -E 'blue|hci|bt'
sys-devices-platform-soc-3f201000.serial-tty-ttyAMA0-hci0.device loaded active plugged /sys/devices/platform/soc/3f201000.serial/tty/ttyAMA0/hci0
sys-subsystem-bluetooth-devices-hci0.device loaded active plugged /sys/subsystem/bluetooth/devices/hci0
bluealsa.service loaded active running BluezALSA proxy
bluetooth.service loaded active running Bluetooth service
bthelper@hci0.service loaded active exited Raspberry Pi bluetooth helper
hciuart.service loaded active running Configure Bluetooth Modems connected by UART
system-bthelper.slice loaded active active system-bthelper.slice
bluetooth.target loaded active active Bluetooth
Si Bluetooth n'est pas nécessaire, on peut supprimer tous ses éléments. De toute façon, ce n'est pas une démarche permanente et elle peut être inversée. Tout d'abord, il serait préférable de désactiver les services comme indiqué dans la section précédente. Ensuite, procédez à la suppression des paquets.
nostra@damus:~ $ sudo apt remove --purge bluez -y
...
Removing bluealsa (0.13) ...
Removing pi-bluetooth (0.1.18) ...
Removing bluez (5.50-1.2~deb10u2+rpt1) ...
nostra@damus:~ $ sudo apt autoremove
...
Removing bluez-firmware (1.2-4+rpt8) ...
Removing libbluetooth3:armhf (5.50-1.2~deb10u2+rpt1) ...
Removing libsbc1:armhf (1.4-1) ...
Pour renverser l'opération il suffit de réinstaller deux ou trois paquets.
nostra@damus:~ $ sudo apt install bluez pi-bluetooth
Si la lecture de flux audio via Bluetooth est désiré, il faut aussi installé bluealsa
puis paramétrer le service pour obtenir les capacités désirées comme décrit ci-dessus dans les deux sections Diffusion d'une source audio en continu vers des appareils Bluetooth et Lecture audio en continu depuis un appareil Bluetooth - un téléphone Android.