Bluetooth Headset connects, but PulseAudio doesn't detect it

Since upgrading to Leap 15.3 (from Leap 15.2), my Bluetooth Headsets connect to my PC, but I cannot use them for sound input/output. I first noticed this problem through the GNOME Settings interface, but have used the Bluetooth and PulseAudio commands directly to remove anything GNOME as the culprit. On Leap 15.2 and previously, I had no problems using my Bluetooth headset for audio operations.

> pactl list | grep -i module-bluetooth
    Name: module-bluetooth-policy
    Name: module-bluetooth-discover
> pactl list sources | grep -i blue
>

However, if I switch to Pipewire (pipewire-pulseaudio), I can use my Bluetooth Headset for audio input/output. I was about to rejoice and leave this problem behind me when I discovered that certain applications don’t transmit sound clearly when using Pipewire, even for non-Bluetooth devices, so I had to switch back to PulseAudio in order to maintain a working microphone. But, this leads me to believe the problem lies in a change to PulseAudio.

I made a previous post about a Bluetooth problem, but that related to disconnection after successful playback. And, someone made a Tumbleweed post a number of years ago about a problem that sounded similar, but the Bug discussion centered around GDM PulseAudio interfering with the user session, but I only have one pulseaudio process running.

> systemctl status --no-pager -l bluetooth
#...
Jan 01 00:00:00 host bluetoothd[2811]: Endpoint registered: sender=:1.5795 path=/MediaEndpoint/A2DPSink/sbc
Jan 01 00:00:00 host bluetoothd[2811]: Endpoint registered: sender=:1.5795 path=/MediaEndpoint/A2DPSource/sbc
Jan 01 00:00:19 host bluetoothd[2811]: src/profile.c:record_cb() Unable to get Headset Voice gateway SDP record: Device or resource busy

I tried the commands you listed (good you included them!) on my Tumbleweed system:

> pactl list | grep -i module-bluetooth 
        Name: **module-bluetooth**-policy 
        Name: **module-bluetooth**-discover 
> pactl list sources | grep -i blue 
        Name: **blue**z_sink.00_1E_7C_00_A0_68.a2dp_sink.monitor 
        Driver: module-**blue**z5-device.c 
        Monitor of Sink: **blue**z_sink.00_1E_7C_00_A0_68.a2dp_sink 
                device.api = "**blue**z" 
                device.bus = "**blue**tooth" 
                **blue**z.path = "/org/**blue**z/hci0/dev_00_1E_7C_00_A0_68" 
                **blue**z.class = "0x240404" 
                **blue**z.alias = "Philips SHB9000" 
                device.icon_name = "audio-headset-**blue**tooth"

> sudo systemctl status --no-pager -l bluetooth 
...

Mar 11 21:31:32 bluetoothd[1195]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/A2DPSink/sbc 
Mar 11 21:31:32 bluetoothd[1195]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/A2DPSource/sbc 
Mar 11 21:31:32 bluetoothd[1195]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/A2DPSink/sbc_xq 
Mar 11 21:31:32 bluetoothd[1195]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/A2DPSource/sbc_xq 
Mar 11 21:31:32 bluetoothd[1195]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/A2DPSource/faststream 
Mar 11 21:31:32 bluetoothd[1195]: Endpoint registered: sender=:1.63 path=/MediaEndpoint/A2DPSource/faststream_duplex 
Mar 11 21:31:39 bluetoothd[1195]: **src/profile.c:record_cb() Unable to get Hands-Free Voice gateway SDP record: Host is down** 
Mar 11 21:31:44 bluetoothd[1195]: **src/profile.c:record_cb() Unable to get Hands-Free Voice gateway SDP record: Host is down** 
Mar 11 23:14:26 bluetoothd[1195]: **src/service.c:btd_service_connect() a2dp-sink profile connect failed for 00:1E:7C:00:A0:68: Device or resource busy** 
Mar 11 23:14:26  bluetoothd[1195]: /org/bluez/hci0/dev_00_1E_7C_00_A0_68/sep1/fd0: fd(27) ready

Those messages at 23:14:26 were at the moment I connected my BT headset so the “Device or resource busy” error is likely not fatal but you are missing a message that your BT headset is connected I think.

Does “bluetoothctl paired-devices” list you headset?

So my report on the output from systemctl status bluetooth was a red herring; having the Bluetooth service running for a while and connecting my headset later yielded no output.

bluetoothctl paired-devices lists my headset, but pactl list sources does not list it.

Do you have pulseaudio-module-bluetooth installed?

> sudo zypper se pulseaudio-module-bluetooth

S | Name | Summary | Type
–±----------------------------±--------------------------------------------------±-------
i | pulseaudio-module-bluetooth | Bluetooth support for the PulseAudio sound server | package

I suppose that the presence of the “bluetooth-module-discover” and “bluetooth-module-policy” modules (from pactl list) don’t necessarily imply that I’ve installed the package, but yes, I have installed the “pulseaudio-module-bluetooth” package.

Again, I had everything working in Leap 15.2, but then after upgrading to Leap 15.3, I could no longer use my Bluetooth headset as an audio device. From the evidence I’ve collected, it would seem like I would have to enable or disable some new module, or change the value of a setting that has a new default in my PulseAudio config.

Ack, things did work for 15.2 but not for 15.3

On the modules: with no headset connected I see using “pactl list modules” that following bluetooth modules are loaded: module-bluetooth-policy, module-bluetooth-discover, module-bluez5-discover.

When the headset is connected “pactl list sinks” lists:

Sink #4
        State: RUNNING
        Name: bluez_sink.00_1E_7C_00_A0_68.a2dp_sink
        Description: Philips SHB9000
        Driver: module-bluez5-device.c
        Sample Specification: s16le 2ch 44100Hz
        Channel Map: front-left,front-right
        Owner Module: 29

And module 29 is an additional module loaded:

Module #29
        Name: module-bluez5-device
        Argument: path=/org/bluez/hci0/dev_00_1E_7C_00_A0_68 autodetect_mtu=0 output_rate_refresh_interval_ms=500 avrcp_absolute_volume=1
        Usage counter: 1
        Properties:
                module.author = "João Paulo Rechi Vita"
                module.description = "BlueZ 5 Bluetooth audio sink and source"
                module.version = "15.0"

Yep, I do see the module-bluez5-discover module as well.

> pactl list modules | grep -i module-blue
    Name: module-bluetooth-policy
    Name: module-bluetooth-discover
    Name: module-bluez5-discover
> bluetoothctl info [MAC] | grep Connected
    Connected: yes
> bluetoothctl info [MAC] | grep UUID
    UUID: Headset                   (00000000-0000-0000-0000-000000000000)
    UUID: Handsfree                 (00000000-0000-0000-0000-000000000000)

But, as you probably expected, pactl list sinks contains no additional sinks in PulseAudio after the device connects. And again, Pipewire detects the device and outputs audio just fine.

FWIW, on my Leap 15.3 KDE laptop, if I turn on my bluetooth headset and select connect in the bluetooth device window, I have found no way to get sound to it. However, if I put the headset in pairing mode, then click connect, it connects and immediately gets the audio stream. Pulseaudio knows about it. YMMV.

> bluetoothctl info [MAC] | grep UUID     UUID: Headset                   (00000000-0000-0000-0000-000000000000)
    UUID: Handsfree                 (00000000-0000-0000-0000-000000000000)

For me (Thumbleweed, no problems), those UUID’s are non-zero.

> bluetoothctl info 
Device 00:1E:7C:00:A0:68 (public) 
        Name: Philips SHB9000 
        Alias: Philips SHB9000 
        Class: 0x00240404 
        Icon: audio-headset 
        Paired: yes 
        Trusted: yes 
        Blocked: no 
        Connected: yes 
        LegacyPairing: no 
       UUID: Headset                   (00001108-0000-1000-8000-00349b5f80fb)
       UUID: Audio Sink                (0000110b-0000-1000-8000-00349b5f80fb)
       UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00349b5f80fb)
       UUID: Advanced Audio Distribu.. (0000110d-0000-1000-8000-00349b5f80fb)
       UUID: A/V Remote Control        (0000110e-0000-1000-8000-00349b5f80fb)
       UUID: Handsfree                 (0000111e-0000-1000-8000-00349b5f80fb) 
        Affected by Policy: no

I see “bluetoothctl show” shows the controller (a BT-USB stick) with the same UUID’s.

That looks like a problem on the BT level instead of pulseaudio…

Yes; those UUID have non-zero values on my system as well, but I tend to remove any unique identifiers like that from my posts. I was only trying to show that Bluetooth recognizes the capabilities of the headset.

That Pipewire works with this headset would indicate to me that Bluetooth is working fine and that PulseAudio has the problem, unless my Bluetooth drivers are doing something wrong but Pipewire knows about it and is applying a workaround.

Tried my 15.3 install and a few days back it did not want to boot as the boot stopped without asking for the password of the encrypted home and I found no way to enter that. Tried today booting in recovery mode and now it works.

The system has not been updated for months but I could connect the BT headset and after that the audio automatically switched to the headset and audio was playing nice.
I read for @ crmrhm that is the way to get things working, so let me upgrade and try a few times.

Yes; those UUID have non-zero values on my system as well, but I tend to remove any unique identifiers like that from my posts.

Okay, my tactic is to change the addresses, likely therefore I assumed something was wrong.
You list the Headset and Handsfree profile, but do you have also the Audio Sink profile? I think that is what is needed.

Did upgrade so now running with the latest Leap (in Tumbleweed /etc/os-release gives information, but is there something like that for Leap?)

The bluetooth headset is still working, but I see I see I have an additional module-bluez5-device module loaded just like for Tumbleweed:

> pactl list modules | grep -i module-blue
Name: module-bluetooth-policy
Name: module-bluetooth-discover
Name: module-bluez5-discover
Name: module-bluez5-device

Is maybe that module missing for your install or not correctly loaded? Would be also good to run with “pulseaudio -vvvv”

It turns out that many TVs, although they support many of these wonderful features, do not have them on by default. One such element is basically everything that makes the higher HDMI spec worth while. You know, small stuff like HDR, Chroma 4:4:4, and things like better refresh rate.

Oh, and better yet. These things, most would normally attribute to something that affects the picture, HA! No that would just be plain silly. Don’t even think of looking under the TV menu item of “Picture”. That would just be stupid. No, no, no, that is more appropriately under the General -> External Device Manager -> Input Signal Plus.
I am sure you would have gone there first, I did not. In my useless opinion, I think this is an example of why you don’t want to let the marketing people too near the technology. I included a link to rtings so you can see other manufacturers also have unique names for the same thing. Oh, on top of that, there is nothing in Samsung’s explanation area of the menu that identifies this “feature”. There is no mention of HDR, Chroma, OR refresh rate.