如何使用 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 进行交互。我似乎无法让它正确地开始发现,尽管当我使用bluetoothctlscan onscan 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?

使用 dbus-send 调用 GetAll

使用 dbus-send 设置/获取属性

从 shell dbus-send 在 C 中调用 dbus

使用 dbus-send 的 DBus 自省对象树

dbus-send与QDBusAbstractInterface的对应关系