在 Linux 中控制已连接蓝牙设备音量的命令?

Mur*_*mal 6 unix linux bluetooth linux-device-driver

假设我已将蓝牙耳机成功配对并连接到我的 Linux 系统。

我知道我可以通过bluetoothctl命令检查我的蓝牙设备 MAC ID。

有没有办法在Linux中使用一些命令来控制蓝牙设备的音量?

小智 5

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

  1. 找到您的 BT 耳机的 MAC 地址(对于 DBus 兼容的 MAC 值,我们将用下划线替换冒号):
$ bluetoothctl devices | sed "s/:/_/g"
Device A1_B2_C3_D4_E5_F6 Some Headset
Run Code Online (Sandbox Code Playgroud)
  1. 找到允许控制耳机内部音量的DBus对象:
$ dbus-send --system --print-reply --dest=org.bluez / org.freedesktop.DBus.ObjectManager.GetManagedObjects | less
Run Code Online (Sandbox Code Playgroud)
  1. 当它通过管道传输到 时less,搜索接口org.bluez.MediaTransport1(按/、键入MediaControl1、按Enter)并记录 的值object path
object path "/org/bluez/hci0/dev_A1_B2_C3_D4_E5_F6/sep1/fd0"
  array [
    dict entry(
      string "org.bluez.MediaTransport1"
Run Code Online (Sandbox Code Playgroud)

您应该在该块的几行下方看到一个名为的属性Volume(如果不存在,则耳机对象不支持直接设置音量):

dict entry(
  string     "Volume"
  variant    uint16 90
Run Code Online (Sandbox Code Playgroud)
  1. 首先获取当前音量(此处报告为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
Run Code Online (Sandbox Code Playgroud)
  1. 让我们将音量增加十 -不要直接调至最大值或较大的值,因为这可能会损坏您的设备和/或您的听力。
$ 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
Run Code Online (Sandbox Code Playgroud)

在我的设备上,范围似乎是 0-127,其中某些值超过 110 会产生失真。请注意您提供的值以避免损坏。


小智 4

使用此方法,您需要适当的 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
Run Code Online (Sandbox Code Playgroud)

其中“xxxx”似乎是bluetoothd的PID ,“yyyy”是适配器(如“hci0”),“zz_zz_zz...”表示受控设备(耳机、扬声器等)的MAC地址,用下划线分隔,并将“ VolumeUp ”替换为“ VolumeDown ”以减小音量。

有关正确查找对象路径的更多帮助,请参阅D-Bus文档。除了调节音量之外,若要执行其他操作,请参阅 Bluez API 文档。