9

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 https://wiki.archlinux.org/index.php/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]

https://www.freedesktop.org/wiki/Software/PulseAudio/Backends/ALSA/Decibel/ 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.

14

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
|improve this answer|||||
  • 2
    Wow, this is instant and very effective. This means there is a need to configure bluetooth device. – excalibur May 3 '19 at 11:46
  • 3
    Neither mort or VMG answer worked for me. Sound with an up-to-date archlinux and a Sony WH-1000XM3 is still quite low, even at the maximum volume the system proposes. – azmeuk Jun 8 '19 at 11:00
  • I've never been so happy about being completely deafened by this working! This 100% will solve your bluetooth headphone low-volume problems, so prepare yourself! haha – tester Jul 15 '19 at 3:21
  • 3
    Didn't work for me – Alexandre Bourlier Nov 26 '19 at 22:26
  • More people need to upvote this answer! Stumbled around the interwebs for an hour with no luck, and then this worked perfectly. I'm on "stock" Ubuntu 19.10. – Dan Y Dec 2 '19 at 21:26
4

My fix on kubuntu:

sudo nano /lib/systemd/system/bluetooth.service

Change

ExecStart=/usr/lib/bluetooth/bluetoothd

to

ExecStart=/usr/lib/bluetooth/bluetoothd --plugin=a2dp

then

sudo systemctl daemon-reload
sudo systemctl restart bluetooth

The effect should be immediate!

|improve this answer|||||
  • Note that it is preferable to use sudo systemctl edit bluetooth as opposed to editing the unit file directly. – Marc.2377 Dec 5 '19 at 2:23
2

Removing AVRCP did not work for me with my WF-1000XM3. What worked was in fact the opposite. I used AVRCP to send volume up commands directly. I used D-Bus to interact with BlueZ following this answer.

In my case the full command was:

dbus-send --print-reply --system --dest=org.bluez /org/bluez/hci0/dev_<mac_address_of_headphones> org.bluez.MediaControl1.VolumeUp
|improve this answer|||||
  • Hi, Thank for sharing this. I have the same headphones but no /org/ folder. I'm not sure where to look for, find / -name bluez didn't bring anything relevant. Any suggestion? – Alexandre Bourlier Nov 26 '19 at 22:35
  • The path is not a file path but a D-Bus path. There is a Gnome debugging app called D-Feet that lets you inspect D-Bus interfaces. You should be able find the right object path. There is a good chance that it will match the one I found so you could just replace the mac address as a first try. Replace ":" with "_", for example: "dev_01_AB_23_CD_45_EF" – beetix Nov 28 '19 at 8:53
  • This worked for me, thanks! Any chance it can also be made to work for the bluetooth microphone (over the HSP profile)? I looked over the available methods with D-Feet but there doesn't appear to be one. – Marc.2377 Dec 5 '19 at 2:58
0

For me on Ubuntu 18.04, neither --noplugin=avrcp nor --plugin=a2dp worked to get my AirPods working at full volume. I found that there was a DBus property at /org/bluez/hci0/dev_<MAC here>/fd0 that allowed setting the volume via AVRCP, but it doesn't work by default for whatever reason. I changed the source code within bluez as shown below to get it to work:

profiles/audio/transport.c

static gboolean volume_exists(const GDBusPropertyTable *property, void *data)
{
    struct media_transport *transport = data;
    struct a2dp_transport *a2dp = transport->data;

    return TRUE; // <-- Always return true to allow Volume to be set
}

After rebuilding and installing bluez and reinstalling pulseaudio-module-bluetooth, you should be able to connect to your AirPods or any other AVRCP-controllable device and issue the following command to set the volume.

dbus-send --print-reply --system --dest=org.bluez /org/bluez/hci0/dev_<mac address>/fd0 org.freedesktop.DBus.Properties.Set string:org.bluez.MediaTransport1 string:Volume variant:uint16:###

### should be replaced by a volume from 0 to 127

|improve this answer|||||

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.