Earlier this year, I showed you how to get high-quality A2DP audio streaming to your Bluetooth headphones. And while that method of connecting your headphones to a music player does work fine, it really only works with media players and anything else set up to specifically play to your headset. What if you want to watch a Flash video with A2DP audio? How about play a game of Nexuiz through the headset? Well, with that implementation, you can't.

And next week, with the release of Ubuntu 8.10, that method will not even work anymore due to a new incompatible version of Bluez. But on the flipside, we really don't even need to do that anymore.

Most distributions include a somewhat recent version of PulseAudio. Love it or hate it, it becomes an excellent tool for the job. Using PulseAudio sinks (outputs), we are able to create a new device visible for Pulse to play to. This means not only your music player, but also your games, websites, and everything else, can play through your wireless headset.

Note: If you used any of the instructions from the previous article, undo them entirely. First make sure your GStreamer output is set back to speaker mode if you used it. Then, delete the .a2dp folder in your home directory. Finally, remove the A2DP Connection script from System > Preferences > Sessions. Leaving anything laying around could interfere with the new process.

Also note that these are merely some things to try out. They are by no means complete; real, full Bluetooth support will come in a later PulseAudio release. PulseAudio 0.9.13 includes the start of this work, but it isn't too use-friendly at the moment.

Let's get started. Open up the file .asoundrc in your home directory (create it if you can't find it), and change its contents to something like this:
pcm.bluetooth {
type bluetooth
device "00:00:00:00:00:00"
}

Replace the device line with the MAC address of your headphones. To find the MAC address, put the headset in pairing mode, and run hcitool scan. Also, if you headphones aren't already paired with your computer, do that now using the Bluetooth applet in the notification area.

Save that file and log out and back in again to make ALSA re-read the configuration. Now we can set up PulseAudio with a simple one-liner:

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

Be sure your headphones are on. When you see a number appear on the command line, they are ready. Pulse will automatically turn on and off the headphones as needed when it wants to play sound. Caveat: You cannot set this to run at startup, as it will sometimes fail. You can, however, add it as a panel launcher and enable your headphones with a single click.

Now go ahead and open up Rhythmbox or another music player (or something else you know uses PulseAudio) and play a track. If you don't get any audio, check to make sure your headphones are on and paired properly, and try the above command again. If the audio still comes out of your speakers, then you will want to re-route the audio.

To do this, install the pavucontrol (PulseAudio Volume Control) application, which may be present on some distributions already. Open it up, and go to the Output Devices tab. Find your headset in the list (labeled "bluetooth") and click the down arrow on the right. Check Default, and try playing audio again. If it still comes out of the speakers, then Pulse is remembering previous settings. Leave the music playing, and go to the Playback tab. Click the down arrow next to the active stream (probably labeled as your music player and current song) and select Move To and then "bluetooth". Wait a moment, and the audio should then route to the headphones. From that point on, Pulse should remember that it should always play to your headphones for that application if they are available.

Feel free to experiment with different setups to find out what works best for you. If things don't work out the first time, simply keep trying. Share your findings in the comments below.

Bonus tip: AVRCP

Just like in the last article, you can enable AVRCP (play/next button) support by adding uinput to the end of /etc/modules. Reboot and your headphones should work!

Jacob is a web developer, student, and programmer from Ohio. He is a staff member at the Ubuntu Forums and is most likely a fanboy of the distribution. He loves to write in code and words, play video games, and rant about topics most would have abandoned long ago. Jacob uses GNOME and is never seen running stable software, much to the demise of his laptop.

[...] Yes, yesterday think luck was in my favor.When I searched for &#8220;jabra and linux&#8221; in google, I got what I needed within the first few links. Updated Instructions @ http://fosswire.com/2008/10/25/better-bluetooth-audio/ [...]

Gert van Dijk(guest)

Thanks for this great how-to! I just did a reinstall with Ubuntu 8.10 and was glad to find a how-to to match the new software. Still some problems, though.
- AVRCP isn't working anymore. It was in Hardy with the same headset (Nokia BH-503). That really is a pity.
- When some other non-Gstreamer program starts playing audio the Gstreamer application fails to play audio through the headset and eventually won't respond (Rhythmbox in my case). The non-Gstreamer application plays the audio through the speakers.

nomasteryoda(guest)

Yup... Similarly to Dijk's post above, I have installed Ubuntu 8.10 Itchy Ibex (I know its Intrepid but that makes me think of the Starship). Following your directions, I got my HT-820 headset working and the sound is so clear and loud now I can't believe the difference from a2dpd. In both Ubuntu 8.04 and Sidux installs I had used your directions for the bluetooth toggle, but this is far superior and just works.
Combined with the new ability to use my smartphone PDA to get web access in the laptop and rhythmbox's album art download, I've got one mean media playing laptop.

[...] UPDATE: FOSSwire notes that the above instructions are not supported in Ubuntu 8.10. They have provided these instructions instead, which I have tested and confirmed to work on Ubuntu 8.10: Better Bluetooth Audio. [...]

Carl(guest)

Hi, this seems like a nice guide. However, I do have some troubles. First off, if I use the hcitool command, it ruins the bluetooth manager and I need to reinstall it (tried rebooting to no avail). After a lot of trouble getting hold of the Bluetooth ID number for the headset (Jabra BT2040) I finally got my .asoundrc properly set up and could run the pactl load-module module-alsa-sink device="bluetooth" command, and it actually seems to work because my headset hums up and is clearly being affected by the command.. however, after a little while I get "Failure: Timeout" instead of the number you said I would get.. Any idea what I should do?

Jeremy Pointer(guest)

This works beutifully for me.... almost the problem I have is that pulseaudio keeps crashing for e.g. when running sound test to the headset - also it would be helpful if there was a way to automatically run the pactl when the headset is turned on / connection is made to it - how would this be achieved ?

Vadim Atlygin(guest)

Aspic(guest)

As I'm a stupid boy, I used the instruction of the previous page, using a2dp.sh
I removed the .a2dp directory and the A2DP Connection script.
But since I used the script a2dp.sh, my intrepid ibex isn't able to pair any device with my comp.
I always have a timeout...
hidd --connect says : "Can't get device information: Connection timed out"
Need help, please !! ;o)

higherclaws(guest)

yodaco(guest)

thanx sooooo much for this, ive tried the newest blueman and it failed to please but your tut worked a treat... one thing tho, about getting the track skip and play/pause buttons to work.. i dont seem the have the file /etc/modules. can anybody help meont that, i would like to use those buttons if i can, but no file no joy.

lb(guest)

maku520(guest)

Thanks again! I used your first tutorial on Hardy and it worked great; I'm glad I and others have had similar success with this new version. Still no luck with AVRCP even after adding uinput at the end of /etc/modules...

I worked on a bash script to load the module and connect to the sink, but I couldn't figure out how to set PulseAudio's default sink from the script. Maybe you'll have better luck. It's on line 7 of the script below. I'm sure that -L is the wrong argument... I tried -F and -nF and it didn't work. Maybe something on line 6 that should be different?
http://blog.markjdrummond.com/sites/default/files/connect2bt-headset.sh

maku520(guest)

I took the stuff that doesn't work out of the script but would still like to know if anyone knows how to set the default PA sink from the command line. I think it has to do with a couple other modules, "module-cli" and "module-cli-protocol-unix". While I managed to load the modules, I'm not sure how to use them. Any ideas?

Anyway, this script works but you have to manually set the default sink with pavucontrol, which it launches automatically upon connection.
http://blog.markjdrummond.com/sites/default/files/connect2bt-headset.sh_.txt

yodaco(guest)

hmm.. this worked fine until a recent update to the bluetooth services (bearing in mind im using ubuntu8.10 so updates are frequent)
now when running "pactl load-module module-alsa-sink device="bluetooth"kllll"
i get the error "Failure: Module initalization failed"

any ideas?????
i was really loving my bluetooth headset there, now this issue has really got me stumped

dmitry(guest)

I'm getting the same error as yodaco, running Ubuntu 8.10 with PulseAudio 0.9.10-2ubuntu9.3 installed per default. Compiling PulseAudio 0.9.14 from sources fails with due to a following error:

cc1: warning: ../libltdl: No such file or directory
In file included from ./pulsecore/sink-input.h:34,
from ./pulsecore/core.h:41,
from ./pulsecore/core-scache.h:26,
from pulsecore/pstream.c:47:
./pulsecore/module.h:26:18: error: ltdl.h: No such file or directory
In file included from ./pulsecore/module.h:31,
from ./pulsecore/sink-input.h:34,
from ./pulsecore/core.h:41,
from ./pulsecore/core-scache.h:26,
from pulsecore/pstream.c:47:
./pulsecore/modinfo.h:37: error: expected ‘)’ before ‘dl’
In file included from ./pulsecore/sink-input.h:34,
from ./pulsecore/core.h:41,
from ./pulsecore/core-scache.h:26,
from pulsecore/pstream.c:47:
./pulsecore/module.h:38: error: expected specifier-qualifier-list before ‘lt_dlhandle’

Harri(guest)

You might want to try this: Run "hcitool dev" to get the 6-byte address of your bluetooth device (e.g. the usb dongle). Create a directory /var/lib/bluetooth/${localaddress}, if it doesn't exist yet.

Next set your headset to pairing mode, and run "hcitool scan" to get its 6-byte address. Edit the file /var/lib/bluetooth/${localaddress}/pincodes to add a line "${headsetaddress} 0000". Most likely 0000 is the pin code of your headset. Check its documentation.

maku520(guest)

For whatever reason, that file doesn't exist on my system. How else can I find out if my pincode has gone haywire? I changed the 'passkey' directive in '/etc/bluetooth/hcid.conf' to my headset's default pincode and restarted bluetooth, but that didn't work. Do I have to change it elsewhere? Or am I not doing the right thing? Thank you for your past work -- please help!

PlantronicUser(guest)

With my laptop I need to have a sound playing before using the load-module command otherwise pulseaudio server just crashes.

Also I used the pulse Audio preferences to add a Virtual output device for simultaneous output" and that allows sound to my headphones as soon as they are connected without having to redirect any sound sources (as they are all pointed to the simultaneous device)

maku520(guest)

Still not working for me... has anyone else had this problem? It stopped working in early/mid- February and I have no idea what's wrong! I keep getting the "Module initiation failed" message. Any ideas? Please help!

Justus(guest)

Still not working for me... has anyone else had this problem? It stopped working in early/mid- February and I have no idea what's wrong! I keep getting the "Module initiation failed" message. Any ideas? Please help! maku520 said:

StaticIp(guest)

This howto worked great for me, except for one thing.. Every time I disconnect my bluetooth headset or I get out of range Sound shuts down completely. I have to reboot to get it back. Pulse fails to connect, and anything open that was playing sound freezes. Is there any way to fix this?

camypaj(guest)

Arindom(guest)

Awesome!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
I tried so hard for so many days on my computer so that I could play audio through my bluetooth headphones.. I could play via a2dp on my mobile phone but it was impossible on my windows xp, windows vista or windows 7...
Recently I switched to ubuntu 9.04 & I love it. Its much better than windows. Now I can play audio to my Nokia BH-103 via a2dp thanx to my ubuntu..
Linux rocksssssssssssssssssss
Thanx couldn't have done it without you....