Your Linux Data Center Experts

I've been using a bluetooth headset connected to my laptop for a while now, and the state of Linux support for this setup is still in flux. Read on for a current status report.

The Bluetooth ALSA folks are the ones who have been working on headset support in Linux. Progress seems to be slow but steady, but still has a ways to go before it's easy.

The old setup that I have been using for many months is described on the web site under the Legacy drivers section of the build page. Basically under this setup you have a kernel module that's loaded and creates a ALSA Bluetooth headset device. You then use either a btsco (connect to the headset as needed) or a btsco2 (connect and stay connected all the time) module to talk to the kernel driver. This setup works and the sound quality is not too bad. The btsco program has a tendency to take 3-5seconds to connect to your headset, so when you answer a call there is a noticeable lag before you can talk. The btsco2 program runs down your headset battery as it's always connected, but you don't have the initial lag when answering or making new calls.

The big downside of this setup is needing the kernel module. You have to remember to build it on every kernel upgrade from your vendor, and if things change in the kernel you may have to tweak the code to keep up. Also, the module can't handle suspend/resume, so on my laptop I have to remember to make sure that module is unloaded before suspending, or my laptop won't come out of it's big sleep. Additionally, if the headset runs out of power and you are using the btsco2 application, it will start taking up 100% of your CPU, which is annoying.

That is the older, legacy setup. The Bluetooth ALSA guys have taken a new (and I think better) approach for a second attempt. With the new setup, there is NO kernel module needed. The new module is called 'plugz'. There are 2 user space daemons, depending on if your headset will do stereo or not. For older plain headsets like mine, there is 'headsetd'. You simply fill in your headsets bluetooth id in a $HOME/.asoundrc file, then start headsetd. This daemon uses HAL to talk to the bluetooth and ALSA hardware. It still has the 3-5 second lag when starting or answering a call, but the sound seems improved from the legacy method.

Unfortunately, the new setup requires patches to the kernel itself, or odd things happen. I was able to use the headsetd just fine for a while until I needed to send a DTMF tone on a call. Doing that caused my laptop to totally lock up. Hopefully they will get this patch merged and I can move to using the new plugz setup full time. Applying kernel patches and making custom kernels is something I really try and avoid these days.

So, we still have a ways to go, but once the kernel patch gets merged for the new setup, I might just submit plugz packages to Fedora. If there is an easy package, using a bluetooth headset should be as easy as adding your headset ID and driving on.

comments powered by Disqus

Join our other satisfied clients. Contact us today.