Saturday, December 26, 2009

Getting Bluetooth A2DP to work in Mandriva 2010

One of the grips I've always had with KDE4 is it's rather poor bluetooth integration. For most of 2008 and 09, I've tried in vain to make my really nice bluetooth stereo headphones to work on Linux. I started to see a glimpse of it in 2009.1 where it would work for 2 minutes before crashing pulseaudio.

Now with 2010 out I decided to give it another go. Finding instructions for doing it is not particularly easy. There is no single place that provided something that will just work on Mandriva. So I decided to document my steps here.

Lets start with the require packages you will need to install.
kbluetooth
bluez
bluez-alsa
pulseaudio-module-bluetooth
*There's much more, but they should already be installed.

Start kbluetooth (it's somehow under the Internet category)
Make sure your bluetooth adapter is detected & showing a MAC address. Give it a sensible name.
The kbluetooth device manager gui only works for input devices. So don't bother trying to pair the headphones with it. We'll need to do it from a konsole.

Put you bluetooth headphones into pairing mode. (usually done by holding the power button until it blinks) Then do this:
$ hcitool scan

This should discover your headphones and list it's MAC address. Now connect to the MAC. (seems like only root can do these steps)
# hcitool cc 00:00:00:00:00:00

kbluetooth should now popup and request for the pin. (It's usually 0000)
Now lock down the pairing:
# hcitool auth 00:00:00:00:00:00

That's it for pairing. Now we need to tell alsa about the new audio device. Open up the file .asoundrc in your home directory (create it if it's not there), and put this in it:

pcm.bluetooth {
type bluetooth
device "00:00:00:00:00:00"
}

Replace with the MAC address of your headphones of course.

Now you need to reboot. Next you'll need to tell pulseaudio about your new output device.

$ pactl load-module module-alsa-sink device="bluetooth"

Now open the PulseAudio Volume Control. (pavucontrol) You should see bluetooth listed as another output device. You can now make it the default or you could assign the output device on a per application basis.

Now, the part the sucks. Pulseaudio will not remember these setting across reboots, you will need to rerun the pactl command everytime you want to use the headphones. One easy way to do this is to put an icon on the panel to run the command.

Another thing to be aware of is if you are playing something & you disconnect the headphones somehow, pulseaudio will segfault. So remember to stop playback and switch the default output back to your soundcard before turning off your headphones.

Enjoy. :)