使用系统 DBus 的 registerService 失败(但适用于会话 DBus)

Posted

技术标签:

【中文标题】使用系统 DBus 的 registerService 失败(但适用于会话 DBus)【英文标题】:registerService with system DBus fails (but works with session DBus) 【发布时间】:2014-05-26 06:38:13 【问题描述】:

Qt 5.2,Win 7

当我注册服务 QDBusConnection::registerService ( const QString & serviceName ) 时,它会因 系统 DBus 连接 (QDBusConnection::systemBus ()) 而失败(“false”),但可以使用会话 DBus 连接和对等连接。

这是我启动服务器的方式:dbus-daemon.exe --system --address=tcp:host=127.0.0.1,port=45000

截至QtService application cannot connect to system bus when running as a service,我已经尝试(see here)更改system.conf

<auth>ANONYMOUS</auth>
<allow_anonymous/>

我找到了另一个similar question here。我也尝试了那里描述的政策。

任何提示我可以如何克服这个问题,或者至少获得准确的错误消息?该方法的“假”并没有真正的帮助。

---编辑---

下面的代码给我一个错误消息not connected to server 用于连接。方法QDBusConnection::systemBus() 不会自动连接(与会话、对等一样)?

            QDBusConnection con = QDBusConnection::systemBus();
            if (!con.registerService(ServiceName))
            
                qCritical() << con.lastError().message();
                qFatal("Cannot register DBus service, server started? dbus-daemon.exe --system --address=tcp:host=192.168.0.133,port=45000");
            

---编辑2,JB0x2D1的commet ----

我同意,也认为与.conf文件有关。

    您提供的链接和我上面的链接都指向to the same example。我已经尝试过.conf 文件(当然,相应地更改了服务名称) 发现了另一个有趣的例子:https://wiki.ubuntu.com/DebuggingDBus。不幸的是没有成功

很难说,这个问题是否与 Windows 有关,大多数示例显然是 Linux 驱动的。想知道“允许任何人做任何事情”的最小配置是什么。

【问题讨论】:

可能与/etc/dbus-1/ 中的策略配置文件有关,如第三篇文章here 中所述。不确定这在 Windows 上是如何工作的。 也许this recent question 中的某些内容可能对允许所有人使用一切有用。该问题的作者尝试在解决该问题的过程中允许所有用户使用所有内容。祝你好运 【参考方案1】:

我发现这个link 的答案很有帮助。

根据链接提供的答案,您需要在正在运行的操作系统上安装 dbus-launch(Ubuntu:sudo apt-get install dbus-x11)。

在终端上运行 dbus-launch 将启动 dbus 会话总线,并且还将在终端上打印出这种性质的文本:

DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-RKvgH2uzDI,guid=37cfdf614fe9c896cc8790160018b974

DBUS_SESSION_BUS_PID=18717

在运行需要会话总线执行 IPC 的应用程序之前,您需要将终端上打印的文本导出为环境变量。

希望这会有所帮助。

【讨论】:

请不要仅仅依靠链接来回答您的问题。即使它在当时有用,它也可能变得不复存在和无用。相反,请包含足够的信息以使您的答案尽可能独立。

以上是关于使用系统 DBus 的 registerService 失败(但适用于会话 DBus)的主要内容,如果未能解决你的问题,请参考以下文章

无法从 ubuntu 中的服务连接到会话 dbus

DBus - 如何列出系统总线中的所有服务(总线名称)?

(安全问题)有啥办法可以隐藏dbus方法调用来监控dbus?

UDisks2 的 Dbus 自省不完整?

dbus系列教程dbus是什么东西?

DBus.Error.AccessDenied:被拒绝。基于 TCP 的 DBUS