You are not logged in.

#1 2025-03-17 12:16:13

zef
Member
Registered: 2025-03-17
Posts: 4

[SOLVED] Pipewire & pulseaudio + bluetooth: no sink for headset

Hello and thank you in advance for your help.

I'm setting up a new computer with an X870 motherboard from MSI (Bluetooth 5.4 + WiFi 7) and I'm having a lot of trouble pairing and using Bluetooth audio devices. I have a Bose headset and a Bose speaker, both have the same problem: I can't get them to pair with the computer with multiple different errors, mostly "Page Timeout", but sometimes I get other errors in journalctl akin to "[unable to register] A2DP [...]" or the same with HFP. Sometimes I manage to pair by retrying a lot, but the headset do not show in pavucontrol or in pactl's sinks and the headset itself do not register the connection (it should switch its LED from blue to white and play a sound). Bluetooth works well for non audio devices as I managed to connect a mouse, a keyboard and my phone.

EDIT (SOLUTION): For anyone having the same problem qith Bose headsets (QC35). The problem came back and what worked was resetting the known pairs on the headset, then disabling dual mode (to bredr), trying to pair using bluetoothctl until it works (it took me 15 tries). Then enabling dual mode back, pairing again using bluetoothctl until the headset recognize the pairing. It took me 15 tries for the first pairing, then 5 for the next one. After the last one, the headset should disconnect then reconnect in bluetoothctl.

I think this may be a problem with modules as "pactl list | grep a2dp_codec" do not show anything and "pactl load-module module-alsa-sink device=bluetooth" do not work.
At first, bluetoothctl did not list UUIDs for audio sinks, but I managed to fix that:

[bluetooth]# show
Controller D8:B3:2F:66:94:86 (public)
        Manufacturer: 0x001d (29)
        Version: 0x0c (12)
        Name: XXXX
        Alias: XXXX
        Class: 0x006c0104 (7078148)
        Powered: yes
        PowerState: on
        Discoverable: no
        DiscoverableTimeout: 0x000000b4 (180)
        Pairable: yes
        UUID: A/V Remote Control        (0000110e-0000-1000-8000-00805f9b34fb)
        UUID: Handsfree Audio Gateway   (0000111f-0000-1000-8000-00805f9b34fb)
        UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
        UUID: Audio Sink                (0000110b-0000-1000-8000-00805f9b34fb)
        UUID: Headset                   (00001108-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
        UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
        UUID: Audio Source              (0000110a-0000-1000-8000-00805f9b34fb)
        UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
        UUID: Vendor specific           (185f3df4-3268-4e3f-9fca-d4d5059915bd)
        UUID: Device Information        (0000180a-0000-1000-8000-00805f9b34fb)
        Modalias: usb:v1D6Bp0246d054F
        Discovering: no
        Roles: central
        Roles: peripheral
Advertising Features:
        ActiveInstances: 0x00 (0)
        SupportedInstances: 0x10 (16)
        SupportedIncludes: tx-power
        SupportedIncludes: appearance
        SupportedIncludes: local-name
        SupportedSecondaryChannels: 1M
        SupportedSecondaryChannels: 2M
        SupportedSecondaryChannels: Coded
        SupportedCapabilities.MinTxPower: 0xffffffe4 (-28)
        SupportedCapabilities.MaxTxPower: 0x0013 (19)
        SupportedCapabilities.MaxAdvLen: 0xfb (251)
        SupportedCapabilities.MaxScnRspLen: 0xfb (251)
        SupportedFeatures: CanSetTxPower
        SupportedFeatures: HardwareOffload

The command "pactl load-module module-alsa-sink device=bluetooth" fails with the message "Failure: Module initialization failed"; and journalctl outputs:

pulseaudio[1198]: Failed to load module "module-alsa-sink" (argument: "device=bluetooth"): initialization failed.

I have two other arch setups (laptop + desktop) running pulseaudio and both manage to pair with the headset out of the box. I tried with pipewire-pulse, then reverted to pulseaudio. In both cases I got the same errors. Analyzing btmon outputs I found the following differences:

Not working (timeout)

@ MGMT Event: Discovering (0x0013) plen 2                                                 {0x00
01} [hci0] 10.499158
        Address type: 0x07
          BR/EDR
          LE Public
          LE Random
        Discovery: Disabled (0x00)
@ MGMT Event: Command Complete (0x0001) plen 4                                            {0x00
01} [hci0] 10.499168
      Stop Discovery (0x0024) plen 1
        Status: Success (0x00)
        Address type: 0x07
          BR/EDR
          LE Public
          LE Random
@ MGMT Command: Pair Device (0x0019) plen 8                                               {0x00
01} [hci0] 10.499176
        BR/EDR Address: 4C:87:5D:CF:04:01 (Bose Corporation)
        Capability: KeyboardDisplay (0x04)
< HCI Command: Create Connection (0x01|0x0005) plen 13                                         
#17 [hci0] 10.499189
        Address: 4C:87:5D:CF:04:01 (Bose Corporation)
        Packet type: 0xcc18
          DM1 may be used
          DH1 may be used
          DM3 may be used
          DH3 may be used
          DM5 may be used
          DH5 may be used
        Page scan repetition mode: R2 (0x02)
        Page scan mode: Mandatory (0x00)
        Clock offset: 0x0000
        Role switch: Allow peripheral (0x01)
> HCI Event: Command Status (0x0f) plen 4                                                      
#18 [hci0] 10.505129
      Create Connection (0x01|0x0005) ncmd 1
        Status: Success (0x00)
> HCI Event: Connect Complete (0x03) plen 11                                                   
#19 [hci0] 15.626322
        Status: Page Timeout (0x04)
        Handle: 2
        Address: 4C:87:5D:CF:04:01 (Bose Corporation)
        Link type: ACL (0x01)
        Encryption: Disabled (0x00)
@ MGMT Event: Connect Failed (0x000d) plen 8                                              {0x00
01} [hci0] 15.626380
        BR/EDR Address: 4C:87:5D:CF:04:01 (Bose Corporation)
        Status: Connect Failed (0x04)
@ MGMT Event: Command Complete (0x0001) plen 10                                           {0x00
01} [hci0] 15.626389
      Pair Device (0x0019) plen 7
        Status: Connect Failed (0x04)
        BR/EDR Address: 4C:87:5D:CF:04:01 (Bose Corporation)

working

@ MGMT Command: Pair Device (0x0019) plen 8                                               {0x0001} [hci0] 22.144920
        BR/EDR Address: 4C:87:5D:CF:04:01 (Bose Corporation)
        Capability: DisplayYesNo (0x01)
< HCI Command: Create Connection (0x01|0x0005) plen 13                                         #21 [hci0] 22.144970
        Address: 4C:87:5D:CF:04:01 (Bose Corporation)
        Packet type: 0xcc18
          DM1 may be used
          DH1 may be used
          DM3 may be used
          DH3 may be used
          DM5 may be used
          DH5 may be used
        Page scan repetition mode: R2 (0x02)
        Page scan mode: Mandatory (0x00)
        Clock offset: 0x0000
        Role switch: Allow peripheral (0x01)
> HCI Event: Command Status (0x0f) plen 4                                                      #22 [hci0] 22.145590
      Create Connection (0x01|0x0005) ncmd 1
        Status: Success (0x00)
> HCI Event: Vendor (0xff) plen 4                                                              #23 [hci0] 23.478570
      Intel PTT Switch Notification (0x26)
        Handle: 256
        Packet type table: Enhanced data rate (0x01)
> HCI Event: Connect Complete (0x03) plen 11                                                   #24 [hci0] 23.481564
        Status: Success (0x00)
        Handle: 256
        Address: 4C:87:5D:CF:04:01 (Bose Corporation)
        Link type: ACL (0x01)
        Encryption: Disabled (0x00)
< HCI Command: Read Remote Supported Features (0x01|0x001b) plen 2                             #25 [hci0] 23.481713
        Handle: 256 Address: 4C:87:5D:CF:04:01 (Bose Corporation)

I have now spent a dozen hours on this issue and tried a lot of configs in /etc/bluetooth/main.conf. I tried both pipewire-pulse and pulseaudio with the exact same parameters and packages as my working computers. Sound (non bluetooth) was working in both case, but I could not pair my device.

Here are the logs for the frequently asked commands:
systemctl --user status pipewire{,-media-session,-pulse} pulseaudio wireplumber && systemctl status bluetooth

Unit pipewire-media-session.service could not be found.
Unit pipewire-pulse.service could not be found.
● pipewire.service - PipeWire Multimedia Service
     Loaded: loaded (/usr/lib/systemd/user/pipewire.service; enabled; preset: enabled)
     Active: active (running) since Mon 2025-03-17 12:18:25 CET; 43min ago
 Invocation: 7162af97568a4c0390aca39c82b4f748
TriggeredBy: ● pipewire.socket
   Main PID: 973 (pipewire)
      Tasks: 3 (limit: 112746)
     Memory: 3.6M (peak: 3.9M)
        CPU: 7ms
     CGroup: /user.slice/user-1000.slice/user@1000.service/session.slice/pipewire.service
             └─973 /usr/bin/pipewire

Mar 17 12:18:25 XXX systemd[964]: Started PipeWire Multimedia Service.

● pulseaudio.service - Sound Service
     Loaded: loaded (/usr/lib/systemd/user/pulseaudio.service; disabled; preset: enabled)
     Active: active (running) since Mon 2025-03-17 12:18:25 CET; 43min ago
 Invocation: 1ee8bb80090147a895615f16e9d0b950
TriggeredBy: ● pulseaudio.socket
   Main PID: 1198 (pulseaudio)
      Tasks: 7 (limit: 112746)
     Memory: 229.8M (peak: 286.5M)
        CPU: 297ms
     CGroup: /user.slice/user-1000.slice/user@1000.service/session.slice/pulseaudio.service
             ├─1198 /usr/bin/pulseaudio --daemonize=no --log-target=journal
             └─1321 /usr/lib/pulse/gsettings-helper

Mar 17 12:18:25 XXX systemd[964]: Starting Sound Service...
Mar 17 12:18:25 XXX systemd[964]: Started Sound Service.
Mar 17 12:42:40 XXX pulseaudio[1198]: Failed to load module "module-alsa-sink" (argument: "device=bluetooth"): initialization failed.

● wireplumber.service - Multimedia Service Session Manager
     Loaded: loaded (/usr/lib/systemd/user/wireplumber.service; enabled; preset: enabled)
     Active: active (running) since Mon 2025-03-17 12:18:25 CET; 43min ago
 Invocation: 1b2ac14f78ba47f2a05bef80d7862bf8
   Main PID: 974 (wireplumber)
      Tasks: 6 (limit: 112746)
     Memory: 5.6M (peak: 6.5M)
        CPU: 18ms
     CGroup: /user.slice/user-1000.slice/user@1000.service/session.slice/wireplumber.service
             └─974 /usr/bin/wireplumber

Mar 17 12:18:25 XXX wireplumber[974]: s-monitors: PipeWire's ALSA SPA plugin is missing or broken. Sound cards will not be supported
Mar 17 12:18:25 XXX wireplumber[974]: wp-device: SPA handle 'api.bluez5.enum.dbus' could not be loaded; is it installed?
Mar 17 12:18:25 XXX wireplumber[974]: s-monitors: PipeWire's BlueZ SPA plugin is missing or broken. Bluetooth devices will not be supported.
Mar 17 12:18:25 XXX wireplumber[974]: wp-device: SPA handle 'api.bluez5.midi.enum' could not be loaded; is it installed?
Mar 17 12:18:25 XXX wireplumber[974]: s-monitors: PipeWire's BlueZ MIDI SPA missing or broken. Bluetooth not supported.
Mar 17 12:18:25 XXX wireplumber[974]: pw.resource: can't create node: No such file or directory
Mar 17 12:18:25 XXX wireplumber[974]: wp-node: failed to create node from factory 'spa-node-factory'
Mar 17 12:18:25 XXX wireplumber[974]: s-monitors: Failed to create BLE MIDI server.
Mar 17 12:18:25 XXX wireplumber[974]: wp-device: SPA handle 'api.libcamera.enum.manager' could not be loaded; is it installed?
Mar 17 12:18:25 XXX wireplumber[974]: s-monitors-libcamera: PipeWire's libcamera SPA plugin is missing or broken. Some camera types may not be supported.


...

● bluetooth.service - Bluetooth service
     Loaded: loaded (/usr/lib/systemd/system/bluetooth.service; enabled; preset: disabled)
     Active: active (running) since Mon 2025-03-17 12:18:24 CET; 45min ago
 Invocation: 8676dc2bb91b4a91815e7b24818c0e9f
       Docs: man:bluetoothd(8)
   Main PID: 862 (bluetoothd)
     Status: "Running"
      Tasks: 1 (limit: 112746)
     Memory: 6.3M (peak: 6.6M)
        CPU: 31ms
     CGroup: /system.slice/bluetooth.service
             └─862 /usr/lib/bluetooth/bluetoothd

Mar 17 12:18:25 XXX bluetoothd[862]: Endpoint registered: sender=:1.37 path=/MediaEndpoint/A2DPSource/sbc
Mar 17 12:18:25 XXX bluetoothd[862]: Endpoint registered: sender=:1.37 path=/MediaEndpoint/A2DPSink/sbc_xq_453
Mar 17 12:18:25 XXX bluetoothd[862]: Endpoint registered: sender=:1.37 path=/MediaEndpoint/A2DPSource/sbc_xq_453
Mar 17 12:18:25 XXX bluetoothd[862]: Endpoint registered: sender=:1.37 path=/MediaEndpoint/A2DPSink/sbc_xq_512
Mar 17 12:18:25 XXX bluetoothd[862]: Endpoint registered: sender=:1.37 path=/MediaEndpoint/A2DPSource/sbc_xq_512
Mar 17 12:18:25 XXX bluetoothd[862]: Endpoint registered: sender=:1.37 path=/MediaEndpoint/A2DPSink/sbc_xq_552
Mar 17 12:18:25 XXX bluetoothd[862]: Endpoint registered: sender=:1.37 path=/MediaEndpoint/A2DPSource/sbc_xq_552
Mar 17 12:18:25 XXX bluetoothd[862]: Endpoint registered: sender=:1.37 path=/MediaEndpoint/A2DPSink/faststream
Mar 17 12:18:25 XXX bluetoothd[862]: Endpoint registered: sender=:1.37 path=/MediaEndpoint/A2DPSource/faststream

pacman -Qs pulse

local/lib32-libpulse 17.0+r43+g3e2bb8a1e-1
    A featureful, general-purpose sound server (32-bit client libraries)
local/libcanberra 1:0.30+r2+gc0620e4-4
    A small and lightweight implementation of the XDG Sound Theme Specification
local/libpulse 17.0+r43+g3e2bb8a1e-1
    A featureful, general-purpose sound server (client library)
local/pavucontrol 1:6.1-1
    PulseAudio Volume Control
local/plasma-pa 6.3.3-1 (plasma)
    Plasma applet for audio volume management using PulseAudio
local/pulseaudio 17.0+r43+g3e2bb8a1e-1
    A featureful, general-purpose sound server
local/pulseaudio-alsa 1:1.2.12-4
    ALSA Configuration for PulseAudio
local/pulseaudio-bluetooth 17.0+r43+g3e2bb8a1e-1
    Bluetooth support for PulseAudio
local/pulseaudio-equalizer 17.0+r43+g3e2bb8a1e-1
    Graphical equalizer for PulseAudio
local/pulseaudio-jack 17.0+r43+g3e2bb8a1e-1
    Jack support for PulseAudio
local/pulseaudio-qt 1.7.0-1
    Qt bindings for libpulse
local/pulseaudio-zeroconf 17.0+r43+g3e2bb8a1e-1
    Zeroconf support for PulseAudio
local/qemu-audio-pa 9.2.2-1
    QEMU PulseAudio audio driver

pacman -Qs pulse

local/kpipewire 6.3.3-1 (plasma)
    Components relating to pipewire use in Plasma
local/libpipewire 1:1.4.1-1
    Low-latency audio/video router and processor - client library
local/libwireplumber 0.5.8-1
    Session / policy manager implementation for PipeWire - client library
local/pipewire 1:1.4.1-1
    Low-latency audio/video router and processor
local/qemu-audio-pipewire 9.2.2-1
    QEMU PipeWire audio driver
local/qt6-shadertools 6.8.2-1 (qt6)
    Provides functionality for the shader pipeline that allows Qt Quick to operate on Vulkan, Metal, and Direct3D,
    in addition to OpenGL
local/wireplumber 0.5.8-1
    Session / policy manager implementation for PipeWire

sudo fuser -v /dev/snd/*

                     USER        PID ACCESS COMMAND
/dev/snd/controlC0:  me    1198 F.... pulseaudio
/dev/snd/controlC1:  me    1198 F.... pulseaudio

pactl list modules short

0       module-device-restore
1       module-stream-restore
2       module-card-restore
3       module-augment-properties
4       module-switch-on-port-available
5       module-udev-detect
6       module-alsa-card        device_id="0" name="pci-0000_73_00.1" card_name="alsa_card.pci-0000_73_00.1" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes avoid_resampling=no card_properties="module-udev-detect.discovered=1"
7       module-alsa-card        device_id="1" name="pci-0000_73_00.6" card_name="alsa_card.pci-0000_73_00.6" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes avoid_resampling=no card_properties="module-udev-detect.discovered=1"
8       module-jackdbus-detect  channels=2
9       module-bluetooth-policy
10      module-bluetooth-discover
11      module-bluez5-discover
12      module-dbus-protocol
13      module-native-protocol-unix
14      module-gsettings
15      module-default-device-restore
16      module-always-sink
17      module-intended-roles
18      module-suspend-on-idle
19      module-systemd-login
20      module-position-event-sounds
21      module-role-cork
22      module-filter-heuristics
23      module-filter-apply
24      module-x11-publish      display=:0 xauthority=/tmp/xauth_VMZpWl
25      module-x11-xsmp display=:0 xauthority=/tmp/xauth_VMZpWl session_manager=local/XXX:@/tmp/.ICE-unix/1089,unix/XXX:/tmp/.ICE-unix/1089
27      module-cli-protocol-unix

I'm currently out of ideas, so any help would be welcomed. Thank you for reading this very long post.

Last edited by zef (2025-04-01 12:44:10)

Offline

#2 2025-03-18 14:32:03

V1del
Forum Moderator
Registered: 2012-10-16
Posts: 24,301

Re: [SOLVED] Pipewire & pulseaudio + bluetooth: no sink for headset

install pipewire-pulse instead of pulseaudio (installing pipewire-pulse will prompt to replace all of standard pulseaudio relevance) especially the BT departement pipewire has a bunch of improvements over plain pulseaudio so there should be little to no reason to prefer pulseaudio over pipewire directly.

Offline

#3 2025-03-18 16:24:39

zef
Member
Registered: 2025-03-17
Posts: 4

Re: [SOLVED] Pipewire & pulseaudio + bluetooth: no sink for headset

Thank you for your answer. I first tried with pipewire-pulse and moved back to pulseaudio because it worked for my old computers.

Today, I moved back to pipewire-pulse and confirmed that the sound was working for non bluetooth devices.

I found out that the headset I'm using has two modes : LE and other (BR/DR?). It appears as "Bose-QCX" when not using LE and "LE-BOSE-QCX" when not using LE. Both appears (not at the same time) in the bluetooth tab (and bluetoothctl) as headsets, but LE sometimes appear as a non audio device. Strangely, I can pair to the LE device but the headset does not register the pairing and no audio sink is created or available. When disabling LE on my bluetooth card, I can't manage to pair to the headset... When trying to pair with either blueman, bluedevil or bluetoothctl, I get an error in bluez: "org.bluez.Error.ConnectionAttemptFailed" and "Page Timeout".

I tried downgrading bluez to the same version as my working computers, but it did not work either...

I will try to pair using Windows to see if it is a hardware problem.

Last edited by zef (2025-03-18 16:25:28)

Offline

#4 2025-03-23 19:16:23

zef
Member
Registered: 2025-03-17
Posts: 4

Re: [SOLVED] Pipewire & pulseaudio + bluetooth: no sink for headset

Hello,

If updating a post this way is not a good practice, please inform me and I will delete this message.

I managed to pair the headset without any issue using Windows 11, confirming that this is not a hardware problem. I'm now at a loss, because I still can't get it to pair and be recognized as an audio sink on Arch with the latest packages installed.

Do you have any idea I could try or diagnostics I could run ? btmon in debug mode did not reveal anything strange and I still get this "Page timeout".

Offline

#5 2025-03-23 22:39:40

V1del
Forum Moderator
Registered: 2012-10-16
Posts: 24,301

Re: [SOLVED] Pipewire & pulseaudio + bluetooth: no sink for headset

Note that pairing using Windows might introduce a bunch of other variables that can well have an impact here, e.g. https://wiki.archlinux.org/title/Dual_b … ibernation or/and https://wiki.archlinux.org/title/Blueto … ot_pairing

That said if pairing already fails we can ignore pipewire/pulse for now. Another possible cause is a kernel or bluez regression, sadly these are not uncommon, so maybe test the LTS kernel or so and/or trying to downgrade bluez to 1.79 from 1.80

Offline

#6 2025-03-28 13:15:15

zef
Member
Registered: 2025-03-17
Posts: 4

Re: [SOLVED] Pipewire & pulseaudio + bluetooth: no sink for headset

Hello, I think it was indeed a regression... After waiting a bit and updating everything I managed to pair today.

Thank you very much for your help smile

Offline

Board footer

Powered by FluxBB