是否有任何方法可以使用命令控制linux中已连接的蓝牙设备卷?
我怀疑, 假设我已将蓝牙耳机连接到linux系统(蓝牙设备已成功配对并连接) 我可以使用“bluetoohctl”命令检查我的蓝牙设备MAC id 我的疑问是我们能否在linux中使用一些命令来控制蓝牙设备的音量是否有任何方法可以使用命令控制linux中已连接的蓝牙设备卷?,linux,unix,bluetooth,linux-device-driver,Linux,Unix,Bluetooth,Linux Device Driver,我怀疑, 假设我已将蓝牙耳机连接到linux系统(蓝牙设备已成功配对并连接) 我可以使用“bluetoohctl”命令检查我的蓝牙设备MAC id 我的疑问是我们能否在linux中使用一些命令来控制蓝牙设备的音量 有人能帮我一下吗。使用这种方法,您需要适当的D-Bus对象路径来控制设备。有几种方法可以找到(如使用),但一旦找到,以下命令将调整音量: dbus-send --print-reply --system --dest=org.bluez /org/bluez/xxxx/yyyy/dev
有人能帮我一下吗。使用这种方法,您需要适当的D-Bus对象路径来控制设备。有几种方法可以找到(如使用),但一旦找到,以下命令将调整音量:
dbus-send --print-reply --system --dest=org.bluez /org/bluez/xxxx/yyyy/dev_zz_zz_zz_zz_zz_zz org.bluez.Control.VolumeUp
其中,“xxxx”似乎是蓝牙的PID,“yyyy”是适配器(如“hci0”),“zz_zz_zz…”表示受控设备(耳机、扬声器等)的MAC地址,用下划线分隔,“VolumeUp”替换为“VolumeDown”以减小音量
有关正确查找对象路径的更多帮助,请参阅文档。要做的不仅仅是调整音量,请参阅Bluez API文档。我想通过PulseAudio进行设备枚举,因为我想要控制的不仅仅是蓝牙设备。这依赖于Sean的建议,即使用DBus将命令实际推送到蓝牙设备 Python库使查找这些设备标识符变得容易。Sean的建议很好地解决了更新后的方法名 一个最完整的例子是:
来自pulsectl导入脉冲
导入子流程
#diff适用于非BT脉冲设备
差异=0.1
方法='org.bluez.MediaControl1.Volume{}'。格式(
如果差异小于0,则为“向下”,否则为“向上”)
将Pulse()作为脉冲:
对于接收脉冲。接收列表():
bluez_path=sink.proplist.get('bluez.path')
如果是bluez_路径:
args=[
“dbus发送”,“系统”,“打印回复”,
'--dest=org.bluez',bluez_路径,方法,
]
subprocess.run(args,check=True)
其他:
脉冲、音量、变化、所有通道(水槽、差异)
我在命令行中使用了类似的
diff
,允许对音量水平进行相对合理的控制。这不是一个正确的答案,而是一个解释:大多数蓝牙耳机有两种不同的音量:软件音量和硬件音量。传统上,在Linux上,您只能控制软件,但是耳机可以有一个额外的内部硬件卷,这是目前无法控制的。存在缺陷报告:
如果有人知道如何控制硬件内部音量,请在下面回复。我用我的I-phone将我的索尼耳机中的硬件音量设置为最大值。Ubunto 20.04 LTS中的音量余词控制工作正常 台阶
声音现在应该可以完全调节。您可以将设备的内部音量设置为特定值,而不是使用外壳向上或向下递增:
less
时,搜索接口org.bluez.MediaTransport1
(按反斜杠\
,键入MediaControl1
,按Enter)并记录对象路径的值
:Volume
的属性
(如果不存在,则耳机对象不支持直接设置音量):
60
):在我的设备上,范围似乎是0-127,有些值超过110会产生失真。请注意您提供的值,以避免损坏。可能会有所帮助,是的,它可以工作!但是我不能放下。。。我试过org.bluez.Control.VolumeDown,但它一直在上升。有什么想法吗?是我的错。他工作得很好。以更简单的方式获取适配器:
export-BTADAPTER=$(dbus-send--system--dest=org.bluez--print-reply/org.bluez.Manager.DefaultAdapter | tail-1 | sed's/^.*(.\)*$/\1/)
我已经尝试过这个方法,但是我得到了命令['dbus-send'、'-system'、'-print-reply'、'-dest=org.bluez'、'/org/bluez/hci0/dev_C0_28_8D_4E_68_16'、'org.bluez.MediaControl1.VolumeUp']返回了非零退出状态1。
看起来它来了:@paradroid非常感谢您的跟进!!!!
$ 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
object path "/org/bluez/hci0/dev_A1_B2_C3_D4_E5_F6/sep1/fd0"
array [
dict entry(
string "org.bluez.MediaTransport1"
dict entry(
string "Volume"
variant uint16 90
$ 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
$ dbus-send --system --dest=org.bluez /org/bluez/hci0/dev_A1_B2_C3_D4_E5_F6/sep1/fd0 org.freedesktop.DBus.Properties.Set string:"org.bluez.MediaTransport1" string:"Volume" variant:uint16:70
$ 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}'
70