Going A2DP only on Linux

So if you know me you probably know that you rarely see me without headphones on.  I am not really a collector of anything, except when it comes to heaphones.  I own way more headphones than anyone should.  My latest pair were a Christmas gift from my amazing wife, a pair of Bose Soundlink On Ear Bluetooth headphones(they are absolutely amazing).

The Problem With Standards

I love standards, they make everyones lives easier, but the problem with bluetooth is that it often shows its age.  Anyone who has even a little bit of experience knows that bluetooth might be described as “finicky”.  The way bluetooth deals with different devices is with different profiles.

Advanced Audio Distribution Profile

board uses the “Human Interface Device” profile, a profile for transferring files between devices, there are even profiles for things like faxing over bluetooth(because that is a good idea).

When it comes to headphones there are actually a couple of different profiles that come into play.  The first two are often combined, and are the “Hands Free Profile“(HFP) and the “Headset Profile“(HSP).  Now you might think this is the profile that this is the profile for you!   Well let me tell you why these profiles suck.  The goal of the Headset Profile is to do things like “use your bluetooth headset to answer calls on Skype or your phone”, which include speaking using the mic.  Because bluetooth has been around forever it doesn’t actually have a lot of bandwidth to play around with and the mic uses up half of the bandwidth of the connection leaving not a tonne of bandwidth for the audio that you hear.  The result is that you sound and hear in AM radio quality and in mono(i.e. no distinction between left and right).  This Profile was standardized very early on and the designers obviously were thinking purely about people using this in the context of phone calls where audio quality is already suspect.


Then came the Advanced Audio Distribution Profile(A2DP).  This profile was designed with the idea that you would want better sound quality and want to listen to something in high quality stereo.  This profile sacrifices the mic due to the bandwidth constraints of bluetooth, but lets you listen to whatever your listening to in a way that doesn’t sound like chalk on a chalkboard.


But I Don’t Actually Care About Having a “Headset”

The thing is that on my Android phone it does a pretty good job of switching between these to profiles.  In Windows, I can actually disable the “headset profile” in the list of audio devices in the audio devices preferences, so that I only hear things in stereo(A2DP).  My computer already has a mic thanks very much, I don’t need to use the one built-in to my headphones and sound like I’m from the 1930’s. This solution works well enough, but like most Windows solutions it isn’t “Nirvana”, I still have to often disable the headset profile after re-connecting.

So how do I do it on Linux?  I use Linux in virtual machines all the time, but I have recently been using it on a laptop again, and it has driven me crazy how often it flips me into HSP/HSF mode and will not change to A2DP mode.  It turns out to be surprisingly easy.  I’m using Elementary OS but, I’m sure it would be similar on most Ubuntu/Debian derivatives.  Your mileage may vary, with others.

sudo nano /etc/bluetooth/audio.conf

And then add “Disable=Headset” under “[General]”.


Then restart bluetooth.

sudo service bluetooth restart

That is it!  You are done.  Your headphones will now only connect via A2DP.  This solution works even better than Windows, as it happens every time you connect a pair of headphones.

Photo Credit





9 thoughts on “Going A2DP only on Linux

  1. Compared to Windows, I find that my bluetooth audio will “de-sync” after a period of time, or if I go out of range for a second. On Windows this isn’t an issue. How do I correct this in Linux? Thanks!

  2. Hi Jim,

    I am not a specialist in BT and faced this problem just recently, as only not long ago I decided to get rid of cables. I found out my mic gets disabled when I switch to A2DP. I saw tens of bug reports related to this and it seems noone is able to explain to the masses if this is a feature or a bug :).

    Please be so kind and bring more light to this matter. Is there no newer BT standard with enough bandwidth to be able to use both A2DP and mic of the BT headset?



    1. Unfortunately the A2DP profile is a stereo headphones only profile. That means no mic. I think the reason for this is that bluetooth was established a long time ago, when sending higher quality audio while listening in stereo wasn’t a thing. No one would do that on a phone.

  3. Thanks for this… worked for me in Gnome 3 / Fedora 24 by editing /etc/bluetooth/main.conf (audio didn’t exist). In that file I also found a setting named “FastConnectable”, which defaulted to false but mentioned a tradeoff of higher power consumption. Anyway, I set that to true also.

    I wonder, if there is a user config file for BlueZ also that is loaded, or something like /etc/bluetooth/conf.d or something… editing files in /etc leads to issues when updating the related packages.

  4. Hey Jim!

    Sounds you have a good idea about Bluetooth + Linux, do you have additional ideas about how to make that A2DP profile permanent?

    Thing is, despite the setting change in `main.conf`, the adapter and/or Linux very often switches back to Headset profile (and terrible radio-like quality).

    Got the same behavior on Kubuntu 18.04.1 a few days ago, and now on Mint 19 as well.

  5. I have tried all kinds of different solutions for a good 2 years now, both on my stationary and on my laptop (16.04 and 18.04), and I still haven’t managed to automatically connect to a2dp.

    When I turn on my headphones they automatically connect and use the “headset” profile – which I’ve disabled in both audio.conf and main.conf – and a2dp is not in the list of available profiles. I then manually disconnect and connect in bluetooth settings, voila, I have a2dp and it works. It’s a considerably longer procedure than the one I had to use in 16.04, but it’s still annoying to have to do several times a day

    It baffles me that this is still a problem for so many, you can find people asking about this in 2010.

    If anybody has any other suggestions I’m all ears.

Leave a Reply to Atanas Cancel reply