MadLittleMods / MadLittleMods/linux-notes
Bose Ultra Open Earbuds do not play/pause reliably on Linux
Nobody has claimed this yet.
- 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
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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