DBus,未能获得全系统名称

时间:2013-11-30 10:08:38

标签: glib dbus

我正在使用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;构件= NameAcquired
字符串“:1.96”


signal sender =:1.95 - > dest =(null destination)serial = 3 path = / org / ast / AstCore;接口= org.freedesktop.DBus.Properties;构件= PropertiesChanged
   字符串“org.ast.AstCore”
   阵列[
      dict entry(
         字符串“state”
         变体int32 3
      )
   ]
   阵列[
   ]


signal sender =:1.95 - > dest =(null destination)serial = 5 path = / org / ast / AstCore;接口= org.freedesktop.DBus.Properties;构件= PropertiesChanged
   字符串“org.ast.AstCore”
   阵列[
      dict entry(
         字符串“state”
         变体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”


2 个答案:

答案 0 :(得分:4)

如/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),以允许您的应用拥有特定的总线名称。

答案 1 :(得分:1)

永远不要使用GDBus的空目的地,它没有实现。

几周前我提交了一些补丁,但似乎很快就会从DBus规范中清除NULL接口调用。

https://bugzilla.gnome.org/show_bug.cgi?id=706675


请注意,dbus守护程序将过滤掉流中的NULL接口消息并删除它们(最后2个帖子) - 在所有NULL接口都是潜在的安全线程之后,可以绕过全局dbus-daemon的过滤:

https://bugs.freedesktop.org/show_bug.cgi?id=68597