如何使用 dbus-send 调用 org.bluez.Adapter1.StartDiscovery?
Posted
技术标签:
【中文标题】如何使用 dbus-send 调用 org.bluez.Adapter1.StartDiscovery?【英文标题】:How to use dbus-send to call org.bluez.Adapter1.StartDiscovery? 【发布时间】:2017-09-18 21:52:50 【问题描述】:我正在尝试使用 dbus-send
命令行工具与 Bluez 5.44 进行交互。我似乎无法让它正确地开始发现,尽管当我使用bluetoothctl
的scan on
和scan off
命令时它工作正常。我还可以使用d-feet
开始和停止发现。
我尝试在发出命令之前关闭和打开电源,但似乎没有开始发现。
我使用的命令行是:
dbus-send --system --type=method_call --print-reply --dest=org.bluez \
/org/bluez/hci0 \
org.bluez.Adapter1.StartDiscovery
发出此命令时我通常会从dbus-monitor
得到Discovering
属性是false
。
作为参考,这是d-feet
显示的内容。
.
这个命令我做错了什么?
【问题讨论】:
想到了。与会话有关? 用 sudo 试试? 尝试通过在运行bluetoothctl
的同时运行sudo dbus-monitor --system
来监控bluetoothctl scan on
所做的事情。看看它是否在总线上做任何你正在尝试使用 dbus-send
的东西。
【参考方案1】:
问题是 dbus-send 几乎立即退出。 BlueZ 跟踪请求发现的客户端(打开适配器的 D-Bus 代理),当没有更多客户端请求时,发现将停止。
d-feet 和 bluetoothctl 是长期存在的进程,它们使适配器的 org.bluez.Adapter1 代理保持活动状态。
我正在使用的 glib 客户端遇到了同样的问题,解决方案是让适配器的 D-Bus 代理对象保持活动状态。
如果您必须坚持使用 dbus-send,这可能是个坏消息。
【讨论】:
以上是关于如何使用 dbus-send 调用 org.bluez.Adapter1.StartDiscovery?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 dbus-send 调用 org.bluez.Adapter1.StartDiscovery?