Ubuntu 18.04 bluetooth low volume

I'm using Ubuntu 18.04 on a Thinkpad X1C6 to connect to my new Bose Soundlink Revolve speaker. The connection establishes without problems but the sound volume is super low. If I connect with my android phone the volume is way higher so I assume the problem is on the Thinkpad/Ubuntu side and probably more Ubuntu/Software related.

Does anybody have an idea what I can try to fix this issue?

5

10 Answers

Installing pavucontrol solved the problem for me on my Thinkpad T420, Ubuntu 18.04, and a Bose Soundlink Revolve+.

Run:

sudo apt install pavucontrol
pavucontrol

Connect your Bluetooth device to your laptop and start feeding it. Then you should be able to adjust the maximum sound level inside pavucontrol. The volume keys on the laptop work as before, except the maximum is now higher. The settings appear to survive application restarts.

1

Bumping @Jeff Ward's comment to an answer for those who found this question because they had low volume on Sony WF-1000XM3/Sony WH-1000XM2/Bose NC 700 bluetooth headphones:

Same here on the Bose NC 700 -- a firmware update set the volume super low. The solution was turning the volume up on the headphones themselves (via touch - swipe up on the right-front ear cup.)

In my case, adjusting the volume on the headphones themselves was the only solution - no computer setting was able to increase the volume.

1

I have the same problem with Sony WF-1000XM3. They are quite silent on Ubuntu 20.04. Latest Sony firmware update added ability to control volume directly on earphones and it helps. Unfortunately you lose possibility to use other functions on one of earphones.

4

Not sure that this is applicable (don't have the same hardware) but sounds similar to what has already been suggested by jathin-badam and this fixed a similar problem for me with AirPods:

In /lib/systemd/system/bluetooth.service (requires sudo to save changes)

Change this line:

ExecStart=/usr/lib/bluetooth/bluetoothd

To this:

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

Restart the daemon and the Bluetooth service:

sudo systemctl daemon-reload
sudo systemctl restart bluetooth 

Source

2
  1. Install pavucontrol by running:

    sudo apt install pavucontrol
  2. Run:

    pavucontrol
  3. Go to Configuration and search for your Bluetooth device and change the profile to High Fidelity Playback(A2DP Sink).

The volume can be increased at the speaker to bypass over-amplification and avoid the associated loss of audio quality. Install the bluez package (sudo apt-get install bluez) and start mpris-proxy (/usr/lib/bluetooth/mpris-proxy) to activate the volume buttons of the Bluetooth speaker. Afterwards, the volume can be increased directly via the Bose Soundlink Revolve speaker.

1

I have a Sony-WH1000XM3. I fixed this problem by using the gesture of the headset itself to increase the volume.

This is different from the situation in Windows. Adjusting volume by headset won't affect the volume settings in Ubuntu, so maybe all you need to do is adjust the volume from your Bluetooth device side.

0

For many users, the issue is simply that Bluetooth audio devices have a software and hardware volume. Turning up the software volume makes the sound quality worse. Linux doesn't support changing Bluetooth hardware volume*.

Workarounds

As @BassGod and others also mentioned there are two workarounds to this:

  • Have a physical method for adjusting the hardware volume on your Bluetooth audio device.
  • Adjust the hardware volume while the device is connected to Android/iOS/Windows/macOS. Then connect the device to your Linux.

Solutions

Just update

The best option is probably to update your OS (or more specifically pulseaudio), since according to some people this issue got resolved in pulseaudio version 15.

Control it via dbus

(Modified from @LiamDennehy and @Sean Normandy)

  1. Find the DBus object that allows control of the headset's internal volume:
$ dbus-send --system --print-reply --dest=org.bluez / org.freedesktop.DBus.ObjectManager.GetManagedObjects | less
  1. While it is piped to less, search for the interface org.bluez.MediaTransport1 (press slash /, type MediaControl1, press Enter) and record the value of the object path of the parent of the search result:
dict entry( object path "/org/bluez/hci0/dev_C8_B2_58_35_64_6F" array [ dict entry( string "org.freedesktop.DBus.Introspectable" array [ ] )
  1. Send volume up or volume down requests to it with these commands:
dbus-send --print-reply --system --dest=org.bluez /org/bluez/hci0/dev_C8_B2_58_35_64_6F org.bluez.Control.VolumeUp
dbus-send --print-reply --system --dest=org.bluez /org/bluez/hci0/dev_C8_B2_58_35_64_6F org.bluez.Control.VolumeDown
  1. Now you can map these commands to hotkeys via your desktop environment or make them accessible some other way.

Use some script

(Modified from @Sam Mason)

It works for any connected Bluetooth audio device - you don't need to manually find the mac address like in the previous example.

#!/usr/bin/python3
from pulsectl import Pulse
import subprocess
import sys
# Prerequisite tasks on ubuntu machine:
# sudo apt install python3-pip
# pip install pulsectl
method = 'org.bluez.MediaControl1.Volume{}'.format( 'Down' if sys.argv[1] == 'down' else 'Up')
with Pulse() as pulse: for sink in pulse.sink_list(): bluez_path = sink.proplist.get('bluez.path') if bluez_path: args = [ 'dbus-send', '--system', '--print-reply', '--dest=org.bluez', bluez_path, method, ] subprocess.run(args, check=True)

Then I made the file executable and mapped some hotkeys to run this script:

/home/me/scripts/bt_volume.py up
/home/me/scripts/bt_volume.py down

For my Sennheiser CX 400BT True Wireless earbuds, the solution was to increase the volume on the earbuds (by default this is touch holding the right earbud). This is adjustable with the Sennheiser Smart Control phone app.

What just worked for me was Carolus solution under "Control it via dbus" and i am running Ubuntu LTS 20.04 with a minor tweak:

on step 3 i believe the commands have typos where they should be

dbus-send --print-reply --system --dest=org.bluez /org/bluez/hci0/<device id> --type=method_call org.bluez.MediaControl1.VolumeUp

and

dbus-send --print-reply --system --dest=org.bluez /org/bluez/hci0/<device id> --type=method_call org.bluez.MediaControl1.VolumeDown

respectively. Where is dev_C8_B2_58_35_64_6F in Carolus example.

Thank you @Carolus

PS. I can't comment nor add a vote as i am a new stackoverflow user

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

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

You Might Also Like