Files
2026-09-24 13:21:16 +02:00

2.6 KiB

bt-volume-step

bt-volume-step

Clean volume steps for Bluetooth headphones and speakers.

One press or swipe on your device becomes one clean step on your volume slider.

Install | How to use | Report a bug

Buy me a coffee on Ko-fi

Volume after each swipe on AirPods Pro
Before 6 · 13 · 19 · 25 · 31 · 38 · 44 · 50 ...
After 5 · 10 · 15 · 20 · 25 · 30 · 35 · 40 ...

Install

yay -S bt-volume-step
systemctl --user enable --now bt-volume-step

Needs PipeWire and Python 3.9 or newer.

How to use

Connect your device and press volume up three or four times. Now it knows the device and every step is clean.

bt-volume-step --show    # what it measured
bt-volume-step --reset   # forget it

More

How it works

Many Bluetooth devices only know a few volume steps (AirPods Pro: 16), and they send the volume as a number, not as "up" or "down". bt-volume-step only looks at which way the volume moved and sets a clean step of its own. The device takes that new volume without a word, so nothing fights back.

It only steps in once it has seen the same jump three times. Until then it just watches.

Settings

On KDE Plasma the step comes from System Settings → Audio → Volume step, elsewhere it is 5 %. To change more, use systemctl --user edit bt-volume-step:

BT_VOL_STEP Fixed step in percent
BT_VOL_DEVSTEP Fixed device step, skips measuring
BT_VOL_MAC Only this device (MAC with _ instead of :)
BT_VOL_MAX Highest volume in percent (default 100)
Limits
  • A volume change from somewhere else that happens to match one or two device steps can be read as a swipe.
  • Devices that report their volume back are not supported. Set a volume and check after a few seconds with pactl get-sink-volume: if it moved on its own, this tool is not for that device.
Build from source
sudo make install
make check

make install PREFIX=$HOME/.local works without root.

BSD 3-Clause.