2021-11-04
md
Bluetooth et BlueALSA avec Raspberry Pi OS Lite (novembre 2021)
<-Bluetooth, BlueALSA and Buster
<-Baby Bluetooth Steps on Raspberry Pi 3 - Raspbian (Stretch)

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

  1. Raspberry Pi OS Lite
  2. Adhésion au groupe bluetooth
  3. Clavier Bluetooth
    1. Première connexion
    2. Connexions ultérieures
    3. Déconnexions rapides
  4. Diffusion d'une source audio en continu vers des appareils Bluetooth
    1. Tester ALSA
    2. Installer bluealsa
    3. Diffusion audio en continu vers un haut-parleur Bluetooth
  5. Lecture audio en continu depuis un appareil Bluetooth - un téléphone Android
  6. Modifications au fichier d'unité bluetooth.service
  7. Scripts Bluetooth
  8. Désactiver Bluetooth
  9. Supprimer Bluetooth

Raspberry Pi OS Lite toc

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.

Adhésion au groupe bluetooth toc

É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.

Clavier Bluetooth toc

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

Première connexion toc

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.

  1. Lancez la recherche d'appareils Bluetooth.
  2. 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.
  3. Dès que le clavier est repéré par bluetoothctl, associez-le.
  4. Saisissez le code NIP affiché par blueetoothctl sur le clavier Bluetooth et terminez en appuyant sur la touche Entrée.
  5. Avec blueetoothctl, faites confiance au clavier une fois qu'il est jumelé.
  6. 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é.

Connexions ultérieures toc

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

Déconnexions rapides toc

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.

Diffusion d'une source audio en continu vers des appareils Bluetooth toc

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.

Tester ALSA toc

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.

alsamixer

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.

Installer bluealsa toc

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.

Diffusion audio en continu vers un haut-parleur Bluetooth toc

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

alsamixer with bluealsa device

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.

Lecture audio en continu depuis un appareil Bluetooth - un téléphone Android toc

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.

Modififcations au fichier d'unité bluetooth.service toc

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.

Scripts Bluetooth toc

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.

services bluetooth dans htop

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.

Désactiver Bluetooth toc

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

Supprimer Bluetooth toc

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.

<-Bluetooth, BlueALSA and Buster
<-Baby Bluetooth Steps on Raspberry Pi 3 - Raspbian (Stretch)