g_bus_get_sync返回NULL但dbus_g_bus_get_private有效

时间:2016-02-10 16:44:01

标签: c glib dbus

我正在处理使用不推荐使用的库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 个答案:

答案 0 :(得分:0)

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

根据此documentation,您希望建立私人连接时使用dbus-address-get-for-bus-syncg-dbus-connection-new-for-address