DBus,未能获得系统范围的名称
Posted
技术标签:
【中文标题】DBus,未能获得系统范围的名称【英文标题】:DBus, failed to obtain systemwide name 【发布时间】:2013-12-16 10:18:34 【问题描述】:我正在使用 gio,以及这个 DBus 实现来注册某个守护进程的内部对象。我使用 SESSION 范围的 Dbus 进行了所有测试,一切正常,但我尝试使用系统范围的注册,因为我的名称注册失败。
我使用 g_bus_own_name 来获取名称,我的错误案例响应 bus_acquired_handler 然后 name_lost_handler 场景。
任何想法,我该如何解决这个问题,或者我如何获得有关错误的更多信息?
GIO:https://developer.gnome.org/gio/2.38/gio-Owning-Bus-Names.html#g-bus-own-name
这是 dbus-monitor 跟踪:
signal sender=org.freedesktop.DBus -> dest=:1.96 serial=2 path=/org/freedesktop/DBus;接口=org.freedesktop.DBus;成员=获得姓名 字符串 ":1.96"
signal sender=:1.95 -> dest=(null destination) serial=3 path=/org/ast/AstCore;接口=org.freedesktop.DBus.Properties;成员=属性更改 字符串“org.ast.AstCore” 数组 [ 字典条目( 字符串“状态” 变体 int32 3 ) ] 数组 [ ]
signal sender=:1.95 -> dest=(null destination) serial=5 path=/org/ast/AstCore;接口=org.freedesktop.DBus.Properties;成员=属性更改 字符串“org.ast.AstCore” 数组 [ 字典条目( 字符串“状态” 变体 int32 4 ) ] 数组 [ ]
signal sender=org.freedesktop.DBus -> dest=(null destination) serial=173 path=/org/freedesktop/DBus;接口=org.freedesktop.DBus;成员=NameOwnerChanged 字符串“:1.95” 字符串“:1.95” 字符串 ""
signal sender=org.freedesktop.DBus -> dest=(null destination) serial=174 path=/org/freedesktop/DBus;接口=org.freedesktop.DBus;成员=NameOwnerChanged 字符串“:1.97” 字符串 "" 字符串 ":1.97"
【问题讨论】:
总线的安全设置可能会阻止它 - 检查/etc/dbus-1/system.xml
和/etc/dbus-1/system.d/
中的文件
【参考方案1】:
如 /etc/dbus-1/system.conf 中所述
<!-- Holes must be punched in service configuration files for
name ownership and sending method calls -->
<deny own="*"/>
...
在 /etc/dbus-1/system.d/ 中添加您自己的配置文件(例如 astcore.conf),以允许您的应用拥有特定的总线名称。
【讨论】:
【参考方案2】:不要在 GDBus 中使用空目标,它没有实现。
几周前我提交了一些补丁,但似乎 NULL 接口调用将很快从 DBus 规范中清除。
https://bugzilla.gnome.org/show_bug.cgi?id=706675
请注意,dbus 守护程序会将 NULL 接口消息从流中过滤出来并丢弃它们(最后 2 篇文章)——毕竟 NULL 接口是一个潜在的安全线程并且可以绕过全局 dbus-daemon 的过滤:
https://bugs.freedesktop.org/show_bug.cgi?id=68597
【讨论】:
以上是关于DBus,未能获得系统范围的名称的主要内容,如果未能解决你的问题,请参考以下文章
使用 libdbus-c++ 获得 DBus::Path - 下一步是啥?