I kept on rambling about my headset and got asked for my personal impressions, I thought this could be reason enough to write a short personal review for my blog. So here it is.
Note that this is my personal view and my personal experience using these devices with Pulseaudio on a Debian/Linux machine, your experience may vary a lot.
The headset is currently using firmware 2.3.8 and the USB Dongle, a Jabra Link 380, is using firmware 1.10.9, both are the latest available at this point.
In general I am happy with the Quality of the Headset and especially with the Jabra Support. I had some questions regarding the SDK they provide and they replied very quickly. However, given the price of these devices I am not completely satisfied with some of the annoyances that I experienced over the last weeks that I am using the device on a daily base for listening to music, watching online Videos, e.g. tutorials, and joining online meetings.
Let’s first take a look at the features of the device.
The headsets comes with a USB-A to USB-C cable and, in contrast to statements in the manual, will not only charge via USB but also be recognized as USB sound card using the cable.
The battery capacity is high enough for me to listen to music the whole day, recharging is fast and it can be charged while in use via Bluetooth as well.
The headset also features ANC, but that’s already one of the parts I am not completely happy with. When enabling ANC I notice a noise floor, that increases and decreases slowly (within 1-2 seconds) depending on outside noise. It is loud enough for me to be heard even with silent music playing. This is quiet (sic) different from the Bose QC that I used before.
A nice feature however is, that I can pair the headset with two devices at once, so I can keep it connected to my mobile phone to change settings, while using it with my PC.
But this also can lead to confusion and frustration. It is not always clear to me, to which device button presses are sent. Sometimes pressing play starts the music on my mobile phone, sometimes it starts the music playing on my PC. Sometimes pressing the center button on the right earpiece enables the Busy light, sometimes the phone starts talking in the bedroom and explains, somewhat loudly, at night, that I need to add some permissions to the Jabra App to enable voice commands.
You may also want to double check if an incoming call on your phone in DNT mode will disconnect you from a running online meeting with your colleagues, while speaking.
Speaking of audio, here comes one of the biggest disappointment, but it is a general issue with two-way audio via Bluetooth.
I made the naïve assumption, that when using the headset together with the provided USB dongle, the audio quality in meetings would be the same as when listening to music for me and comparable to a regular microphone for the other participants when I am speaking. This is sadly not the case.
By using the Jabra Link USB-Interface, which is presenting itself as an USB sound card to the host, I don’t have to rely on the BT stack of my Operating System, but the sound quality still is drastically reduced whenever I switch the profile to enable the microphone. Which is the next annoyance.
I usually have to manually switch my audio profile to the Low Quality two-way mode (which still is a lot better than the regular codec using the Linux BT-Audio stack) because especially my browser does not detect the microphone otherwise.
But then people tell my that the microphone in my Webcam sounds better than the Jabra headset. Sad.
While we are at it, the next annoyance, which could be related to Pulseaudio, is that when I by accident switch the USB-adapter to the Bluetooth profile with AC3, I will start to hear very loud buzzing noises from the headphones and its completely unusable.
I wrote myself a rough shell script to quickly switch between profiles, you can find it below, so I will not by accident choose the wrong one again.
But the issue that annoyed me the most recently is the fact that the Jabra Link USB dongle will automatically disable the audio-link to the device, depending on the sound level it sees.
This means that for example when watching a tutorial where the host is pausing the voice track for more than 2 seconds, I will lose the next 3-4 seconds of content, as the dongle turns off the audio link after 2 seconds of ’silence‘, then takes a short period of time to re-activate it and then the headsets starts to slowly fade in again.
I found two ways of working around it: constantly play a sine wave that is quiet enough so I can not hear it while being loud enough for the Jabra Link to stay enabled or use the SDK and manually enable the audio link permanently. (It is not a Pulse Issue, I checked.) I opened a ticket with Jabra, lets see.
Unfortunately this also means that you will not be able to hear any sound notifications from your phone or PC when not already listening to music, as the ‚ding‘ will already be over until the headset has completely faded it.
However, this is of course not the case when the headset wants to inform you at 3 a.m. while coding and listening to some light background music that the BATTERY IS LOW – PLEASE CHARGE. At least I was awake then.
Speaking of Jabra and after I already mentioned the ‚SDK‘ – let’s talk about that.
Jabra is providing SDKs for various operating systems, including Linux, specifically they support Ubuntu and just released a new version of the SDK. However keep in mind, that the ‚SDK‘ is a pre-compiled closed-source .so file that needs to be linked with your software and itself is linked with a LOT of external dependencies in your system:
…/64-bit$ ldd libjabra.so.126.96.36.199 linux-vdso.so.1 (0x00007fffad5da000) libasound.so.2 => /usr/lib/x86_64-linux-gnu/libasound.so.2 (0x00007fd2e30fe000) libudev.so.1 => /usr/lib/x86_64-linux-gnu/libudev.so.1 (0x00007fd2e30d6000) libssl.so.1.0.0 => not found libcrypto.so.1.0.0 => not found libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fd2e30b9000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fd2e2eec000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd2e2da6000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fd2e2d8c000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd2e2bc7000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fd2e2bc1000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fd2e2b9f000) /lib64/ld-linux-x86-64.so.2 (0x00007fd2e3686000)
I was unable to use the previous SDK, as it was linked against an old openssl library (see above), and opened a ticket with Jabra. They responded quickly and helpful and indeed already prepared a new release. They also told me, that the new version is not depending on openssl any more as they are now using libcurl. Well, take a look below to learn what that means – I will not comment any further on that here – but I don’t see a future-proof way of controlling the device from my desktop, e.g., switching audio profiles, ANC, enabling the busy-light and so on.
.../64-bit$ ldd libjabra.so.188.8.131.52 linux-vdso.so.1 (0x00007ffeb01fd000) libcurl.so.4 => /usr/lib/x86_64-linux-gnu/libcurl.so.4 (0x00007f0f7602b000) libasound.so.2 => /usr/lib/x86_64-linux-gnu/libasound.so.2 (0x00007f0f75f2e000) libudev.so.1 => /usr/lib/x86_64-linux-gnu/libudev.so.1 (0x00007f0f75f06000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f0f75d39000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0f75bf5000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f0f75bdb000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0f75a14000) libnghttp2.so.14 => /usr/lib/x86_64-linux-gnu/libnghttp2.so.14 (0x00007f0f759e7000) libidn2.so.0 => /usr/lib/x86_64-linux-gnu/libidn2.so.0 (0x00007f0f759c6000) librtmp.so.1 => /usr/lib/x86_64-linux-gnu/librtmp.so.1 (0x00007f0f759a7000) libssh2.so.1 => /usr/lib/x86_64-linux-gnu/libssh2.so.1 (0x00007f0f75972000) libpsl.so.5 => /usr/lib/x86_64-linux-gnu/libpsl.so.5 (0x00007f0f7595e000) libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f0f758c9000) libcrypto.so.1.1 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f0f755d5000) libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007f0f75582000) libldap_r-2.4.so.2 => /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2 (0x00007f0f7552c000) liblber-2.4.so.2 => /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2 (0x00007f0f7551b000) libbrotlidec.so.1 => /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1 (0x00007f0f7550d000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f0f754ee000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f0f754cc000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0f754c6000) /lib64/ld-linux-x86-64.so.2 (0x00007f0f76552000) libunistring.so.2 => /usr/lib/x86_64-linux-gnu/libunistring.so.2 (0x00007f0f75344000) libgnutls.so.30 => /usr/lib/x86_64-linux-gnu/libgnutls.so.30 (0x00007f0f75145000) libhogweed.so.6 => /usr/lib/x86_64-linux-gnu/libhogweed.so.6 (0x00007f0f750fa000) libnettle.so.8 => /usr/lib/x86_64-linux-gnu/libnettle.so.8 (0x00007f0f750b2000) libgmp.so.10 => /usr/lib/x86_64-linux-gnu/libgmp.so.10 (0x00007f0f75031000) libgcrypt.so.20 => /usr/lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007f0f74f11000) libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007f0f74e37000) libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007f0f74e07000) libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007f0f74dff000) libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007f0f74df0000) libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f0f74dd6000) libsasl2.so.2 => /usr/lib/x86_64-linux-gnu/libsasl2.so.2 (0x00007f0f74db9000) libbrotlicommon.so.1 => /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1 (0x00007f0f74d96000) libp11-kit.so.0 => /usr/lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007f0f74c60000) libtasn1.so.6 => /usr/lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007f0f74c4a000) libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007f0f74c24000) libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007f0f74c1d000) libffi.so.7 => /usr/lib/x86_64-linux-gnu/libffi.so.7 (0x00007f0f74c11000)
I really wished to be able to control the Busy light manually, to indicate if I don’t want to be disturbed – while one should be able to use the center button for that, I have not completely understood when the button is controlling the Busy light, when it is starting a voice command on my mobile phone and when it’s just doing nothing.
To wrap up let’s look at some other minor details. One of the comfort features of the device is, that it detects when you wear it. Whenever you take the headset off (of left ear) it will detect that, pause your music and restart it when you put it back on. In a meeting it will mute the microphone, so you will not by accident broadcast your home or office chatter.
Nice feature, if it would work reliably. The first issue is the on-ear detection that suddenly stopped working reliably. I am unable to find any information how it works, only that you should make sure to remove long hair from between the headset cushions and your head/ear. However, the effect was me being suddenly muted in a meeting and music randomly pausing.
Speaking of pausing, the device is sending the pause-event, which unfortunately seems to mean that when I take the headset off my head or turning it off can also start the music on my desktop when I stopped manually before.
Finally I suggest you to try out the device if it fits your head-contours. It seems I have one point at the top of my skull where most of the devices weight is pushing which can make it uncomfortable to wear after some time.
My DT 770 here use a band that sits flush around your head, while the Jabra headset uses a cushion which does not distribute the pressure evenly.
Also moving my head or the headset often results in noise coming from the plastic joints, which is really unexpected looking at the price tag.
And here is the script to quickly switch profiles:
#!/bin/bash if [ "$1" == "meeting" ]; then profile="output:iec958-stereo+input:mono-fallback" else profile="output:iec958-stereo" fi card="$(pacmd list-cards | sed -n 's/^.*name: <\(.*Jabra_Link_380.*\)>/\1/gp')" pactl set-card-profile "$card" "$profile"