g_bus_get_sync 返回 NULL 但 dbus_g_bus_get_private 有效

Posted

技术标签:

【中文标题】g_bus_get_sync 返回 NULL 但 dbus_g_bus_get_private 有效【英文标题】:g_bus_get_sync returns NULL but dbus_g_bus_get_private works 【发布时间】:2016-05-21 03:33:25 【问题描述】:

我正在处理使用已弃用库 dbus-glib 的遗留嵌入式代码。

在遗留代码中,此代码片段运行良好:

GError* error = NULL;
DBusGConnection *systemBus = dbus_g_bus_get_private(DBUS_BUS_SYSTEM, NULL, &error);

现在,我尝试使用 GDBus 等价物获取系统总线:

GError* error = NULL;
GDBusConnection *systemBus = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);

这个失败,error->message 返回Could not connect: No such file or directory

有什么区别?

顺便说一句,同样的调用在会话总线上工作:

GError* error = NULL;
DBusConnection *sessionBus = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, &error);

【问题讨论】:

【参考方案1】:

您是否以 root 权限运行它?根据我对 dbus 的经验,对系统总线的访问受到限制。会话总线归用户所有,因此访问永远不会有问题。

根据这个documentation,当你想建立私有连接时,你应该使用dbus-address-get-for-bus-sync和g-dbus-connection-new-for-address。

【讨论】:

以上是关于g_bus_get_sync 返回 NULL 但 dbus_g_bus_get_private 有效的主要内容,如果未能解决你的问题,请参考以下文章

graphiql 突变请求成功但返回 null

CLGeocoder 在 NSString 但不在 NSLog 中返回 (null)

存储过程为列返回值,但 FromSqlRaw 为类属性返回 null

文件存在且是目录,但 listFiles() 返回 null

错误:主体可能正常完成,导致返回“null”,但返回类型是不可为空的类型

捕获 GoogleJsonResponseException 但 e.getDetails() 返回 null