如何从另一个进程/程序将对象添加到 DBus 服务

Posted

技术标签:

【中文标题】如何从另一个进程/程序将对象添加到 DBus 服务【英文标题】:How to add objects to DBus service from another process / program 【发布时间】:2015-04-12 14:09:56 【问题描述】:

我创建了一个 DBus 服务并向其添加对象。

QDBusConnection connection = QDBusConnection::sessionBus();
connection.registerService(serviceName); // name, e.g. "foo"
QDBusConnection::sessionBus().registerObject(path, object, myoptions);

好的,我可以在 DBus 监视器的“服务”下看到我的对象。现在我想添加更多对象,但来自另一个程序(相关但独立)。

connection.registerService(serviceName); 失败,因为服务已经存在。 如何才能在同一个服务名称下注册更多对象?

背景:我有客户在使用这些服务。他们确实知道谁提供服务,而只知道服务名称。所以它们总是引用相同的服务名称。但需要几个供应商提供服务。

我尝试不使用服务名称(空字符串,仅依赖对象路径)。但是代理基于

QDBusAbstractInterface(serviceName, path, interfaceName.toUtf8().constData(), connection, parent)

似乎不适用于空 ("") serviceName(正确吗?)。

【问题讨论】:

【参考方案1】:

你不能,一个连接到 dbus == 一个名字。连接通常是 unix 套接字或抽象套接字(在 linux 上)。您需要使用某种类型或 RPC(或 dbus 调用)将来自第一个连接的调用代理到其他服务,并响应来自第一个连接的结果。

【讨论】:

以上是关于如何从另一个进程/程序将对象添加到 DBus 服务的主要内容,如果未能解决你的问题,请参考以下文章

将进程内 COM 服务器对象添加到 C# 应用程序

如何从另一个 .NET 进程获取对象的句柄?

linux 进程间通信 dbus-glib实例详解三(下) 数据类型和dteeth(类型签名type域)(层级结构:服务Service --> Node(对象object) 等 )(附代码)

通过 TCP 连接到 DBus 服务

如何将 X11 应用程序附加到 Dbus

如何将任务依赖项从另一个插件添加到我的 SBT 插件?