【问题标题】:Dbus org.bluez implementation in QtQt 中的 Dbus org.bluez 实现
【发布时间】:2013-08-30 07:17:01
【问题描述】:

我开始在 Qt 中使用 DBus 和蓝牙。我想开发一个脚本,它只会通过 DBus 调用方法并得到回复。部分代码在这里(实际上是主要部分):

QString hostname("00:07:80:60:CE:22");
QDBusConnection bus = QDBusConnection::sessionBus();
QDBusInterface interface("org.bluez", "/", "Manager", bus, 0);

qDebug()<<"is valid: "<<interface.isValid()<<interface.lastError();

interface.lastError() 给出以下错误:

QDBusError("org.freedesktop.DBus.Error.ServiceUnknown", "名称 org.bluez 不是由任何 .service 文件提供的")

我安装了 bluez 和 dbus。我可以通过命令搜索蓝牙设备。

我还尝试了命令 sudo bluetoothd -d -n 并得到了这个: D-Bus 设置失败:名称已在使用中 bluetoothd[21952]:无法上 D-Bus

有谁知道可能是什么问题?

【问题讨论】:

  • 你是否从 dbus 命令得到响应,试试这个命令,如果没有响应意味着 bluez 没有注册到 dbus 命令:dbus-send --system --type=method_call --print-reply -- dest=org.bluez "/" org.bluez.Manager.ListAdapters
  • 接口名称不对?试试这样:QDBusInterface interface("org.bluez", "/", "org.bluez.Manager", bus, 0);

标签: c++ qt bluetooth dbus bluez


【解决方案1】:

您收到的错误 (name already in use) 表示蓝牙守护程序已经在您的系统上运行。你可以通过sudo service bluetooth stop 来阻止它,尽管我觉得这是一种非常残酷的方式来结束蓝牙守护进程。如果您结束守护进程,您也会结束 BlueZ D-Bus 实现,因此您将无法使用它。

虽然我从未使用过 Qt 的蓝牙/dbus 实现,但您的代码存在一些问题:

首先,BlueZ 接口是通过 system 总线发布的,而不是 session 总线,所以这是应该进行的第一个更改。

第二,你传递的"Manager"参数的作用是什么?如果您尝试连接到名为"Manager" 的 DBus 接口,则没有。我不确定是否有,正如您在 2013 年提出的这个问题。您可以看到 BlueZ 使用名为 D-Feet 的程序实现的 DBus 接口。您应该尝试一下,因为它帮助我了解了 BlueZ 与 DBus 的工作原理。我推荐sudo apt-get install d-feet。在"/" 路径上发布的唯一接口是org.freedesktop.DBus.Introspectableorg.freedesktop.DBus.Objectmanager。同样,使用 D-Feet 可以很容易地看到和试验这一点,因为它允许抽象接口和路径的可视化表示。

如果您以后在关贸总协定方面遇到麻烦;使用 -E 实验标志运行 bluetoothd;这将启用 BlueZ GATT 功能。 (请注意)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-17
    • 2013-12-11
    • 2011-01-09
    • 2011-05-30
    • 2017-08-01
    • 2012-09-11
    • 2012-11-29
    • 2019-04-20
    相关资源
    最近更新 更多