Es ist 1 wenig tricky, Soundausgabe via Bluetooth auf einem pi3b (b, nicht b+!) ans Laufen zu bekommen. Und ich spreche hier von “auf der Kommandozeile”, auf dem Desktop habe ich das imho irgendwann mal recht schnell zusammengeklickt.
Warum ist das so knifflig? Erstens: Weil Raspberry Pi OS für den 3B, Stand heute, auf Debian 11/”Bullseye” basiert – was weder bei Release des 3B so war (da war es 8/”Jessie”, immerhin 3 Major Versions zurück!), noch die aktuellste Version ist (das wäre dann 12/”Bookworm”). Wikipedia behauptet zwar, auch 12/”Bookworm” wäre kompatibel, aber der Raspberry Pi Imager bietet für den 3B nur 11/”Bullseye” an. Es gibt auch kein “Tested image” von 12/”Bookworm” für den 3B, und meiner bootet dann auch mit keinem der dort angebotenen (oder findet vielleicht auch nur das WLAN nicht, was in meinem Fall auf dasselbe rauskommt).
(Diese UNSITTE, eingängige Nummerierung durch völlig willkürliche Strings zu ersetzen 😡 Looking at you, macOS. Apropos Macs, auch schön: Auf meinem, zugegebenermaßen knapp 13 Jahre alten MacBook kann ich den Raspberry Pi Imager nicht mehr nutzen! Weil gegen eine inkompatible Version von qt kompiliert, wenn ich das richtig verstehe. Aber ich schweife ab.)
Man findet also drölf Tutorials, aber keines davon passt (es gibt sogar Stimmen, die sagen, das geht auf dem 3B gar nicht). Also schreibe ich halt noch eines 🙂 Und zwar explizit für Debian 11/”Bullseye”, bzw. “Raspberry Pi OS (Legacy, 32-bit) Lite (Veröffentlicht: 2023-12-05)”, wie es im Imager genannt wird – was laut lsb_release -a
aber dasselbe ist. Achtung: Das System nicht upgraden (everybody says that)! Update: Da hatte ich in einem der Foren gelesen, und auch selber den Eindruck, dass ich nach einem apt upgrade
keine Verbindung mehr bekam – jetzt wollte ich noch dieses Detail debuggen und lösen, da tritt es nicht mehr auf. Keine Ahnung.
Zuerst probiere ich stumpf, ob es vielleicht schon geht (ich überspringe hier der Übersichtlichkeit halber Scanning, Trusting, Pairing):
1 2 3 4 5 6 |
pi@hifiberry:~ $ bluetoothctl [bluetooth]# devices Device FC:58:FA:3D:32:12 BT 214 [bluetooth]# connect FC:58:FA:3D:32:12 Attempting to connect to FC:58:FA:3D:32:12 Failed to connect: org.bluez.Error.Failed |
Das Internet ist voll von entsprechenden Meldungen mit n+1 Ursachen. Es hilft zur Eingrenzung, in einem zweiten Fenster btmon
zu starten (erfordert sudo
). Dort sehe ich:
= bluetoothd: src/service.c:btd_service_connect() a2dp-sink profile connect failed for FC:58:FA:3D:32:12: Protocol… 5.320743
“a2dp”? 🤔 Ist quasi Audio-über-Bluetooth. Was Sinn ergibt, denn FC:58:FA:3D:32:12 ist ein Lautsprecher, ein “sink” von Audio. Wie bekommt man so ein “sink profile”? Über die Installation von PulseAudio oder PipeWire. Quasi das zweite Problem, denn beide haben ihre eigene Fan-Base (bzw. ihre eigenen Probleme, aus Sicht des jeweils anderen Lagers) und ihre eigenen Tutorials. Wie auch immer, die oben verlinkte Seite sagt, man solle PulseAudio verwenden:
PulseAudio is the default audio server in Debian. Unless you know what you’re doing, you probably want to follow these instructions
, und dieser Post sagt das auch. Also:
1 2 |
sudo apt install pulseaudio-module-bluetooth # reboot nicht vergessen! |
Und: Geht 🥳
1 2 3 4 5 6 7 |
pi@hifiberry:~ $ bluetoothctl [bluetooth]# connect FC:58:FA:3D:32:12 Attempting to connect to FC:58:FA:3D:32:12 [CHG] Device FC:58:FA:3D:32:12 Connected: yes Connection successful [CHG] Device FC:58:FA:3D:32:12 ServicesResolved: yes [BT 214]# |
Die auf im Post genannten Module benötige ich nicht. Kurzer Test:
1 |
speaker-test -t wav -c 6 |
Auch das tut (haha: “tut”! Wie in “Sound”! TUUT TUUT!? Ich finde alleine raus …)
PS, das o.g. zusammenzustellen, hat mich einige Versuche mit frischen Images gekostet. Hier einige weitere Learnings aus diesen Versuchen:
- Bei einem der Versuche hat dann der Lautsprecher angefangen, eine dritte Dimension von Problemen zu machen: Er wollte einen PIN haben 🙂 Zu sehen war das aber auch nur in
btmon
. Jedes Gerät kann hier seinen eigenen Unsinn veranstalten. Es kann dann helfen (wie gesagt, inzwischen benötige ich es nicht mehr),bluetoothctl
mit einem anderen Agent zu starten. Die Idee ist, dem Gegenüber zu sagen, dass man keinen PIN eingeben kann, um in einen anderen Pairing-Modus zu gehen. Oder dass man einen eingeben kann, um den entsprechenden Prompt zu triggern. Bei mir halfbluetoothctl --agent KeyboardDisplay
, was zwar überhaupt nichts triggerte, aber dann ging es. Hier alle Agents. service bluetooth status
zeigt den aktuellen Status; dabei ist “active (running)” (in grün) gut, etwaige Fehlermeldungen (in Rot), wie bspw. “Sap driver initialization failed” oder “Failed to set privacy: Rejected” sind irrelevant. Mein Speaker tut (…) trotz dieser Meldungen.busctl tree org.bluez
zeigt die Devices:
(die beiden untersten Zeilen sieht man nur, wenn das Gerät verbunden ist; es können also sowohl bekannte, wie auch verbundene Devices angezeigt werden)
HTH!