Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有任何方法可以使用命令控制linux中已连接的蓝牙设备卷?_Linux_Unix_Bluetooth_Linux Device Driver - Fatal编程技术网

是否有任何方法可以使用命令控制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

我怀疑, 假设我已将蓝牙耳机连接到linux系统(蓝牙设备已成功配对并连接)

我可以使用“bluetoohctl”命令检查我的蓝牙设备MAC id

我的疑问是我们能否在linux中使用一些命令来控制蓝牙设备的音量


有人能帮我一下吗。

使用这种方法,您需要适当的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中的音量余词控制工作正常

台阶

  • 断开蓝牙耳机与Ubuntu的连接
  • 通过蓝牙将耳机连接到i-phone
  • 打开一段YouTube视频,一直调高音量
  • 断开耳机与i-phone的连接
  • 将蓝牙耳机连接到Ubuntu机器

  • 声音现在应该可以完全调节。

    您可以将设备的内部音量设置为特定值,而不是使用外壳向上或向下递增:

  • 查找您的BT耳机的MAC地址(对于兼容DBus的MAC值,我们将用下划线替换冒号):
  • 查找允许控制耳机内部音量的DBus对象:
  • 当它通过管道传输到
    less
    时,搜索接口
    org.bluez.MediaTransport1
    (按反斜杠
    \
    ,键入
    MediaControl1
    ,按Enter)并记录
    对象路径的值
  • 您应该在下面几行的块中看到一个名为
    Volume
    的属性 (如果不存在,则耳机对象不支持直接设置音量):

  • 首先获取当前卷(此处报告为
    60
    ):
  • 让我们将音量增加10-不要直接达到最大值或较大值,因为这可能会损坏您的设备和/或听力

  • 在我的设备上,范围似乎是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