MadLittleMods / MadLittleMods/linux-notes

Bose Ultra Open Earbuds do not play/pause reliably on Linux

Open
#60 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

x-needs-solution
Dominant language
No language data
Stars
2
Forks
0
PR merge metrics
No merged PRs in 30d

Description

### Background: Airpods

Using `sudo evtest` (`pamac install evtest`), with normal Airpods, I can see both of these events happen any time I double tap the side of the Airpods and it successfully play/pauses whatever I'm listening to:

```
Event: time 1769337097.313386, type 1 (EV_KEY), code 200 (KEY_PLAYCD), value 1
Event: time 1769337097.313386, -------------- SYN_REPORT ------------
Event: time 1769337097.563362, type 1 (EV_KEY), code 200 (KEY_PLAYCD), value 0
Event: time 1769337097.563362, -------------- SYN_REPORT ------------
```

sudo evtest (Airpods)

```shell
$ sudo evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
...
/dev/input/event22: Eric’s AirPods #2 (AVRCP)
...
Select the device event number [0-22]: 22
Input driver version is 1.0.1
Input device ID: bus 0x5 vendor 0x4c product 0x200f version 0xd415
Input device name: "Eric’s AirPods #2 (AVRCP)"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 2 (KEY_1)
Event code 3 (KEY_2)
Event code 4 (KEY_3)
Event code 5 (KEY_4)
Event code 6 (KEY_5)
Event code 7 (KEY_6)
Event code 8 (KEY_7)
Event code 9 (KEY_8)
Event code 10 (KEY_9)
Event code 11 (KEY_0)
Event code 28 (KEY_ENTER)
Event code 52 (KEY_DOT)
Event code 59 (KEY_F1)
Event code 60 (KEY_F2)
Event code 61 (KEY_F3)
Event code 62 (KEY_F4)
Event code 63 (KEY_F5)
Event code 64 (KEY_F6)
Event code 65 (KEY_F7)
Event code 66 (KEY_F8)
Event code 67 (KEY_F9)
Event code 103 (KEY_UP)
Event code 105 (KEY_LEFT)
Event code 106 (KEY_RIGHT)
Event code 108 (KEY_DOWN)
Event code 113 (KEY_MUTE)
Event code 114 (KEY_VOLUMEDOWN)
Event code 115 (KEY_VOLUMEUP)
Event code 138 (KEY_HELP)
Event code 139 (KEY_MENU)
Event code 163 (KEY_NEXTSONG)
Event code 165 (KEY_PREVIOUSSONG)
Event code 166 (KEY_STOPCD)
Event code 167 (KEY_RECORD)
Event code 168 (KEY_REWIND)
Event code 171 (KEY_CONFIG)
Event code 174 (KEY_EXIT)
Event code 200 (KEY_PLAYCD)
Event code 201 (KEY_PAUSECD)
Event code 208 (KEY_FASTFORWARD)
Event code 353 (KEY_SELECT)
Event code 356 (KEY_POWER2)
Event code 358 (KEY_INFO)
Event code 362 (KEY_PROGRAM)
Event code 364 (KEY_FAVORITES)
Event code 395 (KEY_LIST)
Event code 398 (KEY_RED)
Event code 399 (KEY_GREEN)
Event code 400 (KEY_YELLOW)
Event code 401 (KEY_BLUE)
Event code 402 (KEY_CHANNELUP)
Event code 403 (KEY_CHANNELDOWN)
Event code 405 (KEY_LAST)
Event type 2 (EV_REL)
Key repeat handling:
Repeat type 20 (EV_REP)
Repeat code 0 (REP_DELAY)
Value 300
Repeat code 1 (REP_PERIOD)
Value 33
Properties:
Testing ... (interrupt to exit)
Event: time 1769336695.440069, type 1 (EV_KEY), code 200 (KEY_PLAYCD), value 1
Event: time 1769336695.440069, -------------- SYN_REPORT ------------
Event: time 1769336695.440097, type 1 (EV_KEY), code 200 (KEY_PLAYCD), value 0
Event: time 1769336695.440097, -------------- SYN_REPORT ------------
Event: time 1769336697.123354, type 1 (EV_KEY), code 200 (KEY_PLAYCD), value 1
Event: time 1769336697.123354, -------------- SYN_REPORT ------------
Event: time 1769336697.133351, type 1 (EV_KEY), code 200 (KEY_PLAYCD), value 0
Event: time 1769336697.133351, -------------- SYN_REPORT ------------
```

### Problem: Bose Ultra Open Earbuds

With the Bose headphones, when I click either earbud once, I can only get it to play/pause *once*. Clicking it again does not play/pause again. It's the same events being sent:

```
Event: time 1769337097.313386, type 1 (EV_KEY), code 200 (KEY_PLAYCD), value 1
Event: time 1769337097.313386, -------------- SYN_REPORT ------------
Event: time 1769337097.563362, type 1 (EV_KEY), code 200 (KEY_PLAYCD), value 0
Event: time 1769337097.563362, -------------- SYN_REPORT ------------
```

Only once I pause the audio source and wait 15 seconds (let the connection suspend because it's idle, I'm making assumptions on how Bluetooth works to save battery), can I then play/pause *once* again.

sudo evtest (Bose)

```shell
sudo evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
...
/dev/input/event22: Bose Open Earbuds Ultra (AVRCP)
...
Select the device event number [0-22]: 22
Input driver version is 1.0.1
Input device ID: bus 0x5 vendor 0x9e product 0x4068 version 0x40f
Input device name: "Bose Open Earbuds Ultra (AVRCP)"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 2 (KEY_1)
Event code 3 (KEY_2)
Event code 4 (KEY_3)
Event code 5 (KEY_4)
Event code 6 (KEY_5)
Event code 7 (KEY_6)
Event code 8 (KEY_7)
Event code 9 (KEY_8)
Event code 10 (KEY_9)
Event code 11 (KEY_0)
Event code 28 (KEY_ENTER)
Event code 52 (KEY_DOT)
Event code 59 (KEY_F1)
Event code 60 (KEY_F2)
Event code 61 (KEY_F3)
Event code 62 (KEY_F4)
Event code 63 (KEY_F5)
Event code 64 (KEY_F6)
Event code 65 (KEY_F7)
Event code 66 (KEY_F8)
Event code 67 (KEY_F9)
Event code 103 (KEY_UP)
Event code 105 (KEY_LEFT)
Event code 106 (KEY_RIGHT)
Event code 108 (KEY_DOWN)
Event code 113 (KEY_MUTE)
Event code 114 (KEY_VOLUMEDOWN)
Event code 115 (KEY_VOLUMEUP)
Event code 138 (KEY_HELP)
Event code 139 (KEY_MENU)
Event code 163 (KEY_NEXTSONG)
Event code 165 (KEY_PREVIOUSSONG)
Event code 166 (KEY_STOPCD)
Event code 167 (KEY_RECORD)
Event code 168 (KEY_REWIND)
Event code 171 (KEY_CONFIG)
Event code 174 (KEY_EXIT)
Event code 200 (KEY_PLAYCD)
Event code 201 (KEY_PAUSECD)
Event code 208 (KEY_FASTFORWARD)
Event code 353 (KEY_SELECT)
Event code 356 (KEY_POWER2)
Event code 358 (KEY_INFO)
Event code 362 (KEY_PROGRAM)
Event code 364 (KEY_FAVORITES)
Event code 395 (KEY_LIST)
Event code 398 (KEY_RED)
Event code 399 (KEY_GREEN)
Event code 400 (KEY_YELLOW)
Event code 401 (KEY_BLUE)
Event code 402 (KEY_CHANNELUP)
Event code 403 (KEY_CHANNELDOWN)
Event code 405 (KEY_LAST)
Event type 2 (EV_REL)
Key repeat handling:
Repeat type 20 (EV_REP)
Repeat code 0 (REP_DELAY)
Value 300
Repeat code 1 (REP_PERIOD)
Value 33
Properties:
Testing ... (interrupt to exit)
Event: time 1769337097.313386, type 1 (EV_KEY), code 200 (KEY_PLAYCD), value 1
Event: time 1769337097.313386, -------------- SYN_REPORT ------------
Event: time 1769337097.563362, type 1 (EV_KEY), code 200 (KEY_PLAYCD), value 0
Event: time 1769337097.563362, -------------- SYN_REPORT ------------
```

It doesn't seem to matter whether "Multi-point connection" is enabled or disabled. (Bose app -> select headphones -> settings cog in the top-right -> Bluetooth connections -> Multi-point connection). I think it just sends these events to whatever is the "active stream" which you can switch between.

If we compare this with the next/previous song interaction, it sends the event every single time; but only if the connection hasn't been idle suspended. Same story for adjusting volume although I don't see any events flying around for that.

```
Event: time 1769338882.569811, type 1 (EV_KEY), code 163 (KEY_NEXTSONG), value 1
Event: time 1769338882.569811, -------------- SYN_REPORT ------------
Event: time 1769338882.613143, type 1 (EV_KEY), code 163 (KEY_NEXTSONG), value 0
Event: time 1769338882.613143, -------------- SYN_REPORT ------------
Event: time 1769338885.973196, type 1 (EV_KEY), code 165 (KEY_PREVIOUSSONG), value 1
Event: time 1769338885.973196, -------------- SYN_REPORT ------------
Event: time 1769338885.989835, type 1 (EV_KEY), code 165 (KEY_PREVIOUSSONG), value 0
Event: time 1769338885.989835, -------------- SYN_REPORT ------------
Event: time 1769338888.803215, type 1 (EV_KEY), code 163 (KEY_NEXTSONG), value 1
Event: time 1769338888.803215, -------------- SYN_REPORT ------------
Event: time 1769338888.826500, type 1 (EV_KEY), code 163 (KEY_NEXTSONG), value 0
Event: time 1769338888.826500, -------------- SYN_REPORT ------------
Event: time 1769338890.709847, type 1 (EV_KEY), code 165 (KEY_PREVIOUSSONG), value 1
Event: time 1769338890.709847, -------------- SYN_REPORT ------------
Event: time 1769338890.739822, type 1 (EV_KEY), code 165 (KEY_PREVIOUSSONG), value 0
Event: time 1769338890.739822, -------------- SYN_REPORT ------------
Event: time 1769338892.993172, type 1 (EV_KEY), code 163 (KEY_NEXTSONG), value 1
Event: time 1769338892.993172, -------------- SYN_REPORT ------------
Event: time 1769338893.019819, type 1 (EV_KEY), code 163 (KEY_NEXTSONG), value 0
Event: time 1769338893.019819, -------------- SYN_REPORT ------------
```

If I compare this to the behavior on my phone, it works completely as expected there. Play/pause over and over again and doesn't matter if the connection is idle.

---

I've sent an email to `support@bose.com` but just received an automatic reply that says "After extensive customer feedback we’ve learned that email isn’t the most efficient communication method in ensuring we can satisfactorily resolve your concerns." :feelsgood:

### System details

- Bluetooth adapter: [TP-Link UB400](https://www.amazon.com/TP-Link-Bluetooth-Receiver-Controllers-UB400/dp/B07V1SZCY6)
- Linux distro/version: `lsb_release -sirc` -> `ManjaroLinux 26.0.1 Anh-Linh`
-
```
pamac search bluetooth --installed
bluez-libs 5.85-1 extra
Deprecated libraries for the bluetooth protocol stack
bluez 5.85-1 extra
Daemons for the bluetooth protocol stack
```
- Kernel version: `mhwd-kernel -li` -> `Currently running: 6.6.119-1-MANJARO (linux66)`
- More details: `inxi -F`
```
System:
Host: eric-desktop-pc Kernel: 6.6.119-1-MANJARO arch: x86_64 bits: 64
Desktop: Xfce v: 4.20.1 Distro: Manjaro Linux
Machine:
Type: Desktop System: ASUS product: N/A v: N/A serial:
Mobo: ASUSTeK model: PRIME X670-P WIFI v: Rev 1.xx
serial: Firmware: UEFI vendor: American Megatrends
v: 2616 date: 04/29/2024
CPU:
Info: 8-core model: AMD Ryzen 7 7800X3D bits: 64 type: MT MCP cache:
L2: 8 MiB
Speed (MHz): avg: 4389 min/max: 545/5050 cores: 1: 4389 2: 4389 3: 4389
4: 4389 5: 4389 6: 4389 7: 4389 8: 4389 9: 4389 10: 4389 11: 4389 12: 4389
13: 4389 14: 4389 15: 4389 16: 4389
Graphics:
Device-1: Advanced Micro Devices [AMD/ATI] Navi 31 [Radeon RX 7900 XT/7900
XTX/7900 GRE/7900M] driver: amdgpu v: kernel
Device-2: Advanced Micro Devices [AMD/ATI] Raphael driver: amdgpu
v: kernel
Display: x11 server: X.Org v: 21.1.21 with: Xwayland v: 24.1.9 driver: X:
loaded: amdgpu unloaded: modesetting,radeon dri: radeonsi gpu: amdgpu
resolution: 3840x2160~60Hz
API: EGL v: 1.5 drivers: kms_swrast,radeonsi,swrast
platforms: gbm,x11,surfaceless,device
API: OpenGL v: 4.6 compat-v: 4.5 vendor: amd mesa v: 25.3.3-arch1.1
renderer: AMD Radeon RX 7900 XTX (radeonsi navi31 LLVM 21.1.6 DRM 3.54
6.6.119-1-MANJARO)
API: Vulkan v: 1.4.335 drivers: radv,llvmpipe surfaces: N/A
Info: Tools: api: eglinfo, glxinfo, vulkaninfo de: xfce4-display-settings
x11: xdpyinfo, xprop, xrandr
Audio:
Device-1: Advanced Micro Devices [AMD/ATI] Navi 31 HDMI/DP Audio
driver: snd_hda_intel
Device-2: Advanced Micro Devices [AMD/ATI] Radeon High Definition Audio
driver: snd_hda_intel
Device-3: Advanced Micro Devices [AMD] Ryzen HD Audio
driver: snd_hda_intel
Device-4: Audio-Technica AT2020 USB driver: snd-usb-audio type: USB
API: ALSA v: k6.6.119-1-MANJARO status: kernel-api
Server-1: PipeWire v: 1.4.9 status: active
Network:
...
Bluetooth:
Device-1: IMC Networks Bluetooth Radio driver: btusb type: USB
Report: rfkill ID: hci0 state: up address: see --recommends
Device-2: Cambridge Silicon Radio Bluetooth Dongle (HCI mode)
driver: btusb type: USB
Report: ID: hci1 state: up address: N/A
```
-
```
pamac search pipewire --installed
wireplumber 0.5.13-1 extra
Session / policy manager implementation for PipeWire
manjaro-pipewire 20231009-1 extra
Manjaro meta package for complete PipeWire support.
libpipewire 1:1.4.9-2 extra
Low-latency audio/video router and processor - client library
lib32-pipewire 1:1.4.9-1 multilib
Low-latency audio/video router and processor - 32-bit
lib32-libpipewire 1:1.4.9-1 multilib
Low-latency audio/video router and processor - 32-bit - client library
gst-plugin-pipewire 1:1.4.9-2 extra
Multimedia graph framework - pipewire plugin
pipewire-pulse 1:1.4.9-2 extra
Low-latency audio/video router and processor - PulseAudio replacement
pipewire-audio 1:1.4.9-2 extra
Low-latency audio/video router and processor - Audio support
pipewire-alsa 1:1.4.9-2 extra
Low-latency audio/video router and processor - ALSA configuration
pipewire 1:1.4.9-2 extra
Low-latency audio/video router and processor
```

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Begin by reproducing the Bose and AirPods behavior with `sudo evtest`, then compare the repeated `KEY_PLAYCD` events alongside the listed BlueZ and kernel versions. No project files or tests are named; done means identifying whether the repeated play/pause event is lost in the Linux Bluetooth audio path and documenting the result or a reproducible fix.

Written by the indexing model from the issue text.

Assessment

Tech stack
linux
Domain
operating-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.