2022-03-19
md
Bluetooth®, PulseAudio, and BlueALSA in Raspberry Pi OS Lite (March 2022)
<-Bluetooth and BlueALSA in Raspberry Pi OS Lite (November 2021)
<-Baby Bluetooth Steps on Raspberry Pi 3 - Raspbian (Stretch)
 About another breaking change in Raspberry Pi OS (Bullseye) based on Debian 11 

At the end of 2020, BlueALSA (the Bluetooth Audio ALSA Backend aka bluez-alsa) was ejected and replaced with PulseAudio in the desktop version of Raspberry Pi OS (see the 2020-12-02 release notes). I feared then that there would be problems with the solutions I described as recently as November 4, 2021, to connect Bluetooth® sound devices to the Raspberry Pi running the Lite version of the OS. I did not test with the November 8 version of the OS, but yesterday, I confirmed that an update of my post about sound over Bluetooth® in Raspberry Pi OS (Bullseye) based on Debian 11 was needed.

Table of Content

  1. Raspberry Pi OS Lite
  2. Modifying the Bluetooth Service File
  3. Decision Time
  4. Installing PulseAudio
  5. Installing BlueALSA 1.4.0
  6. Installing BlueALSA 3.0.0
  7. Best Decision

Raspberry Pi OS Lite toc

First, let's look at the state of things when booting the Raspberry Pi after installing the January 28, 2022, version of Raspberry Pi OS Lite and doing an update and upgrade on the 15th of March.

michel@hp:~$ ssh pi@tarte.local Opening an ssh session from the desktop computer ... pi@tarte:~ $ sudo apt update && sudo apt upgrade -y ... The following packages will be upgraded: libcamera-apps-lite libcamera0 libcryptsetup12 libexpat1 libsasl2-2 libsasl2-modules-db libssl1.1 libwbclient0 linux-libc-dev openssl raspberrypi-bootloader raspberrypi-kernel raspberrypi-sys-mods raspi-config rpi-eeprom vcdbg 16 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Need to get 91.3 MB of archives. After this operation, 3,829 kB of additional disk space will be used. ...

Let's check on the Linux kernel version and verify that the bluealsa package is not available in the Raspbian Bullseye repository.

pi@tarte:~ $ uname -a Linux tarte 5.10.92-v7+ #1514 SMP Mon Jan 17 17:36:39 GMT 2022 armv7l GNU/Linux pi@tarte:~ $ apt-cache policy bluealsa bluealsa: Installed: (none) Candidate: (none) Version table:

We can also confirm that, as before, the default user is not a member of the bluetooth group, and take care of that problem.

pi@tarte:~ $ groups pi adm dialout cdrom sudo audio video plugdev games users input render netdev gpio i2c spi pi@tarte:~ $ cat /etc/group | grep bluetooth bluetooth:x:112: the group exists but pi is not a member pi@tarte:~ $ sudo adduser pi bluetooth Adding user `pi' to group `bluetooth' ... Adding user pi to group bluetooth Done.

I prefer to reboot ($ sudo reboot) and open a new session after a major system upgrade. This also ensures that membership in the bluetooth group will take effect.

Modifying the bluetooth.service Unit File toc

Let's look at the bluetooth service which should be running on any Raspberry Pi equipped with the Wi-Fi/Bluetooth chip. Hopefully, a USB Bluetooth® dongle can be used with older Pi models with equivalent results.

pi@tarte:~ $ sudo systemctl status blue* ● bluetooth.target - Bluetooth Loaded: loaded (/lib/systemd/system/bluetooth.target; static) Active: active since Tue 2022-03-15 18:12:05 ADT; 2min 45s ago Docs: man:systemd.special(7) Mar 15 18:12:05 tarte systemd[1]: Reached target Bluetooth. ● bluetooth.service - Bluetooth service Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2022-03-15 18:12:05 ADT; 2min 46s ago Docs: man:bluetoothd(8) Main PID: 541 (bluetoothd) Status: "Running" Tasks: 1 (limit: 1597) CPU: 94ms CGroup: /system.slice/bluetooth.service └─541 /usr/libexec/bluetooth/bluetoothd Mar 15 18:12:05 tarte systemd[1]: Starting Bluetooth service... Mar 15 18:12:05 tarte bluetoothd[541]: Bluetooth daemon 5.55 Mar 15 18:12:05 tarte systemd[1]: Started Bluetooth service. Mar 15 18:12:06 tarte bluetoothd[541]: Starting SDP server Mar 15 18:12:06 tarte bluetoothd[541]: Bluetooth management interface 1.18 initialized Mar 15 18:12:06 tarte bluetoothd[541]: profiles/sap/server.c:sap_server_register() Sap driver initialization failed. Mar 15 18:12:06 tarte bluetoothd[541]: sap-server: Operation not permitted (1) Mar 15 18:12:06 tarte bluetoothd[541]: Failed to set privacy: Rejected (0x0b)

As can be seen, the version of BlueZ the "Official Linux Bluetooth protocol stack" has been bumped up from 5.50 to 5.55 which, again, is not the most recent version (now 5.63). As before those errors are not important and it would be possible to connect to a Bluetooth® device such as a keyboard at this point. As expected, it is not possible to connect to a Bluetooth® speaker.

pi@tarte:~ $ bluetoothctl Agent registered [bluetooth]# scan on Discovery started ... [NEW] Device 30:21:5C:00:01:02 AUDIOPOD2 [bluetooth]# connect 30:21:5C:00:01:02 Attempting to connect to 30:21:5C:00:01:02 [CHG] Device 30:21:5C:00:01:02 Connected: yes [CHG] Device 30:21:5C:00:01:02 UUIDs: 00001108-0000-1000-8000-00805f9b34fb [CHG] Device 30:21:5C:00:01:02 UUIDs: 0000110b-0000-1000-8000-00805f9b34fb [CHG] Device 30:21:5C:00:01:02 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb [CHG] Device 30:21:5C:00:01:02 UUIDs: 0000110e-0000-1000-8000-00805f9b34fb [CHG] Device 30:21:5C:00:01:02 UUIDs: 0000111e-0000-1000-8000-00805f9b34fb [CHG] Device 30:21:5C:00:01:02 ServicesResolved: yes Failed to connect: org.bluez.Error.Failed [CHG] Device 30:21:5C:00:01:02 ServicesResolved: no [CHG] Device 30:21:5C:00:01:02 Connected: no

If the red error messages are irksome, it is possible to get rid of those related to the missing SAP server by editing the service file.

pi@tarte:~ $ sudo -E systemctl edit --full bluetooth

Change the ExecStart line from

ExecStart=/usr/libexec/bluetooth/bluetoothd

to

ExecStart=/usr/libexec/bluetooth/bluetoothd --noplugin=sap

Once the change to the service file is made, the service must be restarted.

pi@tarte:~ $ sudo systemctl daemon-reload pi@tarte:~ $ sudo systemctl restart bluetooth pi@tarte:~ $ sudo systemctl status bluetooth ● bluetooth.service - Bluetooth service Loaded: loaded (/etc/systemd/system/bluetooth.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2022-03-16 15:51:23 ADT; 17s ago Docs: man:bluetoothd(8) Main PID: 856 (bluetoothd) Status: "Running" Tasks: 1 (limit: 1597) CPU: 81ms CGroup: /system.slice/bluetooth.service └─856 /usr/libexec/bluetooth/bluetoothd --noplugin=sap Mar 16 15:51:22 tarte systemd[1]: Starting Bluetooth service... Mar 16 15:51:23 tarte bluetoothd[856]: Bluetooth daemon 5.55 Mar 16 15:51:23 tarte systemd[1]: Started Bluetooth service. Mar 16 15:51:23 tarte bluetoothd[856]: Starting SDP server Mar 16 15:51:23 tarte bluetoothd[856]: Excluding (cli) sap Mar 16 15:51:23 tarte bluetoothd[856]: Bluetooth management interface 1.18 initialized Mar 16 15:51:23 tarte bluetoothd[856]: Failed to set privacy: Rejected (0x0b)

As can be seen, I still do not know how to get rid of the last error message.

Decision Time toc

Now that the system is updated, and that a few Bluetooth loose ends have been tidied, a decision must be made if streaming sound over Bluetooth is desired. As far as I can tell, these are the available choices.

  1. Do not update to Raspberry Pi OS Bullseye (Debian 11). These options amount to the same thing since the Legacy version is the Debian 10 - Buster edition of the operating system.
  2. Update to Raspberry Pi OS Bullseye (Debian 11).
    • Install PulseAudio in the Lite version of the OS.
    • Compile BlueALSA from source.
    • Install BlueALSA from the older Buster repository or from another repository.

No matter how Buster is installed, if that's the route taken then the instructions in the older Bluetooth and BlueALSA in Raspberry Pi OS Lite (November 2021) post should remain valid and there's not much of interest below.

Moving on to PulseAudio may be the correct solution in the long term, although it does come at a cost as shown in the next section. Compiling and installing bluealsa from source is something I have done in the past Compiling BlueALSA in ALSA and Bluetooth on the Orange Pi PC 2 with Armbian Bionic. I tried it on the Raspberry Pi following the Installation from source Wiki page in the bluez-alsa GitHub repository. On the whole it worked but I did run into problems with using Alsamixer which I think were associated with the SystemD service file. I did not investigate at all, because right now, I think the better solution is to install BlueALSA from the "oldstable" Buster repository if there is an absolute need to use BlueALSA. For the more daring, there are indications at the end about installing a newer version of the package from a "testing" respository.

Installing PulseAudio toc

Eventhough PulseAudio is installed on my desktop Linux Mint computer, I know next to nothing about the package. Thankfully, I was able to find very helpful Web resources.

The first step is to install the PulseAudio BlueTooth module which is not included in the Lite version of Raspberry Pi OS but which is probably present in the desktop versions. That pulls in a surprising number of packages: 105 in fact which require a 69.2 MB download and 244 MB of additional disk space once installed. This is so big that I have included the full output of the install procedure.

pi@tarte:~ $ sudo apt install pulseaudio-module-bluetooth Reading package lists... Done Building dependency tree... Done Reading state information... Done The following additional packages will be installed: dbus-user-session fontconfig libaom0 libasound2-plugins libasyncns0 libavcodec58 libavresample4 libavutil56 libcairo-gobject2 libcairo2 libcodec2-0.9 libdatrie1 libdav1d4 libdrm-amdgpu1 libdrm-nouveau2 libdrm-radeon1 libgdk-pixbuf-2.0-0 libgdk-pixbuf2.0-bin libgdk-pixbuf2.0-common libgl1 libgl1-mesa-dri libglapi-mesa libglvnd0 libglx-mesa0 libglx0 libgraphite2-3 libgsm1 libharfbuzz0b libice6 libjack-jackd2-0 libllvm11 libltdl7 libmp3lame0 libopenjp2-7 libopus0 libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libpixman-1-0 libpulse0 libpulsedsp librsvg2-2 librsvg2-common libsensors-config libsensors5 libshine3 libsm6 libsnappy1v5 libsndfile1 libsoxr0 libspeex1 libspeexdsp1 libswresample3 libtdb1 libthai-data libthai0 libtheora0 libtwolame0 libva-drm2 libva-x11-2 libva2 libvdpau-va-gl1 libvdpau1 libvorbisenc2 libvpx6 libvulkan1 libwavpack1 libwayland-client0 libwebpmux3 libwebrtc-audio-processing1 libx11-xcb1 libx264-160 libx265-192 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-randr0 libxcb-render0 libxcb-shm0 libxcb-sync1 libxcb-xfixes0 libxdamage1 libxfixes3 libxi6 libxrender1 libxshmfence1 libxtst6 libxvidcore4 libxxf86vm1 libz3-4 libzvbi-common libzvbi0 mesa-va-drivers mesa-vdpau-drivers mesa-vulkan-drivers ocl-icd-libopencl1 pulseaudio pulseaudio-utils rtkit shared-mime-info va-driver-all vdpau-driver-all x11-common Suggested packages: jackd2 opus-tools librsvg2-bin lm-sensors speex opencl-icd pavumeter pavucontrol paprefs nvidia-legacy-390xx-vdpau-driver nvidia-legacy-340xx-vdpau-driver The following NEW packages will be installed: dbus-user-session fontconfig libaom0 libasound2-plugins libasyncns0 libavcodec58 libavresample4 libavutil56 libcairo-gobject2 libcairo2 libcodec2-0.9 libdatrie1 libdav1d4 libdrm-amdgpu1 libdrm-nouveau2 libdrm-radeon1 libgdk-pixbuf-2.0-0 libgdk-pixbuf2.0-bin libgdk-pixbuf2.0-common libgl1 libgl1-mesa-dri libglapi-mesa libglvnd0 libglx-mesa0 libglx0 libgraphite2-3 libgsm1 libharfbuzz0b libice6 libjack-jackd2-0 libllvm11 libltdl7 libmp3lame0 libopenjp2-7 libopus0 libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libpixman-1-0 libpulse0 libpulsedsp librsvg2-2 librsvg2-common libsensors-config libsensors5 libshine3 libsm6 libsnappy1v5 libsndfile1 libsoxr0 libspeex1 libspeexdsp1 libswresample3 libtdb1 libthai-data libthai0 libtheora0 libtwolame0 libva-drm2 libva-x11-2 libva2 libvdpau-va-gl1 libvdpau1 libvorbisenc2 libvpx6 libvulkan1 libwavpack1 libwayland-client0 libwebpmux3 libwebrtc-audio-processing1 libx11-xcb1 libx264-160 libx265-192 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-randr0 libxcb-render0 libxcb-shm0 libxcb-sync1 libxcb-xfixes0 libxdamage1 libxfixes3 libxi6 libxrender1 libxshmfence1 libxtst6 libxvidcore4 libxxf86vm1 libz3-4 libzvbi-common libzvbi0 mesa-va-drivers mesa-vdpau-drivers mesa-vulkan-drivers ocl-icd-libopencl1 pulseaudio pulseaudio-module-bluetooth pulseaudio-utils rtkit shared-mime-info va-driver-all vdpau-driver-all x11-common 0 upgraded, 105 newly installed, 0 to remove and 0 not upgraded. Need to get 69.2 MB of archives. After this operation, 244 MB of additional disk space will be used. Do you want to continue? [Y/n] y Get:1 http://archive.raspberrypi.org/debian bullseye/main armhf libpulse0 armhf 14.2-2+rpi1 [257 kB] Get:2 http://archive.raspberrypi.org/debian bullseye/main armhf libavutil56 armhf 7:4.3.3-0+rpt2+deb11u1 [461 kB] Get:3 http://archive.raspberrypi.org/debian bullseye/main armhf libpixman-1-0 armhf 0.40.0-1+rpt1 [482 kB] Get:4 http://archive.raspberrypi.org/debian bullseye/main armhf libcairo2 armhf 1.16.0-5+rpt1 [603 kB] Get:5 http://archive.raspberrypi.org/debian bullseye/main armhf libcairo-gobject2 armhf 1.16.0-5+rpt1 [125 kB] Get:6 http://archive.raspberrypi.org/debian bullseye/main armhf libswresample3 armhf 7:4.3.3-0+rpt2+deb11u1 [119 kB] Get:7 http://archive.raspberrypi.org/debian bullseye/main armhf libavcodec58 armhf 7:4.3.3-0+rpt2+deb11u1 [9,105 kB] Get:10 http://archive.raspberrypi.org/debian bullseye/main armhf libavresample4 armhf 7:4.3.3-0+rpt2+deb11u1 [105 kB] Get:11 http://archive.raspberrypi.org/debian bullseye/main armhf libpulsedsp armhf 14.2-2+rpi1 [50.3 kB] Get:12 http://archive.raspberrypi.org/debian bullseye/main armhf pulseaudio-utils armhf 14.2-2+rpi1 [82.2 kB] Get:13 http://archive.raspberrypi.org/debian bullseye/main armhf pulseaudio armhf 14.2-2+rpi1 [1,106 kB] Get:14 http://archive.raspberrypi.org/debian bullseye/main armhf libglapi-mesa armhf 20.3.5-1+rpt3+rpi1 [81.4 kB] Get:15 http://archive.raspberrypi.org/debian bullseye/main armhf libgl1-mesa-dri armhf 20.3.5-1+rpt3+rpi1 [5,885 kB] Get:18 http://archive.raspberrypi.org/debian bullseye/main armhf libglx-mesa0 armhf 20.3.5-1+rpt3+rpi1 [172 kB] Get:19 http://archive.raspberrypi.org/debian bullseye/main armhf mesa-va-drivers armhf 20.3.5-1+rpt3+rpi1 [2,173 kB] Get:8 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf x11-common all 1:7.7+22 [252 kB] Get:33 http://archive.raspberrypi.org/debian bullseye/main armhf mesa-vdpau-drivers armhf 20.3.5-1+rpt3+rpi1 [2,277 kB] Get:34 http://archive.raspberrypi.org/debian bullseye/main armhf mesa-vulkan-drivers armhf 20.3.5-1+rpt3+rpi1 [2,380 kB] Get:9 http://raspbian.freemirror.org/raspbian bullseye/main armhf libice6 armhf 2:1.0.10-1 [51.7 kB] Get:16 http://raspbian.freemirror.org/raspbian bullseye/main armhf libltdl7 armhf 2.4.6-15 [388 kB] Get:41 http://archive.raspberrypi.org/debian bullseye/main armhf pulseaudio-module-bluetooth armhf 14.2-2+rpi1 [87.9 kB] Get:17 http://raspbian.freemirror.org/raspbian bullseye/main armhf libasyncns0 armhf 0.8-6 [11.8 kB] Get:20 http://raspbian.freemirror.org/raspbian bullseye/main armhf libopus0 armhf 1.3.1-0.1 [166 kB] Get:21 http://raspbian.freemirror.org/raspbian bullseye/main armhf libvorbisenc2 armhf 1.3.7-1 [74.4 kB] Get:22 http://raspbian.freemirror.org/raspbian bullseye/main armhf libsndfile1 armhf 1.0.31-2 [171 kB] Get:23 http://raspbian.freemirror.org/raspbian bullseye/main armhf libsm6 armhf 2:1.2.3-1 [32.9 kB] Get:24 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libsoxr0 armhf 0.1.3-4+rpi1 [52.9 kB] Get:25 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libspeexdsp1 armhf 1.2~rc1.2-1.1 [42.9 kB] Get:26 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libtdb1 armhf 1.4.3-1+b1 [44.9 kB] Get:27 http://raspbian.freemirror.org/raspbian bullseye/main armhf libwebrtc-audio-processing1 armhf 0.3-1 [230 kB] Get:28 http://raspbian.freemirror.org/raspbian bullseye/main armhf libx11-xcb1 armhf 2:1.7.2-1 [203 kB] Get:29 http://raspbian.freemirror.org/raspbian bullseye/main armhf libxi6 armhf 2:1.7.10-1 [77.9 kB] Get:30 http://raspbian.freemirror.org/raspbian bullseye/main armhf libxtst6 armhf 2:1.2.3-1 [26.3 kB] Get:31 http://raspbian.freemirror.org/raspbian bullseye/main armhf libaom0 armhf 1.0.0.errata1-3 [793 kB] Get:32 http://raspbian.freemirror.org/raspbian bullseye/main armhf libva2 armhf 2.10.0-1 [60.9 kB] Get:35 http://raspbian.freemirror.org/raspbian bullseye/main armhf libva-drm2 armhf 2.10.0-1 [18.5 kB] Get:36 http://raspbian.freemirror.org/raspbian bullseye/main armhf libxfixes3 armhf 1:5.0.3-2 [20.7 kB] Get:37 http://raspbian.freemirror.org/raspbian bullseye/main armhf libva-x11-2 armhf 2.10.0-1 [21.9 kB] Get:38 http://raspbian.freemirror.org/raspbian bullseye/main armhf libvdpau1 armhf 1.4-3 [27.0 kB] Get:39 http://raspbian.freemirror.org/raspbian bullseye/main armhf ocl-icd-libopencl1 armhf 2.2.14-2 [39.9 kB] Get:40 http://raspbian.freemirror.org/raspbian bullseye/main armhf libxcb-render0 armhf 1.14-3 [110 kB] Get:42 http://raspbian.freemirror.org/raspbian bullseye/main armhf libxcb-shm0 armhf 1.14-3 [101 kB] Get:43 http://raspbian.freemirror.org/raspbian bullseye/main armhf libxrender1 armhf 1:0.9.10-1 [29.9 kB] Get:44 http://raspbian.freemirror.org/raspbian bullseye/main armhf libcodec2-0.9 armhf 0.9.2-4 [7,865 kB] Get:45 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libdav1d4 armhf 0.7.1-3+rpi1 [207 kB] Get:46 http://raspbian.freemirror.org/raspbian bullseye/main armhf libgsm1 armhf 1.0.18-2 [26.7 kB] Get:47 http://raspbian.freemirror.org/raspbian bullseye/main armhf libmp3lame0 armhf 3.100-3 [347 kB] Get:48 http://raspbian.freemirror.org/raspbian bullseye/main armhf libopenjp2-7 armhf 2.4.0-3 [150 kB] Get:49 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libgdk-pixbuf2.0-common all 2.42.2+dfsg-1 [320 kB] Get:50 http://raspbian.freemirror.org/raspbian bullseye/main armhf shared-mime-info armhf 2.0-1 [697 kB] Get:51 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libgdk-pixbuf-2.0-0 armhf 2.42.2+dfsg-1 [130 kB] Get:52 http://raspbian.freemirror.org/raspbian bullseye/main armhf fontconfig armhf 2.13.1-4.2 [416 kB] Get:53 http://raspbian.freemirror.org/raspbian bullseye/main armhf libgraphite2-3 armhf 1.3.14-1 [70.3 kB] Get:54 http://raspbian.freemirror.org/raspbian bullseye/main armhf libharfbuzz0b armhf 2.7.4-1 [1,422 kB] Get:55 http://raspbian.freemirror.org/raspbian bullseye/main armhf libthai-data all 0.1.28-3 [170 kB] Get:56 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libdatrie1 armhf 0.2.13-1+b1 [39.7 kB] Get:57 http://raspbian.freemirror.org/raspbian bullseye/main armhf libthai0 armhf 0.1.28-3 [51.0 kB] Get:58 http://raspbian.freemirror.org/raspbian bullseye/main armhf libpango-1.0-0 armhf 1.46.2-3 [172 kB] Get:59 http://raspbian.freemirror.org/raspbian bullseye/main armhf libpangoft2-1.0-0 armhf 1.46.2-3 [55.7 kB] Get:60 http://raspbian.freemirror.org/raspbian bullseye/main armhf libpangocairo-1.0-0 armhf 1.46.2-3 [46.7 kB] Get:61 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf librsvg2-2 armhf 2.50.3+dfsg-1 [2,057 kB] Get:62 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libshine3 armhf 3.1.1-2+b1 [22.0 kB] Get:63 http://raspbian.freemirror.org/raspbian bullseye/main armhf libsnappy1v5 armhf 1.1.8-1 [16.7 kB] Get:64 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libspeex1 armhf 1.2~rc1.2-1.1 [51.7 kB] Get:65 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libtheora0 armhf 1.1.1+dfsg.1-15 [148 kB] Get:66 http://raspbian.freemirror.org/raspbian bullseye/main armhf libtwolame0 armhf 0.4.0-2 [46.8 kB] Get:67 http://raspbian.freemirror.org/raspbian bullseye/main armhf libvpx6 armhf 1.9.0-1 [1,065 kB] Get:68 http://raspbian.freemirror.org/raspbian bullseye/main armhf libwavpack1 armhf 5.4.0-1 [74.2 kB] Get:69 http://raspbian.freemirror.org/raspbian bullseye/main armhf libwebpmux3 armhf 0.6.1-2.1 [94.4 kB] Get:70 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libx264-160 armhf 2:0.160.3011+gitcde9a93-2.1+rpi1 [677 kB] Get:71 http://raspbian.freemirror.org/raspbian bullseye/main armhf libx265-192 armhf 3.4-2 [560 kB] Get:72 http://raspbian.freemirror.org/raspbian bullseye/main armhf libxvidcore4 armhf 2:1.3.7-1 [196 kB] Get:73 http://raspbian.freemirror.org/raspbian bullseye/main armhf libzvbi-common all 0.2.35-18 [64.6 kB] Get:74 http://raspbian.freemirror.org/raspbian bullseye/main armhf libzvbi0 armhf 0.2.35-18 [240 kB] Get:75 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libjack-jackd2-0 armhf 1.9.17~dfsg-1 [239 kB] Get:76 http://raspbian.freemirror.org/raspbian bullseye/main armhf libasound2-plugins armhf 1.2.2-2 [67.9 kB] Get:77 http://raspbian.freemirror.org/raspbian bullseye/main armhf dbus-user-session armhf 1.12.20-2 [96.2 kB] Get:78 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libdrm-amdgpu1 armhf 2.4.104-1+rpi1 [27.4 kB] Get:79 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libdrm-nouveau2 armhf 2.4.104-1+rpi1 [25.0 kB] Get:80 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libdrm-radeon1 armhf 2.4.104-1+rpi1 [29.2 kB] Get:81 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libgdk-pixbuf2.0-bin armhf 2.42.2+dfsg-1 [24.5 kB] Get:82 http://raspbian.freemirror.org/raspbian bullseye/main armhf libglvnd0 armhf 1.3.2-1 [55.2 kB] Get:83 http://raspbian.freemirror.org/raspbian bullseye/main armhf libxcb-dri2-0 armhf 1.14-3 [103 kB] Get:84 http://raspbian.freemirror.org/raspbian bullseye/main armhf libxcb-dri3-0 armhf 1.14-3 [102 kB] Get:85 http://raspbian.freemirror.org/raspbian bullseye/main armhf libxcb-glx0 armhf 1.14-3 [117 kB] Get:86 http://raspbian.freemirror.org/raspbian bullseye/main armhf libxcb-present0 armhf 1.14-3 [101 kB] Get:87 http://raspbian.freemirror.org/raspbian bullseye/main armhf libxcb-sync1 armhf 1.14-3 [104 kB] Get:88 http://raspbian.freemirror.org/raspbian bullseye/main armhf libxcb-xfixes0 armhf 1.14-3 [105 kB] Get:89 http://raspbian.freemirror.org/raspbian bullseye/main armhf libxdamage1 armhf 1:1.1.5-2 [15.2 kB] Get:90 http://raspbian.freemirror.org/raspbian bullseye/main armhf libxshmfence1 armhf 1.3-1 [8,636 B] Get:91 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libxxf86vm1 armhf 1:1.1.4-1+b2 [20.1 kB] Get:92 http://raspbian.freemirror.org/raspbian bullseye/main armhf libz3-4 armhf 4.8.10-1 [5,689 kB] Get:93 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libllvm11 armhf 1:11.0.1-2+rpi1 [15.6 MB] Get:94 http://raspbian.freemirror.org/raspbian bullseye/main armhf libsensors-config all 1:3.6.0-7 [32.3 kB] Get:95 http://raspbian.freemirror.org/raspbian bullseye/main armhf libsensors5 armhf 1:3.6.0-7 [49.6 kB] Get:96 http://raspbian.freemirror.org/raspbian bullseye/main armhf libvulkan1 armhf 1.2.162.0-1 [82.5 kB] Get:97 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libwayland-client0 armhf 1.18.0-2~exp1.1 [22.1 kB] Get:98 http://raspbian.freemirror.org/raspbian bullseye/main armhf libglx0 armhf 1.3.2-1 [25.8 kB] Get:99 http://raspbian.freemirror.org/raspbian bullseye/main armhf libgl1 armhf 1.3.2-1 [106 kB] Get:100 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf librsvg2-common armhf 2.50.3+dfsg-1 [30.6 kB] Get:101 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf libvdpau-va-gl1 armhf 0.4.2-1+b1 [59.4 kB] Get:102 http://raspbian.freemirror.org/raspbian bullseye/main armhf libxcb-randr0 armhf 1.14-3 [112 kB] Get:103 http://raspbian.freemirror.org/raspbian bullseye/main armhf rtkit armhf 0.13-4 [31.6 kB] Get:104 http://raspbian.freemirror.org/raspbian bullseye/main armhf va-driver-all armhf 2.10.0-1 [15.3 kB] Get:105 http://raspbian.freemirror.org/raspbian bullseye/main armhf vdpau-driver-all armhf 1.4-3 [8,524 B] Fetched 69.2 MB in 38s (1,836 kB/s) Extracting templates from packages: 100% Selecting previously unselected package x11-common. (Reading database ... 41552 files and directories currently installed.) Preparing to unpack .../000-x11-common_1%3a7.7+22_all.deb ... Unpacking x11-common (1:7.7+22) ... Selecting previously unselected package libice6:armhf. Preparing to unpack .../001-libice6_2%3a1.0.10-1_armhf.deb ... Unpacking libice6:armhf (2:1.0.10-1) ... Selecting previously unselected package libltdl7:armhf. Preparing to unpack .../002-libltdl7_2.4.6-15_armhf.deb ... Unpacking libltdl7:armhf (2.4.6-15) ... Selecting previously unselected package libasyncns0:armhf. Preparing to unpack .../003-libasyncns0_0.8-6_armhf.deb ... Unpacking libasyncns0:armhf (0.8-6) ... Selecting previously unselected package libopus0:armhf. Preparing to unpack .../004-libopus0_1.3.1-0.1_armhf.deb ... Unpacking libopus0:armhf (1.3.1-0.1) ... Selecting previously unselected package libvorbisenc2:armhf. Preparing to unpack .../005-libvorbisenc2_1.3.7-1_armhf.deb ... Unpacking libvorbisenc2:armhf (1.3.7-1) ... Selecting previously unselected package libsndfile1:armhf. Preparing to unpack .../006-libsndfile1_1.0.31-2_armhf.deb ... Unpacking libsndfile1:armhf (1.0.31-2) ... Selecting previously unselected package libpulse0:armhf. Preparing to unpack .../007-libpulse0_14.2-2+rpi1_armhf.deb ... Unpacking libpulse0:armhf (14.2-2+rpi1) ... Selecting previously unselected package libsm6:armhf. Preparing to unpack .../008-libsm6_2%3a1.2.3-1_armhf.deb ... Unpacking libsm6:armhf (2:1.2.3-1) ... Selecting previously unselected package libsoxr0:armhf. Preparing to unpack .../009-libsoxr0_0.1.3-4+rpi1_armhf.deb ... Unpacking libsoxr0:armhf (0.1.3-4+rpi1) ... Selecting previously unselected package libspeexdsp1:armhf. Preparing to unpack .../010-libspeexdsp1_1.2~rc1.2-1.1_armhf.deb ... Unpacking libspeexdsp1:armhf (1.2~rc1.2-1.1) ... Selecting previously unselected package libtdb1:armhf. Preparing to unpack .../011-libtdb1_1.4.3-1+b1_armhf.deb ... Unpacking libtdb1:armhf (1.4.3-1+b1) ... Selecting previously unselected package libwebrtc-audio-processing1:armhf. Preparing to unpack .../012-libwebrtc-audio-processing1_0.3-1_armhf.deb ... Unpacking libwebrtc-audio-processing1:armhf (0.3-1) ... Selecting previously unselected package libx11-xcb1:armhf. Preparing to unpack .../013-libx11-xcb1_2%3a1.7.2-1_armhf.deb ... Unpacking libx11-xcb1:armhf (2:1.7.2-1) ... Selecting previously unselected package libxi6:armhf. Preparing to unpack .../014-libxi6_2%3a1.7.10-1_armhf.deb ... Unpacking libxi6:armhf (2:1.7.10-1) ... Selecting previously unselected package libxtst6:armhf. Preparing to unpack .../015-libxtst6_2%3a1.2.3-1_armhf.deb ... Unpacking libxtst6:armhf (2:1.2.3-1) ... Selecting previously unselected package libaom0:armhf. Preparing to unpack .../016-libaom0_1.0.0.errata1-3_armhf.deb ... Unpacking libaom0:armhf (1.0.0.errata1-3) ... Selecting previously unselected package libva2:armhf. Preparing to unpack .../017-libva2_2.10.0-1_armhf.deb ... Unpacking libva2:armhf (2.10.0-1) ... Selecting previously unselected package libva-drm2:armhf. Preparing to unpack .../018-libva-drm2_2.10.0-1_armhf.deb ... Unpacking libva-drm2:armhf (2.10.0-1) ... Selecting previously unselected package libxfixes3:armhf. Preparing to unpack .../019-libxfixes3_1%3a5.0.3-2_armhf.deb ... Unpacking libxfixes3:armhf (1:5.0.3-2) ... Selecting previously unselected package libva-x11-2:armhf. Preparing to unpack .../020-libva-x11-2_2.10.0-1_armhf.deb ... Unpacking libva-x11-2:armhf (2.10.0-1) ... Selecting previously unselected package libvdpau1:armhf. Preparing to unpack .../021-libvdpau1_1.4-3_armhf.deb ... Unpacking libvdpau1:armhf (1.4-3) ... Selecting previously unselected package ocl-icd-libopencl1:armhf. Preparing to unpack .../022-ocl-icd-libopencl1_2.2.14-2_armhf.deb ... Unpacking ocl-icd-libopencl1:armhf (2.2.14-2) ... Selecting previously unselected package libavutil56:armhf. Preparing to unpack .../023-libavutil56_7%3a4.3.3-0+rpt2+deb11u1_armhf.deb ... Unpacking libavutil56:armhf (7:4.3.3-0+rpt2+deb11u1) ... Selecting previously unselected package libpixman-1-0:armhf. Preparing to unpack .../024-libpixman-1-0_0.40.0-1+rpt1_armhf.deb ... Unpacking libpixman-1-0:armhf (0.40.0-1+rpt1) ... Selecting previously unselected package libxcb-render0:armhf. Preparing to unpack .../025-libxcb-render0_1.14-3_armhf.deb ... Unpacking libxcb-render0:armhf (1.14-3) ... Selecting previously unselected package libxcb-shm0:armhf. Preparing to unpack .../026-libxcb-shm0_1.14-3_armhf.deb ... Unpacking libxcb-shm0:armhf (1.14-3) ... Selecting previously unselected package libxrender1:armhf. Preparing to unpack .../027-libxrender1_1%3a0.9.10-1_armhf.deb ... Unpacking libxrender1:armhf (1:0.9.10-1) ... Selecting previously unselected package libcairo2:armhf. Preparing to unpack .../028-libcairo2_1.16.0-5+rpt1_armhf.deb ... Unpacking libcairo2:armhf (1.16.0-5+rpt1) ... Selecting previously unselected package libcodec2-0.9:armhf. Preparing to unpack .../029-libcodec2-0.9_0.9.2-4_armhf.deb ... Unpacking libcodec2-0.9:armhf (0.9.2-4) ... Selecting previously unselected package libdav1d4:armhf. Preparing to unpack .../030-libdav1d4_0.7.1-3+rpi1_armhf.deb ... Unpacking libdav1d4:armhf (0.7.1-3+rpi1) ... Selecting previously unselected package libgsm1:armhf. Preparing to unpack .../031-libgsm1_1.0.18-2_armhf.deb ... Unpacking libgsm1:armhf (1.0.18-2) ... Selecting previously unselected package libmp3lame0:armhf. Preparing to unpack .../032-libmp3lame0_3.100-3_armhf.deb ... Unpacking libmp3lame0:armhf (3.100-3) ... Selecting previously unselected package libopenjp2-7:armhf. Preparing to unpack .../033-libopenjp2-7_2.4.0-3_armhf.deb ... Unpacking libopenjp2-7:armhf (2.4.0-3) ... Selecting previously unselected package libcairo-gobject2:armhf. Preparing to unpack .../034-libcairo-gobject2_1.16.0-5+rpt1_armhf.deb ... Unpacking libcairo-gobject2:armhf (1.16.0-5+rpt1) ... Selecting previously unselected package libgdk-pixbuf2.0-common. Preparing to unpack .../035-libgdk-pixbuf2.0-common_2.42.2+dfsg-1_all.deb ... Unpacking libgdk-pixbuf2.0-common (2.42.2+dfsg-1) ... Selecting previously unselected package shared-mime-info. Preparing to unpack .../036-shared-mime-info_2.0-1_armhf.deb ... Unpacking shared-mime-info (2.0-1) ... Selecting previously unselected package libgdk-pixbuf-2.0-0:armhf. Preparing to unpack .../037-libgdk-pixbuf-2.0-0_2.42.2+dfsg-1_armhf.deb ... Unpacking libgdk-pixbuf-2.0-0:armhf (2.42.2+dfsg-1) ... Selecting previously unselected package fontconfig. Preparing to unpack .../038-fontconfig_2.13.1-4.2_armhf.deb ... Unpacking fontconfig (2.13.1-4.2) ... Selecting previously unselected package libgraphite2-3:armhf. Preparing to unpack .../039-libgraphite2-3_1.3.14-1_armhf.deb ... Unpacking libgraphite2-3:armhf (1.3.14-1) ... Selecting previously unselected package libharfbuzz0b:armhf. Preparing to unpack .../040-libharfbuzz0b_2.7.4-1_armhf.deb ... Unpacking libharfbuzz0b:armhf (2.7.4-1) ... Selecting previously unselected package libthai-data. Preparing to unpack .../041-libthai-data_0.1.28-3_all.deb ... Unpacking libthai-data (0.1.28-3) ... Selecting previously unselected package libdatrie1:armhf. Preparing to unpack .../042-libdatrie1_0.2.13-1+b1_armhf.deb ... Unpacking libdatrie1:armhf (0.2.13-1+b1) ... Selecting previously unselected package libthai0:armhf. Preparing to unpack .../043-libthai0_0.1.28-3_armhf.deb ... Unpacking libthai0:armhf (0.1.28-3) ... Selecting previously unselected package libpango-1.0-0:armhf. Preparing to unpack .../044-libpango-1.0-0_1.46.2-3_armhf.deb ... Unpacking libpango-1.0-0:armhf (1.46.2-3) ... Selecting previously unselected package libpangoft2-1.0-0:armhf. Preparing to unpack .../045-libpangoft2-1.0-0_1.46.2-3_armhf.deb ... Unpacking libpangoft2-1.0-0:armhf (1.46.2-3) ... Selecting previously unselected package libpangocairo-1.0-0:armhf. Preparing to unpack .../046-libpangocairo-1.0-0_1.46.2-3_armhf.deb ... Unpacking libpangocairo-1.0-0:armhf (1.46.2-3) ... Selecting previously unselected package librsvg2-2:armhf. Preparing to unpack .../047-librsvg2-2_2.50.3+dfsg-1_armhf.deb ... Unpacking librsvg2-2:armhf (2.50.3+dfsg-1) ... Selecting previously unselected package libshine3:armhf. Preparing to unpack .../048-libshine3_3.1.1-2+b1_armhf.deb ... Unpacking libshine3:armhf (3.1.1-2+b1) ... Selecting previously unselected package libsnappy1v5:armhf. Preparing to unpack .../049-libsnappy1v5_1.1.8-1_armhf.deb ... Unpacking libsnappy1v5:armhf (1.1.8-1) ... Selecting previously unselected package libspeex1:armhf. Preparing to unpack .../050-libspeex1_1.2~rc1.2-1.1_armhf.deb ... Unpacking libspeex1:armhf (1.2~rc1.2-1.1) ... Selecting previously unselected package libswresample3:armhf. Preparing to unpack .../051-libswresample3_7%3a4.3.3-0+rpt2+deb11u1_armhf.deb ... Unpacking libswresample3:armhf (7:4.3.3-0+rpt2+deb11u1) ... Selecting previously unselected package libtheora0:armhf. Preparing to unpack .../052-libtheora0_1.1.1+dfsg.1-15_armhf.deb ... Unpacking libtheora0:armhf (1.1.1+dfsg.1-15) ... Selecting previously unselected package libtwolame0:armhf. Preparing to unpack .../053-libtwolame0_0.4.0-2_armhf.deb ... Unpacking libtwolame0:armhf (0.4.0-2) ... Selecting previously unselected package libvpx6:armhf. Preparing to unpack .../054-libvpx6_1.9.0-1_armhf.deb ... Unpacking libvpx6:armhf (1.9.0-1) ... Selecting previously unselected package libwavpack1:armhf. Preparing to unpack .../055-libwavpack1_5.4.0-1_armhf.deb ...pulseaudio tui mixer Unpacking libx264-160:armhf (2:0.160.3011+gitcde9a93-2.1+rpi1) ... Selecting previously unselected package libx265-192:armhf. Preparing to unpack .../058-libx265-192_3.4-2_armhf.deb ... Unpacking libx265-192:armhf (3.4-2) ... Selecting previously unselected package libxvidcore4:armhf. Preparing to unpack .../059-libxvidcore4_2%3a1.3.7-1_armhf.deb ... Unpacking libxvidcore4:armhf (2:1.3.7-1) ... Selecting previously unselected package libzvbi-common. Preparing to unpack .../060-libzvbi-common_0.2.35-18_all.deb ... Unpacking libzvbi-common (0.2.35-18) ... Selecting previously unselected package libzvbi0:armhf. Preparing to unpack .../061-libzvbi0_0.2.35-18_armhf.deb ... Unpacking libzvbi0:armhf (0.2.35-18) ... Selecting previously unselected package libavcodec58:armhf. Preparing to unpack .../062-libavcodec58_7%3a4.3.3-0+rpt2+deb11u1_armhf.deb ... Unpacking libavcodec58:armhf (7:4.3.3-0+rpt2+deb11u1) ... Selecting previously unselected package libavresample4:armhf. Preparing to unpack .../063-libavresample4_7%3a4.3.3-0+rpt2+deb11u1_armhf.deb ... Unpacking libavresample4:armhf (7:4.3.3-0+rpt2+deb11u1) ... Selecting previously unselected package libjack-jackd2-0:armhf. Preparing to unpack .../064-libjack-jackd2-0_1.9.17~dfsg-1_armhf.deb ... Unpacking libjack-jackd2-0:armhf (1.9.17~dfsg-1) ... Selecting previously unselected package libasound2-plugins:armhf. Preparing to unpack .../065-libasound2-plugins_1.2.2-2_armhf.deb ... Unpacking libasound2-plugins:armhf (1.2.2-2) ... Selecting previously unselected package libpulsedsp:armhf. Preparing to unpack .../066-libpulsedsp_14.2-2+rpi1_armhf.deb ... Unpacking libpulsedsp:armhf (14.2-2+rpi1) ... Selecting previously unselected package pulseaudio-utils. Preparing to unpack .../067-pulseaudio-utils_14.2-2+rpi1_armhf.deb ... Unpacking pulseaudio-utils (14.2-2+rpi1) ... Selecting previously unselected package pulseaudio. Preparing to unpack .../068-pulseaudio_14.2-2+rpi1_armhf.deb ... Unpacking pulseaudio (14.2-2+rpi1) ... Selecting previously unselected package dbus-user-session. Preparing to unpack .../069-dbus-user-session_1.12.20-2_armhf.deb ... Unpacking dbus-user-session (1.12.20-2) ... Selecting previously unselected package libdrm-amdgpu1:armhf. Preparing to unpack .../070-libdrm-amdgpu1_2.4.104-1+rpi1_armhf.deb ... Unpacking libdrm-amdgpu1:armhf (2.4.104-1+rpi1) ... Selecting previously unselected package libdrm-nouveau2:armhf. Preparing to unpack .../071-libdrm-nouveau2_2.4.104-1+rpi1_armhf.deb ... Unpacking libdrm-nouveau2:armhf (2.4.104-1+rpi1) ... Selecting previously unselected package libdrm-radeon1:armhf. Preparing to unpack .../072-libdrm-radeon1_2.4.104-1+rpi1_armhf.deb ... Unpacking libdrm-radeon1:armhf (2.4.104-1+rpi1) ... Selecting previously unselected package libgdk-pixbuf2.0-bin. Preparing to unpack .../073-libgdk-pixbuf2.0-bin_2.42.2+dfsg-1_armhf.deb ... Unpacking libgdk-pixbuf2.0-bin (2.42.2+dfsg-1) ... Selecting previously unselected package libglvnd0:armhf. Preparing to unpack .../074-libglvnd0_1.3.2-1_armhf.deb ... Unpacking libglvnd0:armhf (1.3.2-1) ... Selecting previously unselected package libglapi-mesa:armhf. Preparing to unpack .../075-libglapi-mesa_20.3.5-1+rpt3+rpi1_armhf.deb ... Unpacking libglapi-mesa:armhf (20.3.5-1+rpt3+rpi1) ... Selecting previously unselected package libxcb-dri2-0:armhf. Preparing to unpack .../076-libxcb-dri2-0_1.14-3_armhf.deb ... Unpacking libxcb-dri2-0:armhf (1.14-3) ... Selecting previously unselected package libxcb-dri3-0:armhf. Preparing to unpack .../077-libxcb-dri3-0_1.14-3_armhf.deb ... Unpacking libxcb-dri3-0:armhf (1.14-3) ... Selecting previously unselected package libxcb-glx0:armhf. Preparing to unpack .../078-libxcb-glx0_1.14-3_armhf.deb ... Unpacking libxcb-glx0:armhf (1.14-3) ... Selecting previously unselected package libxcb-present0:armhf. Preparing to unpack .../079-libxcb-present0_1.14-3_armhf.deb ... Unpacking libxcb-present0:armhf (1.14-3) ... Selecting previously unselected package libxcb-sync1:armhf. Preparing to unpack .../080-libxcb-sync1_1.14-3_armhf.deb ... Unpacking libxcb-sync1:armhf (1.14-3) ... Selecting previously unselected package libxcb-xfixes0:armhf. Preparing to unpack .../081-libxcb-xfixes0_1.14-3_armhf.deb ... Unpacking libxcb-xfixes0:armhf (1.14-3) ... Selecting previously unselected package libxdamage1:armhf. Preparing to unpack .../082-libxdamage1_1%3a1.1.5-2_armhf.deb ... Unpacking libxdamage1:armhf (1:1.1.5-2) ... Selecting previously unselected package libxshmfence1:armhf. Preparing to unpack .../083-libxshmfence1_1.3-1_armhf.deb ... Unpacking libxshmfence1:armhf (1.3-1) ... Selecting previously unselected package libxxf86vm1:armhf. Preparing to unpack .../084-libxxf86vm1_1%3a1.1.4-1+b2_armhf.deb ... Unpacking libxxf86vm1:armhf (1:1.1.4-1+b2) ... Selecting previously unselected package libz3-4:armhf. Preparing to unpack .../085-libz3-4_4.8.10-1_armhf.deb ... Unpacking libz3-4:armhf (4.8.10-1) ... Selecting previously unselected package libllvm11:armhf. Preparing to unpack .../086-libllvm11_1%3a11.0.1-2+rpi1_armhf.deb ... Unpacking libllvm11:armhf (1:11.0.1-2+rpi1) ... Selecting previously unselected package libsensors-config. Preparing to unpack .../087-libsensors-config_1%3a3.6.0-7_all.deb ... Unpacking libsensors-config (1:3.6.0-7) ... Selecting previously unselected package libsensors5:armhf. Preparing to unpack .../088-libsensors5_1%3a3.6.0-7_armhf.deb ... Unpacking libsensors5:armhf (1:3.6.0-7) ... Selecting previously unselected package libvulkan1:armhf. Preparing to unpack .../089-libvulkan1_1.2.162.0-1_armhf.deb ... Unpacking libvulkan1:armhf (1.2.162.0-1) ... Selecting previously unselected package libwayland-client0:armhf. Preparing to unpack .../090-libwayland-client0_1.18.0-2~exp1.1_armhf.deb ... Unpacking libwayland-client0:armhf (1.18.0-2~exp1.1) ... Selecting previously unselected package libgl1-mesa-dri:armhf. Preparing to unpack .../091-libgl1-mesa-dri_20.3.5-1+rpt3+rpi1_armhf.deb ... Unpacking libgl1-mesa-dri:armhf (20.3.5-1+rpt3+rpi1) ... Selecting previously unselected package libglx-mesa0:armhf. Preparing to unpack .../092-libglx-mesa0_20.3.5-1+rpt3+rpi1_armhf.deb ... Unpacking libglx-mesa0:armhf (20.3.5-1+rpt3+rpi1) ... Selecting previously unselected package libglx0:armhf. Preparing to unpack .../093-libglx0_1.3.2-1_armhf.deb ... Unpacking libglx0:armhf (1.3.2-1) ... Selecting previously unselected package libgl1:armhf. Preparing to unpack .../094-libgl1_1.3.2-1_armhf.deb ... Unpacking libgl1:armhf (1.3.2-1) ... Selecting previously unselected package librsvg2-common:armhf. Preparing to unpack .../095-librsvg2-common_2.50.3+dfsg-1_armhf.deb ... Unpacking librsvg2-common:armhf (2.50.3+dfsg-1) ... Selecting previously unselected package libvdpau-va-gl1:armhf. Preparing to unpack .../096-libvdpau-va-gl1_0.4.2-1+b1_armhf.deb ... Unpacking libvdpau-va-gl1:armhf (0.4.2-1+b1) ... Selecting previously unselected package libxcb-randr0:armhf. Preparing to unpack .../097-libxcb-randr0_1.14-3_armhf.deb ... Unpacking libxcb-randr0:armhf (1.14-3) ... Selecting previously unselected package mesa-va-drivers:armhf. Preparing to unpack .../098-mesa-va-drivers_20.3.5-1+rpt3+rpi1_armhf.deb ... Unpacking mesa-va-drivers:armhf (20.3.5-1+rpt3+rpi1) ... Selecting previously unselected package mesa-vdpau-drivers:armhf. Preparing to unpack .../099-mesa-vdpau-drivers_20.3.5-1+rpt3+rpi1_armhf.deb ... Unpacking mesa-vdpau-drivers:armhf (20.3.5-1+rpt3+rpi1) ... Selecting previously unselected package mesa-vulkan-drivers:armhf. Preparing to unpack .../100-mesa-vulkan-drivers_20.3.5-1+rpt3+rpi1_armhf.deb ... Unpacking mesa-vulkan-drivers:armhf (20.3.5-1+rpt3+rpi1) ... Selecting previously unselected package pulseaudio-module-bluetooth. Preparing to unpack .../101-pulseaudio-module-bluetooth_14.2-2+rpi1_armhf.deb ... Unpacking pulseaudio-module-bluetooth (14.2-2+rpi1) ... Selecting previously unselected package rtkit. Preparing to unpack .../102-rtkit_0.13-4_armhf.deb ... Unpacking rtkit (0.13-4) ... Selecting previously unselected package va-driver-all:armhf. Preparing to unpack .../103-va-driver-all_2.10.0-1_armhf.deb ... Unpacking va-driver-all:armhf (2.10.0-1) ... Selecting previously unselected package vdpau-driver-all:armhf. Preparing to unpack .../104-vdpau-driver-all_1.4-3_armhf.deb ... Unpacking vdpau-driver-all:armhf (1.4-3) ... Setting up libgraphite2-3:armhf (1.3.14-1) ... Setting up libxcb-dri3-0:armhf (1.14-3) ... Setting up libpixman-1-0:armhf (0.40.0-1+rpt1) ... Setting up libx11-xcb1:armhf (2:1.7.2-1) ... Setting up fontconfig (2.13.1-4.2) ... Regenerating fonts cache... done. Setting up rtkit (0.13-4) ... Setting up libdrm-nouveau2:armhf (2.4.104-1+rpi1) ... Setting up libxdamage1:armhf (1:1.1.5-2) ... Setting up libxcb-xfixes0:armhf (1.14-3) ... Setting up libspeex1:armhf (1.2~rc1.2-1.1) ... Setting up libshine3:armhf (3.1.1-2+b1) ... Setting up libxi6:armhf (2:1.7.10-1) ... Setting up libtwolame0:armhf (0.4.0-2) ... Setting up libxrender1:armhf (1:0.9.10-1) ... Setting up libdatrie1:armhf (0.2.13-1+b1) ... Setting up libgsm1:armhf (1.0.18-2) ... Setting up libxcb-render0:armhf (1.14-3) ... Setting up libsoxr0:armhf (0.1.3-4+rpi1) ... Setting up libdrm-radeon1:armhf (2.4.104-1+rpi1) ... Setting up libglvnd0:armhf (1.3.2-1) ... Setting up libtdb1:armhf (1.4.3-1+b1) ... Setting up libxcb-glx0:armhf (1.14-3) ... Setting up libaom0:armhf (1.0.0.errata1-3) ... Setting up libgdk-pixbuf2.0-common (2.42.2+dfsg-1) ... Setting up x11-common (1:7.7+22) ... Setting up libsensors-config (1:3.6.0-7) ... Setting up libx265-192:armhf (3.4-2) ... Setting up libwebrtc-audio-processing1:armhf (0.3-1) ... Setting up libxcb-shm0:armhf (1.14-3) ... Setting up libxvidcore4:armhf (2:1.3.7-1) ... Setting up libx264-160:armhf (2:0.160.3011+gitcde9a93-2.1+rpi1) ... Setting up libcairo2:armhf (1.16.0-5+rpt1) ... Setting up libxxf86vm1:armhf (1:1.1.4-1+b2) ... Setting up libsnappy1v5:armhf (1.1.8-1) ... Setting up libxcb-present0:armhf (1.14-3) ... Setting up dbus-user-session (1.12.20-2) ... Setting up libz3-4:armhf (4.8.10-1) ... Setting up libllvm11:armhf (1:11.0.1-2+rpi1) ... Setting up libva2:armhf (2.10.0-1) ... Setting up libxfixes3:armhf (1:5.0.3-2) ... Setting up libxcb-sync1:armhf (1.14-3) ... Setting up libcodec2-0.9:armhf (0.9.2-4) ... Setting up libopus0:armhf (1.3.1-0.1) ... Setting up shared-mime-info (2.0-1) ... Setting up libsensors5:armhf (1:3.6.0-7) ... Setting up libltdl7:armhf (2.4.6-15) ... Setting up libglapi-mesa:armhf (20.3.5-1+rpt3+rpi1) ... Setting up libvulkan1:armhf (1.2.162.0-1) ... Setting up libxcb-dri2-0:armhf (1.14-3) ... Setting up libjack-jackd2-0:armhf (1.9.17~dfsg-1) ... Setting up libva-drm2:armhf (2.10.0-1) ... Setting up ocl-icd-libopencl1:armhf (2.2.14-2) ... Setting up libasyncns0:armhf (0.8-6) ... Setting up libxshmfence1:armhf (1.3-1) ... Setting up libvpx6:armhf (1.9.0-1) ... Setting up libvdpau1:armhf (1.4-3) ... Setting up libwavpack1:armhf (5.4.0-1) ... Setting up libxcb-randr0:armhf (1.14-3) ... Setting up libtheora0:armhf (1.1.1+dfsg.1-15) ... Setting up libspeexdsp1:armhf (1.2~rc1.2-1.1) ... Setting up libdav1d4:armhf (0.7.1-3+rpi1) ... Setting up libopenjp2-7:armhf (2.4.0-3) ... Setting up libharfbuzz0b:armhf (2.7.4-1) ... Setting up libthai-data (0.1.28-3) ... Setting up libgdk-pixbuf-2.0-0:armhf (2.42.2+dfsg-1) ... Setting up libcairo-gobject2:armhf (1.16.0-5+rpt1) ... Setting up libva-x11-2:armhf (2.10.0-1) ... Setting up libwebpmux3:armhf (0.6.1-2.1) ... Setting up libzvbi-common (0.2.35-18) ... Setting up libmp3lame0:armhf (3.100-3) ...pi@tarte:~ $ bluetoothctl disconnect 30:21:5C:00:01:02 Attempting to disconnect from 30:21:5C:00:01:02 Successful disconnected pi@tarte:~ $ bluetoothctl connect 30:21:5C:00:01:02 Attempting to connect to 30:21:5C:00:01:02 [CHG] Device 30:21:5C:00:01:02 Connected: yes Connection successful pi@tarte:~ $ paplay -v sound/sound-off-01.wav Opening a playback stream with sample specification 's16le 2ch 44100Hz' and channel map 'front-left,front-right'. Connection established. Stream successfully created. Buffer metrics: maxlength=4194304, tlength=352800, prebuf=349276, minreq=3528 Using sample spec 's16le 2ch 44100Hz', channel map 'front-left,front-right'. Connected to device bluez_sink.30_21_5C_00_01_02.a2dp_sink (index: 2, suspended: no). Stream started. ^CGot signal, exiting.cy: 2025893 usec. ... Setting up libzvbi0:armhf (0.2.35-18) ... Setting up libice6:armhf (2:1.0.10-1) ... Setting up libxtst6:armhf (2:1.2.3-1) ... Setting up libgl1-mesa-dri:armhf (20.3.5-1+rpt3+rpi1) ... Setting up libavutil56:armhf (7:4.3.3-0+rpt2+deb11u1) ... Setting up libthai0:armhf (0.1.28-3) ... Setting up libgdk-pixbuf2.0-bin (2.42.2+dfsg-1) ... Setting up libsndfile1:armhf (1.0.31-2) ... Setting up mesa-va-drivers:armhf (20.3.5-1+rpt3+rpi1) ... Setting up libsm6:armhf (2:1.2.3-1) ... Setting up libglx-mesa0:armhf (20.3.5-1+rpt3+rpi1) ... Setting up libglx0:armhf (1.3.2-1) ... Setting up libpulse0:armhf (14.2-2+rpi1) ... Setting up libpango-1.0-0:armhf (1.46.2-3) ... Setting up libpulsedsp:armhf (14.2-2+rpi1) ... Setting up libswresample3:armhf (7:4.3.3-0+rpt2+deb11u1) ... Setting up libavresample4:armhf (7:4.3.3-0+rpt2+deb11u1) ... Setting up libgl1:armhf (1.3.2-1) ... Setting up va-driver-all:armhf (2.10.0-1) ... Setting up pulseaudio-utils (14.2-2+rpi1) ... Setting up libpangoft2-1.0-0:armhf (1.46.2-3) ... Setting up libvdpau-va-gl1:armhf (0.4.2-1+b1) ... Setting up libpangocairo-1.0-0:armhf (1.46.2-3) ... Setting up librsvg2-2:armhf (2.50.3+dfsg-1) ... Setting up librsvg2-common:armhf (2.50.3+dfsg-1) ... Setting up vdpau-driver-all:armhf (1.4-3) ... Setting up libavcodec58:armhf (7:4.3.3-0+rpt2+deb11u1) ... Setting up libasound2-plugins:armhf (1.2.2-2) ... Setting up pulseaudio (14.2-2+rpi1) ... Adding user pulse to group audio Created symlink /etc/systemd/user/default.target.wants/pulseaudio.service → /usr/lib/systemd/user/pulseaudio.service. Created symlink /etc/systemd/user/sockets.target.wants/pulseaudio.socket → /usr/lib/systemd/user/pulseaudio.socket. Setting up pulseaudio-module-bluetooth (14.2-2+rpi1) ... Processing triggers for man-db (2.9.4-2) ... Processing triggers for dbus (1.12.20-2) ... Processing triggers for libc-bin (2.31-13+rpt2+rpi1+deb11u2) ... Processing triggers for libgdk-pixbuf-2.0-0:armhf (2.42.2+dfsg-1) ... pi@tarte:~ $

Packages from the Mesa 3D Graphics Library? Clearly, this contains all sorts of packages that do not really belong in the Lite version of the OS. Is there a leaner package definition somewhere? This is something to investigate later on. In the meantime, let's prove that this does work.

pi@tarte:~ $ systemctl --user status pulseaudio ● pulseaudio.service - Sound Service Loaded: loaded (/usr/lib/systemd/user/pulseaudio.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2022-03-16 21:50:32 ADT; 3min 46s ago TriggeredBy: ● pulseaudio.socket Main PID: 713 (pulseaudio) Tasks: 2 (limit: 1597) CPU: 455ms CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/pulseaudio.service └─713 /usr/bin/pulseaudio --daemonize=no --log-target=journal Mar 16 21:50:27 tarte systemd[693]: Starting Sound Service... Mar 16 21:50:32 tarte pulseaudio[713]: Failed to find a working profile. Mar 16 21:50:32 tarte pulseaudio[713]: Failed to load module "module-alsa-card" (argument: "device_id="1" name="platform-3f902000.hdmi" card_name="alsa_card.platform-3f902000.hdm> Mar 16 21:50:32 tarte systemd[693]: Started Sound Service.

The service is running, so I connected to a Bluetooth® speaker and then used the PulseAudio play utility to listen to a sound file on the Raspberry Pi previously copied onto the device.

pi@tarte:~ $ bluetoothctl connect 30:21:5C:00:01:02 Attempting to connect to 30:21:5C:00:01:02 [CHG] Device 30:21:5C:00:01:02 Connected: yes Connection successful pi@tarte:~ $ paplay -v sound/sound-01.wav Opening a playback stream with sample specification 's16le 2ch 44100Hz' and channel map 'front-left,front-right'. Connection established. Stream successfully created. Buffer metrics: maxlength=4194304, tlength=352800, prebuf=349276, minreq=3528 Using sample spec 's16le 2ch 44100Hz', channel map 'front-left,front-right'. Connected to device bluez_sink.30_21_5C_00_01_02.a2dp_sink (index: 2, suspended: no). Stream started. ^CGot signal, exiting.cy: 2025893 usec.

I must admit that was impressive. No command-line options to define the sound card was needed, it just worked. The volume can be adjusted in an another session.

pi@tarte:~ $ pactl list short sinks 0 alsa_output.platform-bcm2835_audio.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED 1 bluez_sink.30_21_5C_00_01_02.a2dp_sink module-bluez5-device.c s16le 2ch 44100Hz RUNNING pi@tarte:~ $ pactl set-sink-volume 1 -30%

More info at How to control your Pulseaudio sound volume using the command line by John Cartwright July 22, 2020 . A web search with the "pulseaudio tui mixer" phrase turns up possible equivalents to alsamixer. But the fact is that ALSA is still the sound back end of the Pi and its utilities, such as aplay, alsamixer and so on, work without having to specify the device.

The Pi can be a "sink" meaning that another Bluetooth® device such as a tablet or phone can send an audio stream to the Pi which can in turn play it on a speaker connected to the 3.1 mm audio jack or the HDMI port. Again, it was surprisingly easy to do that. It turns out that this was just as easy to set up. I connected a powered speaker to the 3.1 mm audio jack on the Pi, disconnected the Bluetooth® speaker with bluetoothctl, and then paired and connected to an Android telephone with the same utility. Once the Pi and the phone were connected, the sound from the phone was routed over the air to the Pi and then send out to the speaker. There was no need to run a utility on the Pi similar to bluealsa-play. I should also point out that the latency problem was not anywhere as bad as that encountered with bluealsa. I only did a cursory test, but I could look at a YouTube video on the phone with sound send by Bluetooth® to the Pi while the latter was performing a fruitless find command over the complete file system and sending the listing out to a session connected through Wi-Fi.

All in all, PulseAudio is very impressive and I can see why it was brought back into the OS. It is, however, very heavy, especially for the Lite version.

Installing BlueALSA 1.4.0 toc

By adding a new list containing the Buster repository to the apt utility sources directory , it will be possible to install the bluealsa package as before.

pi@tarte:~ $ echo "deb http://archive.raspberrypi.org/debian/ buster main" | sudo tee /etc/apt/sources.list.d/raspberrypi.list deb http://archive.raspberrypi.org/debian/ buster main pi@tarte:~ $ ls -l /etc/apt/sources.list.d/ total 8 -rw-r--r-- 1 root root 55 Mar 16 15:20 raspberrypi.list -rw-r--r-- 1 root root 191 Jan 27 21:03 raspi.list

Let's check that the package is now available.

pi@tarte:~ $ sudo apt update ... pi@tarte:~ $ apt-cache policy bluealsa bluealsa: Installed: (none) Candidate: 0.13 Version table: 0.13 500 500 http://archive.raspberrypi.org/debian buster/main armhf Packages

That is the same version of bluealsa that I installed in Buster in November 2021. There is something that is not appropriate with adding the old distribution's repository.

pi@tarte:~ $ apt-cache policy Package files: 100 /var/lib/dpkg/status release a=now 500 http://archive.raspberrypi.org/debian bullseye/main armhf Packages release o=Raspberry Pi Foundation,a=stable,n=bullseye,l=Raspberry Pi Foundation,c=main,b=armhf origin archive.raspberrypi.org 500 http://archive.raspberrypi.org/debian buster/main armhf Packages release o=Raspberry Pi Foundation,a=oldstable,n=buster,l=Raspberry Pi Foundation,c=main,b=armhf origin archive.raspberrypi.org 500 http://raspbian.raspberrypi.org/raspbian bullseye/rpi armhf Packages release o=Raspbian,a=stable,n=bullseye,l=Raspbian,c=rpi,b=armhf origin raspbian.raspberrypi.org 500 http://raspbian.raspberrypi.org/raspbian bullseye/non-free armhf Packages release o=Raspbian,a=stable,n=bullseye,l=Raspbian,c=non-free,b=armhf origin raspbian.raspberrypi.org 500 http://raspbian.raspberrypi.org/raspbian bullseye/contrib armhf Packages release o=Raspbian,a=stable,n=bullseye,l=Raspbian,c=contrib,b=armhf origin raspbian.raspberrypi.org 500 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf Packages release o=Raspbian,a=stable,n=bullseye,l=Raspbian,c=main,b=armhf origin raspbian.raspberrypi.org Pinned packages:

The packages in the old Buster repository have the same priority as the packages in the newer repository. It is better to change that.

pi@tarte:~ $ printf 'Package: *\nPin: release n=buster\nPin-Priority: 50\n' | sudo tee --append /etc/apt/preferences.d/limit-buster Package: * Pin: release a=buster Pin-Priority: 50 pi@tarte:~ $ sudo apt update Hit:1 http://raspbian.raspberrypi.org/raspbian bullseye InRelease Hit:2 http://archive.raspberrypi.org/debian buster InRelease Hit:3 http://archive.raspberrypi.org/debian bullseye InRelease Reading package lists... Done Building dependency tree... Done Reading state information... Done All packages are up to date. pi@tarte:~ $ apt-cache policy Package files: 100 /var/lib/dpkg/status release a=now 500 http://archive.raspberrypi.org/debian bullseye/main armhf Packages release o=Raspberry Pi Foundation,a=stable,n=bullseye,l=Raspberry Pi Foundation,c=main,b=armhf origin archive.raspberrypi.org 50 http://archive.raspberrypi.org/debian buster/main armhf Packages release o=Raspberry Pi Foundation,a=oldstable,n=buster,l=Raspberry Pi Foundation,c=main,b=armhf origin archive.raspberrypi.org 500 http://raspbian.raspberrypi.org/raspbian bullseye/rpi armhf Packages release o=Raspbian,a=stable,n=bullseye,l=Raspbian,c=rpi,b=armhf origin raspbian.raspberrypi.org ...

Installation now proceeds much as before.

pi@tarte:~ $ sudo apt install bluealsa -y ... 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 189 kB of archives. After this operation, 604 kB of additional disk space will be used. ... bluealsa.service is a disabled or a static unit, not starting it. Processing triggers for dbus (1.12.20-2) ... Processing triggers for libc-bin (2.31-13+rpt2+rpi1+deb11u2) ... pi@tarte:~ $ bluealsa --version 1.4.0 pi@tarte:~ $ sudo systemctl status bluealsa.service ● bluealsa.service - BluezALSA proxy Loaded: loaded (/lib/systemd/system/bluealsa.service; static) Active: inactive (dead) pi@tarte:~ $ sudo systemctl start bluealsa.service pi@tarte:~ $ sudo systemctl status bluealsa.service ● bluealsa.service - BluezALSA proxy Loaded: loaded (/lib/systemd/system/bluealsa.service; static) Active: active (running) since Wed 2022-03-16 17:09:04 ADT; 4s ago Main PID: 1330 (bluealsa) Tasks: 3 (limit: 1597) CPU: 42ms CGroup: /system.slice/bluealsa.service └─1330 /usr/bin/bluealsa Mar 16 17:09:04 tarte systemd[1]: Started BluezALSA proxy.

As hoped, this works.

pi@tarte:~ $ bluetoothctl connect 30:21:5C:00:01:02 Attempting to connect to 30:21:5C:00:01:02 [CHG] Device 30:21:5C:00:01:02 Connected: yes Connection successful pi@tarte:~ $ aplay -vv -D bluealsa:DEV=30:21:5C:00:01:02 sound/sound-01.wav Playing WAVE 'sound/sound-01.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo 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 : 2 rate : 44100 exact rate : 44100 (44100/1) msbits : 16 buffer_size : 22574 period_size : 3763 period_time : 85333 tstamp_mode : NONE tstamp_type : GETTIMEOFDAY period_step : 1 avail_min : 3763 period_event : 0 start_threshold : 22574 stop_threshold : 22574 silence_threshold: 0 silence_size : 0 boundary : 1479409664 Slave: BlueALSA PCM: /org/bluealsa/hci0/dev_30_21_5C_00_01_02/a2dp BlueALSA BlueZ device: /org/bluez/hci0/dev_30_21_5C_00_01_02 BlueALSA Bluetooth codec: 0 ########### + | 39%^C Aborted by signal Interrupt... ## + | 39%

The volume could be controlled in an other session with the alsamixer utility.

pi@tarte:~ $ alsamixer -D bluealsa

By default, bluealsa is only a "source" meaning that the Pi can be used to send an audio stream to a Bluetooth® device such as a speaker as shown above. But the Pi can be a "sink" meaning that another Bluetooth® device such as a tablet or phone can send an audio stream to the Pi which can in turn play it on a speaker connected to the 3.1 mm audio jack or the HDMI port. The bluealsa configuration has to be changed for that to take effect.

First we will create a default configuration file for the package. This is done by creating a one-line text file named /etc/default/bluealsa. Its content is

OPTIONS="-p a2dp-source -p a2dp-sink"

Then the service file needs to be edited.

pi@tarte:~ $ sudo -E systemctl edit --full bluealsa
[Unit] Description=BluezALSA proxy Requires=bluetooth.service After=bluetooth.service [Service] Type=simple User=root EnvironmentFile=-/etc/default/bluealsa ExecStart=/usr/bin/bluealsa $OPTIONS

There is a side effect of editing the service file in this fashion. Because it is copied to the /etc/systemd/system/ directory, the service is enabled. If the system is rebooted, the service will be started automatically. Here are the statuses of the services after a reboot.

pi@tarte:~ $ sudo systemctl status bluetooth* ● bluetooth.service - Bluetooth service Loaded: loaded (/etc/systemd/system/bluetooth.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2022-03-16 18:19:34 ADT; 1min 7s ago Docs: man:bluetoothd(8) Main PID: 529 (bluetoothd) Status: "Running" Tasks: 1 (limit: 1597) CPU: 209ms CGroup: /system.slice/bluetooth.service └─529 /usr/libexec/bluetooth/bluetoothd --noplugin=sap Mar 16 18:19:33 tarte systemd[1]: Starting Bluetooth service... Mar 16 18:19:34 tarte bluetoothd[529]: Bluetooth daemon 5.55 Mar 16 18:19:34 tarte systemd[1]: Started Bluetooth service. Mar 16 18:19:34 tarte bluetoothd[529]: Starting SDP server Mar 16 18:19:34 tarte bluetoothd[529]: Excluding (cli) sap Mar 16 18:19:34 tarte bluetoothd[529]: Bluetooth management interface 1.18 initialized Mar 16 18:19:34 tarte bluetoothd[529]: Endpoint registered: sender=:1.8 path=/org/bluez/hci0/A2DP/SBC/Source/1 Mar 16 18:19:34 tarte bluetoothd[529]: Endpoint registered: sender=:1.8 path=/org/bluez/hci0/A2DP/SBC/Source/2 Mar 16 18:19:34 tarte bluetoothd[529]: Failed to set privacy: Rejected (0x0b) ● bluetooth.target - Bluetooth Loaded: loaded (/lib/systemd/system/bluetooth.target; static) Active: active since Wed 2022-03-16 18:19:34 ADT; 1min 7s ago Docs: man:systemd.special(7) Mar 16 18:19:34 tarte systemd[1]: Reached target Bluetooth. pi@tarte:~ $ sudo systemctl status bluealsa* ● bluealsa.service - BluezALSA proxy Loaded: loaded (/etc/systemd/system/bluealsa.service; static) Active: active (running) since Wed 2022-03-16 18:19:34 ADT; 1min 12s ago Main PID: 530 (bluealsa) Tasks: 3 (limit: 1597) CPU: 56ms CGroup: /system.slice/bluealsa.service └─530 /usr/bin/bluealsa Mar 16 18:19:34 tarte systemd[1]: Started BluezALSA proxy.

I was then able to pair and connect an Android phone and the Pi over Bluetooth®. The Pi showed up as a headset, so that the sound generated by the phone was no longer played on its speakers but it was instead streamed to the Pi. The bleualsa-aplay utility could then play that audio stream to connected speakers.

pi@tarte:~ $ sudo bluealsa-aplay 04:92:26:00:01:02

The simpler address 00:00:00:00:00:00 will work.

Installing BlueALSA 3.0.0 toc

While the Raspberry Pi Foundation may be rejecting BlueALSA, its development continues unabated; there have been 19 commits to the source code since the start of the year. Therefore, continuing on with the old bluealsa package from the Buster repository is not a good long-term strategy. That package contained version 1.4.0 which was released in March 2019 which is rather out of date. The current release is version 3.1.0 dated June 2021. The best way to keep up with changes in BlueALSA would be to compile and install from the source code as explained above. As I said, this should work but it does involve a lot of work.

Lazyness being one my better character traits, I investigated a simpler approach. It turns out that BlueALSA is available in the very newest Bookworm version of Raspbian over at Raspbian.org. For whatever reason it has a different name: bluez-alsa-utils. Here is a quick rundown on how to proceed to install that package. There is no real need to go into details, this is pretty much what was done to install the package from the Buster repository in the previous section.

pi@tarte:~ $ echo "deb http://archive.raspbian.org/raspbian/ bookworm main" | sudo tee /etc/apt/sources.list.d/armbian.list pi@tarte:~ $ printf 'Package: *\nPin: release n=bookworm\nPin-Priority: 100\n' | sudo tee --append /etc/apt/preferences.d/limit-bookworm pi@tarte:~ $ sudo apt install bluez-alsa-utils

Do not forget to change the priority of the Bookworm repository or else you will update 365 packages or so with the next sudo apt upgrage -y command. And do not forget to edit /etc/default/bluez-alsa to set the OPTIONS="-p a2dp-source -p a2dp-sink" if the Pi is to receive a sound stream over Bluetooth®. I'll mention that it appears that latency is not as bad with this newer version of BlueALSA although maybe not as reduced as with PulseAudio. This is hard to quantify and very subjective, but in a pinch I would watch a YouTube video with the sound streamed to a Pi via Bluetooth®.

Best Decision toc

So should BlueALSA be abandonned? There's no doubt that PulseAudio is both more powerful and easier to use, at first blush anyway. But it is heavy, which is irksome for users wanting to run light servers on small single-board computers.

Number of packagesDownload Size KBDisk Space (KB)
PulseAudio105  69200  244000  
bluez-alsa6  242  708  

Since BlueALSA was sufficient for my needs in the past, I would be inclined to forego PulseAudio at least for as long the package remains in Raspbian (or, more accurately, in Debian). Others may need the greater capabilities of PulseAudio. Regardless, it would be a welcomed addition if someone could create a package for a non GUI distribution.

<-Bluetooth and BlueALSA in Raspberry Pi OS Lite (November 2021)
<-Baby Bluetooth Steps on Raspberry Pi 3 - Raspbian (Stretch)