我怀疑, 假设我已将蓝牙耳机连接到我的linux系统(蓝牙设备已配对并成功连接)。
我可以使用“bluetoohctl”命令检查我的蓝牙设备MAC ID。
我怀疑是否可以使用linux中的某些命令控制蓝牙设备音量。
有人可以帮我解决这个问题。
答案 0 :(得分:2)
使用此方法,您需要适当的D-Bus对象路径来控制设备。有几种方法可以找到(比如使用D-Feet),但是一旦你拥有它,下面的命令就会调整音量:
dbus-send --print-reply --system --dest=org.bluez /org/bluez/xxxx/yyyy/dev_zz_zz_zz_zz_zz_zz org.bluez.Control.VolumeUp
其中" xxxx" 似乎成为 bluetoothd 的PID," yyyy"是适配器(如" hci0")," zz_zz_zz ..."表示由下划线分隔的受控设备(耳机,扬声器等)的MAC地址,以及' VolumeUp '被替换为' VolumeDown '减少音量。
有关正确查找对象路径的更多帮助,请参阅D-Bus文档。要做的不仅仅是调整音量,请参阅Bluez API文档。
答案 1 :(得分:1)
我想通过PulseAudio进行设备枚举,因为我不仅仅需要控制蓝牙设备。这依赖于Sean的建议,即使用DBus将命令实际推送到蓝牙设备。
Python库pulsectl
使查找这些设备标识符变得简单。 Sean建议使用D-Feet非常适合找出更新后的方法名称。
一个最完整的例子是:
from pulsectl import Pulse
import subprocess
# diff applies to non-BT Pulse devices
diff = 0.1
method = 'org.bluez.MediaControl1.Volume{}'.format(
'Down' if diff < 0 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)
else:
pulse.volume_change_all_chans(sink, diff)
我从命令行得到类似于diff
的内容,允许对音量级别进行相对理智的控制。
答案 2 :(得分:1)
不是一个正确的答案,而是一个解释:大多数蓝牙耳机有2种不同的音量:软件音量和硬件音量。传统上,在Linux上,您只能控制软件,但是耳机可以具有额外的内部硬件容量,当前无法控制。已有错误报告:
如果有人知道如何控制硬件内部音量,请在下面答复。
答案 3 :(得分:1)
我用我的 i-phone 将我的 Sony Headphones 中的硬件音量设置为 MAX。 Ubunto 20.04 LTS 中音量的后记控制工作正常。
步骤
声音现在应该是完全可调的。
答案 4 :(得分:1)
您可以将设备的内部音量设置为特定值,而不是使用外壳向上或向下递增:
$ bluetoothctl devices | sed "s/:/_/g"
Device A1_B2_C3_D4_E5_F6 Some Headset
$ dbus-send --system --print-reply --dest=org.bluez / org.freedesktop.DBus.ObjectManager.GetManagedObjects | less
less
时,搜索接口 org.bluez.MediaTransport1
(按反斜杠 \
,键入 MediaControl1
,按 Enter)并记录 {{1} 的值}}:object path
您应该在几行下方的那个块中看到一个名为 object path "/org/bluez/hci0/dev_A1_B2_C3_D4_E5_F6/sep1/fd0"
array [
dict entry(
string "org.bluez.MediaTransport1"
的属性
(如果不存在,则耳机对象不支持直接设置音量):
Volume
dict entry(
string "Volume"
variant uint16 90
):60
$ dbus-send --system --print-reply --dest=org.bluez /org/bluez/hci0/dev_A1_B2_C3_D4_E5_F6/sep1/fd0 org.freedesktop.DBus.Properties.Get string:"org.bluez.MediaTransport1" string:"Volume" | grep uint16 | awk '{print $3}'
60
在我的设备上,范围似乎是 0-127,有些值超过 110 会产生失真。请注意您提供的值以避免损坏。