dbus调试主要用d-feet, dbus-send,dbus-monitor工具;

1、支持dbus的系统都有两个标准的消息总线:系统总线和会话总线。系统总线用于系统与应用的通信。会话总线用于应用之间的通信。 网上有一个叫d-feet的python程序,我们可以用它来观察系统中的dbus世界。

debian系统cinnamon桌面环境调试DBus的锁屏接口。

d-feet上面有系统总线和回话总线两部分组成,在回话总线中可以找到org.cinnamon.Screensaver的bus name,

右侧中的名称就是Well knoew name,服务端向bus daemon申请的名字 org.cinnamon.ScreenSaver。这个也是连接名

唯一名称   :1.154  就是daemon给服务端程序分配的唯一名字。

依次选择右侧的lock函数并双击。

这个窗口会显示出 method,bus name的连接名, 对象路径,interface 接口名

Lock( String message )所以在方法输入中写入"hello 123!"

点击运行系统就会锁屏。并会显示 hello 123!信息。

2、使用dbus-send之前先重复一下相关定义,理解这个很重要。

2.2.1、Bus Name

可以把Bus Name理解为连接的名称,一个Bus Name总是代表一个应用和消息总线的连接。 有两种作用不同的Bus Name,一个叫公共名(well-known names),还有一个叫唯一名(Unique Connection Name)。

2.2.1.1、可能有多个备选连接的公共名

公共名提供众所周知的服务。其他应用通过这个名称来使用名称对应的服务。可能有多个连接要求提供同个公共名的服务,即多个应用连接到消息总线,要求提供同个公共名的服务。 消息总线会把这些连接排在链表中,并选择一个连接提供公共名代表的服务。可以说这个提供服务的连接拥有了这个公共名。 如果这个连接退出了,消息总线会从链表中选择下一个连接提供服务。公共名是由一些圆点分隔的多个小写标志符组成的,例如“org.cinnamon.ScreenSaver”、“org.bluez”。

2.2.1.2、每个连接都有一个唯一名

当应用连接到消息总线时,消息总线会给每个应用分配一个唯一名。唯一名以“:”开头,“:”后面通常是圆点分隔的两个数字,例如“:1.0”。 每个连接都有一个唯一名。在一个消息总线的生命期内,不会有两个连接有相同的唯一名。 拥有公众名的连接同样有唯一名,例如在前面的图中,“org.cinnamon.ScreenSaver”的唯一名是“:1.154”。

有的连接只有唯一名,没有公众名。可以把这些名称称为私有连接,因为它们没有提供可以通过公共名访问的服务。 d-feet界面上有个“Hide Private”按钮,可以用来隐藏私有连接。

2.2.2、Object Paths

Bus Name确定了一个应用到消息总线的连接。在一个应用中可以有多个提供服务的对象。这些对象按照树状结构组织起来。 每个对象都有一个唯一的路径(Object Paths)。或者说,在一个应用中,一个对象路径标志着一个唯一的对象。

“org.cinnamon.ScreenSaver”只有一个叫作“/org/cinnamon/ScreenSaver”的对象。图1中的“org.bluez”有多个对象路径。

2.2.3、Interfaces

通过对象路径,我们找到应用中的一个对象。每个对象可以实现多个接口。例如:“org.cinnamon.ScreenSaver”的“/org/cinnamon/ScreenSaver”实现了以下接口:

  • org.cinnamon.ScreenSaver
  • org.freedesktop.DBus.Introspectable
  • org.freedesktop.DBus.Peer
  • org.freedesktop.DBus.Properties

代码中其实只实现了“org.cinnamon.ScreenSaver”这个接口。 接口“org.freedesktop.DBus.Introspectable”和“org.freedesktop.DBus.Properties”等是消息总线提供的标准接口。

2.2.4、Methods和Signals

接口包括方法和信号。例如“org.cinnamon.ScreenSaver”的“/org/cinnamon/ScreenSaver”对象的“org.cinnamon.ScreenSaver”接口有一个Lock方法。 后面的例子中我们会介绍信号。

标准接口“org.freedesktop.DBus.Introspectable”的Introspect方法是个很有用的方法。 类似于Java的反射接口,调用Introspect方法可以返回接口的xml描述。我们双击 “org.cinnamon.ScreenSaver”->“/org/cinnamon/ScreenSaver”->“org.cinnamon.ScreenSaver”->“org.freedesktop.DBus.Introspectable”的Introspect方法。 这个方法没有输入参数,我们直接点击“Execute”按钮,你在“Output”窗口看到了什么?

后面我们会用另一种方式调用Introspect方法。

2.3 小结

“org.cinnamon.ScreenSaver”->“/org/cinnamon/ScreenSaver”->“org.freedesktop.DBus.Introspectable”的Introspect方法, 这个描述是不是很麻烦。其实前面还要加上“session bus”。

后面在看客户端的C代码时,我们会看到同样的过程:用dbus_g_bus_get得到到session bus的连接。 在这个连接上用dbus_g_proxy_new_for_name函数获得到拥有指定公共名的连接的指定对象的指定接口的代理。 最后,用dbus_g_proxy_call函数通过接口代理调用接口提供的方法。

d-feet虽然很方便,但它使用了python的gtk模块,在一些嵌入式环境可能使用不了。 后面会看到,用一个叫dbus-send的命令行工具,或者写几行python脚本都可以完成同样的工作。 我们还会用一个叫dbus-monitor的命令行工具观察dbus调用过程中究竟发生了什么?

dbus-glib编程2:d-feet的使用相关推荐

  1. DBus glib 各数据类型接收与发送详解—C语言(3)

    DBus glib 各数据类型接收与发送详解-C语言(3) 动机 前置知识 正文 Python 测试服务 使用 C 实现复杂数据类型的传递 DICT_DICT ObjectPath_Dict_Stru ...

  2. DBUS入门与C编程

    一.D-Bus简介 1. D-Bus是什么 D-Bus最主要的用途是在 Linux 桌面环境为进程提供通信,同时能将 Linux 桌面环境和 Linux 内核事件作为消息传递到进程.D-Bus(其中D ...

  3. DBus daemon 启动(三)

    前面简单了解一下,DBus的架构和简单的应用编程.那么接下来,就来看看,DBus是怎么启动的,这一往篇不涉及内部实现问题,只是介绍dbus-daemon如何启动及涉及哪里配置 一.编译Dbus库完成之 ...

  4. D-bus 介绍(一)

    1.DBus 是什么 a) DBus 是一种本地进程间通信机制,支持点对点的通信,以及广播/订阅式的通信方式. b) DBus将要传输的的数据结构化为二进制数据.包括不同长度的整数.浮点数.字符串.数 ...

  5. QDBus和Glib-dbus使用

    1.参考内容 https://blog.csdn.net/qq_41673920/article/details/121227229?ops_request_misc=%257B%2522reques ...

  6. dbus-python指南

    菜鸟学dbus-python,翻译dbus-python指南,错误之处请在所难免,请诸位不吝赐教,多多指正!查看英文原版请点这里. 连接总线Connecting to the Bus 方法调用Maki ...

  7. linux桌面xfce,Xfce 4.14 发布,Linux桌面环境

    经过近四年半的开发,Xfce 4.14桌面环境已经发布,并且包含许多新特性和改进. Xfce 4.14是在Xfce 4.12的4年5个月之后发布的,该版本可能包含在几乎所有基于Linux的操作系统的软 ...

  8. GTK+编程入门(1)—简介与glib库

    GTK+编程入门(1)-简介与glib库(2015-7-23) 分类:GTK+ 一:GTK+简介   GTK+是一个软件开发工具包,其设计目的是支持在 X Window系统下开发图形界面的应用程序.G ...

  9. dbus PHP,DBUS 编程总结

    DBUS是个3层架构的进程间通信系统,包括: 1.   函数库libdbus,用于两个应用程序呼叫联系和交互消息. 2.   Message bus daemon,总线守护进程可同时与多个应用程序相连 ...

  10. IPC进程间通信 D-Bus(Desktop Bus)快速入门(以libdbus-glib库为例)

    文章目录 一.D-Bus简介 1.D-Bus简介 2.不同IPC通信方式比较 3.D-Bus特性 二.D-Bus架构 2.D-Bus接口层 3.D-Bus总线层 测试demo 4.D-Bus封装层 三 ...

最新文章

  1. TCP/IP详解--第五章
  2. Ubuntu 16.04下Caffe-SSD的应用(五)——安装VOC数据标注工具LabelImag
  3. css 剪辑图片_CSS中的clip-path裁剪图片用法
  4. linux 内核地址随机化,GNU/Linux内核的地址随机化
  5. 移动表到另一表空间命令
  6. 打造一款便携版的Sublime Text
  7. oracle 中sql的分类,Oracle数据库语言分类
  8. 【Elasticsearch】语言处理系列之打字或拼写错误 模糊匹配 字段纠错 Fuzzy multi_match
  9. Emacs代码补全之ycmd
  10. CentOS 7 设置 DNS
  11. token什么意思中文在C语言中,token是什么意思?
  12. unity3D 没有影子
  13. 80004005错误代码_80004005错误代码怎么回事_安装软件错误代码0×80004005如何解决...
  14. SAP Down Payment的设置和使用
  15. 关于视频编码I P B帧存储,编码,解码,显示顺序的理解
  16. 计算机读不出来u盘装系统,细说电脑重装系统u盘读不出怎么办
  17. 8脚 tja1050t_高速光耦:CAN总线通信硬件原理图(采用TJA1050T CAN总线驱
  18. 电脑桌面计算机文件打不开怎么办,教大家电脑桌面上的文件都打不开怎么办
  19. 监控系统相关的常见面试问题
  20. 485通讯的校验和_组态王与西门子S71200PLC无线Modbus通讯

热门文章

  1. ISCC2017 Misc write up附件题目文件
  2. HR 必知的 360 度评估的优缺点
  3. Ubuntu常用命令
  4. CSS溢出文字使用省略号表示
  5. 用计算机研究心理,计算机使用中的自我效能感
  6. 小白入门指南|zookeeper快速入门
  7. 食品的特征和鸿蒙,白粥养胃吗?知道这4种食物才是养胃高手
  8. c语言编文曲星游戏,关于汉诺塔游戏的思路(就是最早文曲星上移盘子的那个)...
  9. python列表输出序号_Python中打印列表的序号和内容
  10. 64位CPU对于移动设备是没有意义