C dbus示例-on_name_在获得on_name_后中间丢失

C dbus示例-on_name_在获得on_name_后中间丢失,c,dbus,C,Dbus,我可以使用dbus作为客户机,但是如果我编译 调用on_name_获取的回调,并在on_name_丢失的回调之后调用中间回调。 我所做的唯一更改是使用G_总线类型的系统,而不是G_总线类型的会话 我只是猜测这是一些身份验证问题。与会话总线不同,系统总线有一个安全策略,防止任意进程在总线上声明任意已知名称。您需要为系统总线安装一个,以允许您的服务拥有一个名称: 当出现以下情况时,将检查带有own或own\u前缀属性的规则: 连接尝试拥有已知的总线名称。作为特例,, own=“*”匹配任何已知的总线

我可以使用dbus作为客户机,但是如果我编译 调用on_name_获取的回调,并在on_name_丢失的回调之后调用中间回调。 我所做的唯一更改是使用G_总线类型的系统,而不是G_总线类型的会话


我只是猜测这是一些身份验证问题。

与会话总线不同,系统总线有一个安全策略,防止任意进程在总线上声明任意已知名称。您需要为系统总线安装一个,以允许您的服务拥有一个名称:

当出现以下情况时,将检查带有
own
own\u前缀
属性的规则: 连接尝试拥有已知的总线名称。作为特例,,
own=“*”
匹配任何已知的总线名称。著名的会话总线 通常允许任何连接拥有任何名称,而 系统总线通常不允许任何连接拥有任何名称, 除非进一步配置允许。系统服务 将拥有一个名称,必须安装允许他们这样做的配置, 通常通过规则的形式<代码>是相关的阅读

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE busconfig PUBLIC
 "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
  <!-- Only my-service-user can own the service -->
  <policy user="my-service-user">
    <allow own="org.mydomain.MyService1"/>
  </policy>

  <!-- Anyone can send messages to the service -->
  <policy context="default">
    <allow send_destination="org.mydomain.MyService1"/>
  </policy>
</busconfig>