Summary
Add support for displaying individual battery levels for Bluetooth TWS devices, including:
- Left earbud battery
- Right earbud battery
- Charging case battery
- Charging status for each component, when available
Currently, Linux desktops commonly display only a single battery percentage for Bluetooth headsets, even when the device provides separate battery information for each component.
Motivation
Many modern TWS earbuds expose independent battery information for the left earbud, right earbud, and charging case.
Android and vendor applications are often able to display this information, while Linux usually exposes only a single generic battery percentage.
Providing detailed battery information directly in LuminusOS would improve the Bluetooth experience and make device integration feel significantly more complete.
Example:
Current
Galaxy Buds — Battery: 72%
Proposed
Galaxy Buds
- Left: 72%
- Right: 68%
- Case: 91% — Charging
Proposed Implementation
Implement a Bluetooth battery service/daemon on top of BlueZ with an extensible provider architecture.
Possible providers could include:
- Standard Bluetooth Battery Service (BAS)
- Multiple BAS instances for devices exposing separate components
- Google Fast Pair battery information
- Vendor-specific providers when necessary
- BlueZ
Battery1 as a generic fallback
Conceptually:
Bluetooth Device
│
▼
BlueZ / BLE / GATT
│
▼
Luminus Bluetooth Battery Service
│
┌───┼───┐
▼ ▼ ▼
Left Right Case
│
▼
LuminusOS Bluetooth UI
The system should automatically use the most detailed battery information available.
If only one battery value is available, the current behavior should remain unchanged.
Suggested MVP
Initial implementation could support:
- BlueZ battery information
- Standard Bluetooth Battery Service
- Detection of multiple battery components
- Left / Right / Case representation
- Charging state when available
- Automatic fallback to a single battery percentage
Additional protocol/vendor support could be added later through separate providers.
Future Extensions
Possible future providers:
- Google Fast Pair
- Apple AirPods
- Samsung Galaxy Buds
- Nothing / CMF
- Xiaomi / Redmi
- Huawei
- Sony
- JBL
- Other vendor-specific implementations
Expected Result
The Bluetooth panel could display something similar to:
Galaxy Buds
L 72%
R 68%
Case 91% ⚡
This would provide a more complete Bluetooth experience while keeping the implementation modular and avoiding the need to maintain a custom BlueZ fork.
Summary
Add support for displaying individual battery levels for Bluetooth TWS devices, including:
Currently, Linux desktops commonly display only a single battery percentage for Bluetooth headsets, even when the device provides separate battery information for each component.
Motivation
Many modern TWS earbuds expose independent battery information for the left earbud, right earbud, and charging case.
Android and vendor applications are often able to display this information, while Linux usually exposes only a single generic battery percentage.
Providing detailed battery information directly in LuminusOS would improve the Bluetooth experience and make device integration feel significantly more complete.
Example:
Current
Galaxy Buds — Battery: 72%Proposed
Galaxy BudsProposed Implementation
Implement a Bluetooth battery service/daemon on top of BlueZ with an extensible provider architecture.
Possible providers could include:
Battery1as a generic fallbackConceptually:
The system should automatically use the most detailed battery information available.
If only one battery value is available, the current behavior should remain unchanged.
Suggested MVP
Initial implementation could support:
Additional protocol/vendor support could be added later through separate providers.
Future Extensions
Possible future providers:
Expected Result
The Bluetooth panel could display something similar to:
This would provide a more complete Bluetooth experience while keeping the implementation modular and avoiding the need to maintain a custom BlueZ fork.