Fixing OSX Bluetooth the hard way

Some time ago i decided to cut cords and go wireless on my audio equipment. I listen a lot to music when commuting or working but also regulary use a headset for computer games. Carrying a fixed line headphone around all the time is a mess. Going wireless there are basicially two options, either proprietary RF or Bluetooth. The latter has the advantage of being implemented in almost all kind of mobile equipment while proprietary RF is often optimized for range. Bluetooth offers plenty of throughput and codecs like aptX provide real good stereo sound quality at 352kbit/s when using simplex (e.g. listening to music). This however is not true when also using the microphone of the headset - in this case A2DP falls back to its mono “hands-free” profile which sounds like a analog mobile phone 25 years ago. It’s beyond my understanding why there is no “good enough” duplex operation mode for high-end headsets.

Anyway, since this is not my primary use-case i evaluated lots of Bluetooth headsets and chose the Sennheiser Urbanite XL Wireless. The thing with companies like Sennheiser is that they actually know how to build audio equipment in a proper way and are not purely focused on marketing and fashion. They run circles around those fancy Beats headphones when it comes to battery life, durability, utility and sound quality. Using this headset with my phone and workstation computer is bliss. On my Mac Book Pro (2013) however, it was just a never ending pain.

While connecting and operating the headset works perfectly most of the time, in some situations the transmission drops every couple of seconds for a fraction of a second which drives one crazy when trying to focus or just enjoying music. There are lots of guides and suggestions to fiddle around with Bluetooth parameters on OSX to “solve” this kind of issue. Sadly none of those helped in my case, probably because those workarounds changed the bitrate while my setup does not seem to have any kind of bandwidth or connection quality issues.

What helped to reduce the number of connection drops was wiping and re-installing OSX. I think parts of the problems were related to changing those Bluetooth paramters. Still, the issue appeared every now and then. To solve it, i finally decided to bypass the built in Bluetooth module, which is actually integrated to the Wi-Fi module. Changing this module requires to get a $100 Apple proprietary replacement and rip apart the machine to install it. As an alternative, i got a small €15 ASUS USB-BT400 dongle with Broadcom chipset, which supports aptX. There are even smaller dongles but the smallest ones are not built to safely stay in place on the USB port. Others were a bit bigger and blinking like mad.

Obviously there is no easy way to disable the integrated Bluetooth hardware at System Preferences or elsewhere. In order to do so, you need to download Apples “Hardware IO Tools” from the developer portal. For that you need a Apple Developer subscription ($99/y) or know someone who has access. Make sure to get the latest version which usually supports the latest version of OSX. While those tools are an extension to Xcode, there is no need to actually install Xcode.

After downloading, open the disk image and launch “Bluetooth Explorer”. This tool gives access to a lot of Bluetooth functionality on OSX. We just need the “HCI Controller Selector” from the “Tools” menu, or simply press CMD+K. There you see a list of all present Bluetooth controllers, just select the non-Apple one and hit “Activate”. Removing the Bluetooth dongle may however reset the default.

Enable USB dongle as default

Verify that the USB Bluetooth dongle works fine. To make the external dongle the default even after reboot, use the following command:

sudo nvram bluetoothHostControllerSwitchBehavior=always

Then reboot. To revert to the original settings, you may reset the machines NVRAM or use:

sudo nvram -d bluetoothHostControllerSwitchBehavior

Everyday carry Gute Banken, schlechte Banken
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now