Arch Linux – Fix Bluetooth Headset Volume Too Low

arch linuxaudiobluetoothpulseaudio

I connected a pair of AirPods to everything I could. Android, OSX, Linux Mint, Arch LInux. It sounds great on all of them, but when connected under Arch, I can get get less than half the volume even if I max all volumes I can find. It's strange that Mint gets the volume right. I switched to Linux Mint for a while for this exact reason. But I prefer Arch. It's smoother and faster. Pacman is another easy to use tool.
However, I searched for all and any solutions to bluetooth volume, but none worked.
Volume on wired headphones and laptop's speakers is loud and clear. Problem only exists in bluetooth device that relies on source to set volume. If the device has own volume buttons, then I can pump up the volume all the way.

From Gnome Sound Settings I tried going over 100%, but the sound is distorted.

I tried alsamixer and pavucontrol. All volumes are maxed, but I only get Intel card and PulseAudio. should I also have a bluetooth volume?


I also found PulseAudio/Troubleshooting – Volume adjustment does not work properly which mentioned the volume cap of 65536. Since sound is clear, I believe this volume limit is the source of my problem. But even if I try to increase the volume as mentioned there, I cannot get past the upper limit of 65536.

$ amixer set Master 12345+
Simple mixer control 'Master',0
  Capabilities: pvolume pswitch pswitch-joined
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 65536
  Mono:
  Front Left: Playback 65536 [100%] [on]
  Front Right: Playback 65536 [100%] [on]

Debugging Bad dB Information of ALSA Drivers describes the same problem, but I could not get any information using this tool.

I believe there should be a way to set a config per bluetooth device and set the lower and upper limits.
Alternative, maybe setting the volume to dB instead of absolute value might help, but disabling flat-volumes in /etc/pulse/daemon.conf did nothing.

The only comparison I was able to make against LinuxMint is that Mint sets dB instead of absolute value. (I have a live USB so I can boot any time in Mint)

Any suggestion is welcome.

Best Answer

VMG's answer is subtly wrong; it will technically work, but it will disable all other plugins than a2dp, meaning bluetooth keyboards/mice/gamepads/etc will stop working, when the only plugin causing issues seems to be one called avrcp.

Edit

/lib/systemd/system/bluetooth.service

and change

ExecStart=/usr/lib/bluetooth/bluetoothd

to

ExecStart=/usr/lib/bluetooth/bluetoothd --noplugin=avrcp

and run

sudo systemctl daemon-reload
sudo systemctl restart bluetooth
Related Question