The idea

I wear Shokz OpenRun Pro 2 bone-conduction headphones for most calls and a lot of music. Their settings, like the equaliser and whether they stay connected to two devices at once, can only be changed in Shokz’s phone app. My laptop runs Fedora Linux, so switching from a podcast EQ to a call EQ meant picking up the phone, opening the app and waiting for it to find the headset. Shokzer does the same from the laptop, as a small desktop app or from the command line.

How it works

The headset has a separate Bluetooth channel for settings, next to the one that carries sound. The open-source Android app Gadgetbridge had already worked out what goes over that channel. I used its code as the map, then checked every command against my own headset before relying on it. That turned up two things the map didn’t show: some replies arrive split into pieces, and the value for “multipoint off” is different from what was assumed.

Careful by design

Shokzer sends each change once and only calls it done when the headset reports the new setting back. If it can’t confirm a change, it says so instead of trying again. It never pairs or connects devices on its own, and it leaves the sound itself to the normal audio settings. Other firmware versions of the same headset work too, with a note asking for a report on how it went.

It’s on GitHub with an RPM for Fedora and an installer for other Linux distributions.

A hobby project

I built Shokzer for my own headset, with an AI coding assistant doing most of the writing, and it does what I need. It isn’t under active development, and the README is honest about it: it’s AI slop, so use it at your own risk and don’t take it too seriously.

Inside Shokzer

Two views of the Shokzer window. Left: battery, firmware and the equaliser presets, with Custom selected. Right: five custom EQ bands with an Apply button, and a Connections section with Multipoint switched on, this computer connected and a phone not connected.
The whole app in one window: battery and firmware, EQ presets, a five-band custom EQ, and which devices the headset is connected to.
A terminal running shokzer status, shokzer eq set vocal, shokzer eq custom -2 0 1 3 -5 and shokzer multipoint status. Each change reports the setting before, the setting read back, and confirmed.
The same from the command line. Each change shows the setting before and the one read back from the headset.
Two more views of the window. Left: the Vocal preset is being set, with a spinner and the other controls paused. Right: a banner saying the firmware hasn't been tested yet, with a Report button.
While a change is on its way, everything else waits. On firmware nobody has tested yet, everything still works, and a banner asks for a report.