打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
linux下dbus的理解学习
userphoto

2022.09.20 上海

关注

有那么个组织叫freedesktop,它是专门为linux桌面制定标准的。什么KDE,GNOME都是按他的标准来的。而dbus是其中的桌面消息机制的一个标准。

dbus是一个IPC的管理系统,其实就底层来说就是本地socket通信。但是他是将所有的消息都通过总线的方式来管理分发,易于管理和安全。

dbus一般就是3层结构:

1. libdbus库,允许两个应用相互连接交换消息
 2. 一个建立在libdbus上的消息总线守护程序,这个守护程序可以路由消息
 3. 封装库,比如libdbus-glib或libdbus-qt。一般都是使用封装库来简化使用dbus的细节。

一般gtk(c语言)开发的话,可以使用gobject-dbus库,qt(c++)的话可以使用dbus-qt库,而python使用python-dbus模块。

还有nodejs的话,我推荐使用node-native模块(配合nodewebkit还是比较好用的)。

还有做dbus相关开发的话,使用一个叫d-feet工具,就可以查看当前所有在使用中的dbus名称及其他属性。


dbus分为两种总线,一种叫SystemBus,一种叫SessionBus。SystemBus就只有一条,SessionBus是一个用户会话时会产生一条。至于这两种的区别,SystemBus一般是用于权限较高的系统级(root)进程与其他进程(可以是普通进程)的通信,而SessionBus是用于普通的用户进程之间的交流。

dbus是单对单的通信,其实和C/S架构差不多,一个server端接收消息和发布信号,多个client端发送消息和接收信号。

dbus通信的话有5个值需要注意:

1. Address:因为dbus也是通过本地socket来通信,所有会有socket文件。你可以直接连接这个sokcet文件的地址来通信,但这个我几乎不用。

2. Bus Name:当你使用总线守护进程时(你看进程表里不是有很多dbus-daemon嘛,3层结构的第二层),你只用通过一个Bus Name就可以直接将消息路由到你想要的地址。所以这么方便,干嘛用上面的。server端想要Bus Name需要向SystemBus或SessionBus申请。如果不申请连接到dbus,它会自动被分配一个唯一的名字,就是1.45之类的,这数字没什么意义,只是为了名字唯一。名字除了路由消息还有第二种用途,就是当一个程序退出,断开连接,消息总线就会提醒其他连接程序该名字失去了所有者。这样就容易管理其他程序了

3. Path:这个路径是指你在进程里的路径,你可以按模块来划分,比如NetwrokManager 有 无线和有线这两模块。

4. Interface:他就像是一组功能的集合名字,你可以按功能来划分。

5. Method/Signals:方法和信号,方法其实就是进程里的函数名,你发消息给这个函数名,这个函数就会被调用,并返回结果。信号就是当server端主动调用这个信号函数的时候,便会发出这个信号(信号名就是函数名),其他连接在同一总线上的程序,如果谁感兴趣就会接收处理。

所以总的来说,其实可以这样理解,Address和Bus Name就相当于你家的城市地址,Path就相当于你家住哪个县哪个区,Interface就相当于你家哪个村哪个路,Method就相当于你家哪个人。dbus则充当了邮局的身份。

那先尝试下发送个消息看看:

d-feet在SystemBus下可以找到org.freedesktop.DBus这个Bus Name,它有个Path叫 “ / ”,“ / ”下面有org.freedesktop.DBus这个Interface,里面有个叫GetId的Methods,可以跟它通信一下。这里使用dbus-send命令来发送。dbus-send是dbus提供的一个命令,可直接向目标发送消息。

~ dbus-send --system --print-reply --dest=org.freedesktop.DBus / org.freedesktop.DBus.GetId    

返回打印出了一个值,这个值就是GetId函数的执行结果。

dbus-send使用方法: --system表示是System Bus,--print-reply表示打印回复信息, --desk=[Bus Name] [Path] [Interface].[Method] 表示地址,注意Method是接在Interface后面的。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
QT中DBus的用法
dbus实例讲解(一):初次见面
DBUS基础知识
D-Bus学习(四):基础小例子(同步和异步)
linux使用dbus
D-BUS API查找与调用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服