Linux can pair with modern earbuds just fine, but pairing is only half the experience. Battery levels, ANC, transparency, EQ, gestures, and device-specific controls are often locked inside a mobile companion app.
I built EarA to close that gap for Nothing and CMF earbuds.
EarA is an unofficial, GPL-3.0-or-later companion built with Python, GTK4, and libadwaita. It talks directly to compatible earbuds over Bluetooth RFCOMM, while BlueZ and PipeWire handle the host audio side.
What EarA can do
- Show left, right, and charging-case battery levels
- Switch between ANC, transparency, and normal modes
- Apply EQ presets or edit an 8-band custom EQ
- Adjust bass enhancement from level 1 to 5
- Remap pinch gestures
- Switch host audio profiles and codecs
- Ring either earbud with Find My Earbuds
- Run an ear-tip fit test
- Use both a GTK desktop app and a CLI
What changed in 0.5.0
This release focuses on making the app work more reliably across real Linux audio and Bluetooth setups:
- automatic battery refresh with cached case-battery reporting;
- dynamic SDP discovery instead of assuming a fixed RFCOMM channel;
- better PipeWire reconnect handling;
- a proper 1–5 bass-level control;
- CMF Buds 2 support, based on hardware testing from a community contributor;
- packages for Debian/Ubuntu, Fedora/RPM systems, AppImage, and source installs.
The dynamic channel discovery matters more than it may sound. Many devices use RFCOMM channel 15, while newer CMF models can expose the control service on channel 16. Discovering the channel through SDP avoids baking one model's behavior into the application.
Community contribution in practice
The CMF Buds 2 work came from a user who had already investigated the protocol and tested it on hardware. Their findings were integrated upstream rather than reimplemented in isolation. That contribution also helped improve the generic connection path for other models.
CMF Buds 2 Plus support is still provisional, so real-device reports are especially useful. The CLI can generate structured status output, and contributors can redact Bluetooth addresses and serial numbers before sharing it.
Try it
- Interactive demo: https://oneydef.github.io/EarA-linux/
- Source code: https://github.com/oneydef/EarA-linux
- v0.5.0 downloads: https://github.com/oneydef/EarA-linux/releases/tag/v0.5.0
- Support matrix: https://github.com/oneydef/EarA-linux/blob/main/LINEUP.md
EarA is an independent community project and is not affiliated with Nothing Technology or CMF. Bug reports, hardware results, translations, and pull requests are welcome.
Top comments (0)