从需求去理解 Linux dbus与基于dbus协议的无agent软件管理 (2)

唯一连接名称 unique connection names :以冒号(':')字符开头的 bus name是唯一的连接名称。例如 :1.0。每个连接都有一个唯一名。在一个 消息总线的生命期内,不会有两个连接有相同的唯一名。

公共连接名称 well-known bus names:公共名称是以反向DNS域名(小写)例如:org.fedoraproject.FirewallD1。

如果DNS 域名包含连字符/减号,则应将其替换为下划线,如果包含数字,则应通过添加下划线进行转义。例如: 7-zip.org的bus name应该定义为 org._7_zip.Archiver。

Reference

对象路径

对象路径(Object Paths) 是用于引用对象实例的名称(类似于 C++ 或 Java 对象)。从概念上来说,D-Bus在消息交换中每个参与者都有任意个对象实例,如文件系统一样,Dbus中的参与者中的对象实例也会形成一个层次树。如,在CentOS7中 firewalld开发的D-Bus API 使用了/org/fedoraproject/FirewallD1的层次结构。

在定义一个对象路径时,需要注意以下:

路径可以是任意长度

路径必须以 ASCII 'http://www.likecs.com/'(整数 47)字符开头,并且必须由以斜杠字符分隔的元素组成。

每个元素只能包含 ASCII 字符 [AZ][az][0-9]_

不允许出现 空字符串

多个 / 字符不能依次出现。 除非路径是根路径(单个/字符),否则不允许尾随 /字符。

接口名称

interface,在每个 Object Path都包含多个接口,一般情况下接口名称应以反向 DNS 域名开头(小写),(同 Java 中的接口名称)。在命名规则上,与bus name相同。

例如:CentOS7中 firewalld开发的D-Bus API 定义的管理zone的接口 org.fedoraproject.FirewallD1.config.zone。如果DNS名称中包含-,则应将其替换为下划线 _。如果DNS 域名包含紧跟在 . 之后的数字,则接口名称应在数字之前添加一个下划线。例如,如果 7-zip.org 插件定义了一个接口,应该被命名为org._7_zip.Plugin.

成员方法名称

成员方法名称,Member names ,对于定义了接口后,需要实现其接口的放法,如需要获得firewalld的zone时,就可以调用 org.fedoraproject.FirewallD1.getDefaultZone 。在D-Bus中Member names通常由“驼峰式”(camel-case)命名 。

dbus

在Linux中,如CentOS dbus包括 dbus daemon及一些cli commad。这些包

dbuslib

D-Bus的消息

最基本的D-Bus协议是一对一的通信协议。与直接使用socket不同,D-Bus是面向消息的协议。 D-Bus的所有功能都是通过在连接上流动的消息完成的。

而在D-Bus中有四种类型的消息

METHOD_CALL 方法调用

METHOD_RETURN 方法返回

ERROR 错误

SIGNAL 信号:与方法调用不同,信号发射没有响应。信号发射只是一个类型为 SIGNAL 的消息。它必须具有三个标头字段:PATH给出发出信号的对象,加上INTERFACE并MEMBER给出信号的完全限定名称。

消息返回的类型

Conventional name 十进制值 说明
INVALID   0   这是个无效类型  
METHOD_CALL   1   方法调用,该方法会有提示  
METHOD_RETURN   2   方法返回的数据  
ERROR   3   错误返回,第一个是其错误的信息  
SIGNAL   4   信号的发射  
CentOS的dbus服务管理

在CentOS7中,作为systemd的一部分D-BUS会从Systemd获取套接字文件描述符,并使用D-Bus交换当前进程生成的socket信息。而PID 1 不使用 PolicyKit 来控制对特权操作的访问,而是完全依赖于 low-level API D-Bus 。(这样做是为了避免 PolicyKit 和 systemd/PID 1 之间的循环依赖。)而有些特权进程(例如关机/重启/挂起/登陆)可以通过logind进行管理的。

由此,可以知道在CentOS中,dbus相关的服务大概有 dbus,与 logind。

dbus包含:

dbus-daemon:dbus架构中 layer 2的 dbus-damon

dbus-send: dbus提供的命令行工具,可以用dbus-send来发送消息。

dbus-monitor: dbus提供的命令行工具,用于监视总线上流动的消息。

dbus-launch: shell脚本启动消息总线的命令行工具

dbus配置文件说明

dbus-daemon守护进程,有两个配置文件,一个为 session bus,另外一个为 system bus。

标准的system bus文件 /usr/local/share/dbus-1/system.conf session bus配置 /usr/local/share/dbus-1/session.conf中配置。在一般情况下,不会操作这两个文件,因其会引入 /etc/dbus-1 中的system.conf 或 session.conf。

配置文件包含的标签:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgzwjw.html