Pulseaudio not detecting bluetooth headset

archlinux-arm, bluetooth, bluez, pulseaudio, raspberry-pi

Solution

I have managed to resolve this issue in the meantime, and here are the steps that worked for me. The OS in question is archlinux-arm.

Installation

Install the following packages:

- bluez4-4.101-4

- bluez-tools-0.1.38-3

- bluez-utils 5.21-2

- libpulse-4.0-6

- pulseaudio-4.0-6

- pulseaudio-alsa-2-2

- alsa-utils

Note: I have managed to get PulseAudio to detect my Bluetooth headset using the specific package versions listed here. Some other versions worked also, but most combinations I tried had issues that I couldn't resolve. Most packages can be built and installed from AUR (bluez4, bluez-tools, ...), and others can be installed easily with `pacman`.

Additional preparation

After we installed these package versions, we don't want `pacman` to update them later when we do system upgrade. To prevent this, we add the following line to our `/etc/pacman.conf`:

IgnorePkg = libpulse pulseaudio pulseaudio-alsa bluez bluez-tools

There are issues with PulseAudio failing to work with `bluez4`, especially failing to switch to `A2DP` profile when using `bluez4` version 4.1 and higher and `pulseaudio` version 3.0 or higher. This can be resolved by ommiting the `Socket` parameter from the enabled list in the `/etc/bluetooth/audio.conf`:

# Enable=Headset,Sink,Source,Socket
Enable=Headset,Sink,Source

If this is not enough, try adding an additional line:

Disable=Socket

Running

It is time to enable and start the `bluetooth` service:

systemctl enable bluetooth
systemctl start bluetooth

We can discover our device via `hcitool`, `bt-adapter` or `bt-device`, and connect to it. For example, using the latter:

bt-device -d
bt-device -c <MAC>
bt-device --set <MAC> Trusted 1
bt-audio -c <MAC>

The first command discovers the device, the seconds connects to it by its MAC address. The third one sets it as trusted so we can autoconnect to it later on, when in range. The last command connects it as an audio device. After this, it should be available in `pulseaudio`.

Using with PulseAudio

Start the PA via `pulseaudio --start`. Check if the sources and sinks are recognized properly:

pactl list sources short
pactl list sinks short

You should see your BT sink and source listed, which means PA has detected them. Notice the ID values next to the sinks and sources. Use them to set your BT as the default sink/source:

pacmd set-default-source <BT_SOURCE_ID>
pacmd set-default-sink <BT_SINK_ID>

You can find out the BT card id and its supported profiles with `pacmd list-cards`. You will probably see at least `A2DP` and `HSP` profiles listed there. You can switch between them like this:

# pacmd set-card-profile <card_id> <profile_name>
pacmd set-card-profile 1 a2dp
pacmd set-card-profile 1 hsp

Autoconnection

The package bluez-tools contains the tool called bt-monitor that captures the D-Bus signals from the `bluetoothd` daemon and initiates the connection for detected devices that are paired (and trusted). Run the `bt-monitor` and test by turning off and on your BT headset.

Problem

I am trying to connect a bluetooth headset to my RPI. My setup is the following: - archlinux-arm, kernel: linux-raspberrypi 3.12.23-1 - bluez4 4.101-4 from AUR, built and installed - bluez-tools 0.1.38-3 - bluez-utils 5.20-1 - pulseaudio 5.0-1 - pulseaudio-alsa 2-3 I scan for the device, successfully pair it, add as trusted and connect it: ``` hcitool scan bluez-simple-agent hci0 <MAC> bt-device --set <MAC> Trusted 1 bt-audio -c <MAC> ``` After this, the device state is as follows (`bt-device -i <MAC>` output): ``` [00:23:7F:2A:3B:24] Name: PLT 510 Alias: PLT 510 [rw] Address: 00:23:7F:2A:3B:24 Icon: audio-card Class: 0x200404 Paired: 1 Trusted: 1 [rw] Blocked: 0 [rw] Connected: 1 UUIDs: [Headset, Handsfree] ``` So, everything seems to be great, right? Well, not quite. The issue is when I try to play audio, because it seems PulseAudio didn't recognize it and didn't register `source` and `sink` entries: ``` [root@alarmpi bluetooth]# pactl list sources short 0 alsa_output.platform-bcm2835_AUD0.0.analog-stereo.monitor module-alsa-card.c s16le 2ch 44100Hz IDLE [root@alarmpi bluetooth]# pactl list sinks short 0 alsa_output.platform-bcm2835_AUD0.0.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED ``` I have checked that the `module-bluetooth-policy` and `module-bluetooth-discover` modules are loaded. Even tried to unload and load back again: ``` pactl unload-module module-bluetooth-discover pactl load-module module-bluetooth-discover ``` Successfully loaded module, but still not showing in the `sources` nor `sinks` list. I also tried to configure the `/etc/bluetooth/audio.conf` to enable different options like: ``` Enable=Source,Sink,Media,Socket Enable=Source,Sink,Headset,Gateway,Control,Media,Socket Enable=Source,Sink,Media ... ``` but it didn't change anything. I am all out of ideas... Why is it not recognized by PulseAudio? Is there something I missed? Do I need to configureI PulseAudio some special way?

Original source