我希望我的 Ubuntu PC 能够向其他通过蓝牙传输音乐的设备发送蓝牙音频命令(播放/暂停、下一首/上一首歌曲和调高/调低)。换句话说,我希望我的 Ubuntu PC“假装”是蓝牙耳机,能够更改曲目、暂停和恢复音乐。
我有以下设置,如下面的 pavucontrol 屏幕截图所示(pt2
设备通过蓝牙连接):
在此配置下,流媒体可以按预期工作(我可以听到从中流出的音乐pt2
),但我没有找到任何方法能够向其发送任何信号,例如暂停/恢复播放或更改曲目。
我已经发现有许多蓝牙协议允许特定功能。如果我正确理解了规格,我感兴趣的是 A2DP,这是设备现在的连接方式。但在配置文件下拉菜单下,我还有 HSP/HFP 耳机主机、HSP/HFP 耳机网关和关闭选项。
我将用 Python 开发自己的应用程序,它将允许发送这样的命令,所以我有兴趣通过 Python API 或 bash 命令发送它们。
我问这个问题是因为我对如何与蓝牙设备通信的方式感兴趣。
答案1
受到@kenn的启发,我决定更深入地研究dbus
和d-feet
工具。最终,我使用以下命令实现了我的目标:
dbus-send --system --print-reply --dest=org.bluez /org/bluez/hci0/dev_44_78_3E_85_9D_6F org.bluez.MediaControl1.Play
这当然会触发通过蓝牙连接到电脑的移动设备上播放音乐。
对于蓝牙设备来说,这个命令一般如下:
dbus-send --system --print-reply --dest=org.bluez /org/bluez/hci0/dev_<mobile_bluetooth_device_mac_address_with_numbers_underscore_separated> org.bluez.MediaControl1.<command_to_send>
为了检查设备的 MAC 地址,请运行bt-devices -l
。它将列出所有已知(但不一定已连接或甚至未发现)的设备,并在括号中标明 MAC 地址。
为了找到允许的命令列表,d-feet
请使用安装sudo apt install d-feet
。运行后,在选项卡bluez
下应用搜索查询System Bus
并找到包含您设备 MAC 地址的条目:
下有类似于使用蓝牙耳机的方法org.bluez.MediaControl1
。但是,当你浏览这些树时,你会发现更多的方法,这真的值得你关注。
dbus-send
是使用 发送信号的命令dbus
。--system
开关表示我们想要使用System Bus
d-feet 选项卡中的内容。我还没有尝试过,但我认为--print-reply
它仅用于调试目的,并不是强制性的。--dest=org.blez
指的是Name
d-feet 标题。/org/bluez/hci0/dev_<mobile_bluetooth_device_mac_address_with_numbers_underscore_separated>
并 org.bluez.MediaControl1.<command>
指的是对象树路径。