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 有效的主要内容,如果未能解决你的问题,请参考以下文章
CLGeocoder 在 NSString 但不在 NSLog 中返回 (null)
存储过程为列返回值,但 FromSqlRaw 为类属性返回 null
文件存在且是目录,但 listFiles() 返回 null