dbus

D-Bus介绍

烂漫一生 提交于 2019-12-06 07:33:59
1 D-Bus 简介 D-Bus 是 Desktop Bus 的缩写,是针对桌面环境优化的 IPC(interprocess communication) 机制,用于进程间的通信或进程与内核的通信。 IPC 种类很多,适用的情景也不一样: CORBA 是用于面向对象编程中复杂的 IPC 的一个强大的解决方案。 DCOP 是一个较轻量级的 IPC 框架,功能较少,但是可以很好地集成到 K 桌面环境中。 SOAP 和 XML-RPC 设计用于 Web 服务,因而使用 HTTP 作为其传输协议。 D-BUS 设计用于桌面应用程序和 OS 通信。 D-Bus 中 D 是代表桌面“ Desktop ”的意思,即用于桌面操作系统的通信通道。现在逐渐被引入到嵌入式系统中,不过名字还是保留原先的叫法而已。 典型的桌面都会有多个应用程序在运行,而且,它们经常需要彼此进行通信。 DCOP 是一个用于 KDE 的解决方案,但是它依赖于 Qt ,所以不能用于其他桌面环境之中。类似的, Bonobo 是一个用于 GNOME 的解决方案,但是非常笨重,因为它是基于 CORBA 的。它还依赖于 GObject ,所以也不能用于 GNOME 之外。 D-BUS 的目标是将 DCOP 和 Bonobo 替换为简单的 IPC ,并集成这两种桌面环境。由于尽可能地减少了 D-BUS 所需的依赖,所以其他可能会使用 D

dbus启动问题

旧巷老猫 提交于 2019-12-06 07:33:31
首先需要启动守护进程 dbus -daemon –system –print-pid –print-address 结果提示 Failed to start message bus: Could not get UID and GID for username “messagebus” dbus 需要有一个messagebus用户,创建该用户即可,useradd messagebus,问题解决。 执行一个dbus测试程序,提示:D-Bus library appears to be incorrectly set up; failed to read machine uuid: Failed to open “/usr/var/lib/dbus/machine-id”: No such file or directory 没有machine-id文件,查了一下,需要给它定义一个id,使用dbus-uuidgen >/usr/var/lib/dbus/machine-id 产生这个文件,该问题解决。 再次执行测试程序,又有问题:Couldn’t connect to session bus: Failed to execute dbus-launch to autolaunch D-Bus session,看了帮助 http://dbus.freedesktop.org/doc

DBus 入门与应用 -- DBus 的 C 编程接口

十年热恋 提交于 2019-12-06 07:32:48
原文地址:http://www.cnblogs.com/liyiwen/archive/2012/12/02/2798876.html 转载请注明出处。 作者: 唐风 最近在学 Dbus,不过总是不得其门而入。 大部分资料都讲了很多东西却最终没有让我搞清楚怎么用 DBus,不就是一个 IPC 通信的工具么?就没有一点实用些的资料么?看了很多资料之后还是觉得只见树木不见森林。仔细整理下思路,觉得还是应该从最基本的方面入门,先从 DBus 的 C API 入手学习,有了这些知识,就算麻烦,也可以先在完成一个基本功能的例子程序的同时大概的知道 DBus 的运行机制。 在网上找到这么一篇文章: http://www.matthew.ath.cx/misc/dbus , 正合我意,下面的内容基本是对这篇文章的翻译和扩充。 注意: 翻译没有得到原文作者同意,原文也很简单易懂,最好去读原文。如果收到投诉,我会立即撤掉本文的。 本文不是一篇好的 DBus 入门,有很多基本的东西不在记述之内。 一般情况下不会直接使用 C API 进行 DBus 的编程,而是使用某种 DBus-binding,但我觉得理解 DBus 的 C API 对完整地理解 DBus 是非常重要的。 虽然 DBus 是用 C 写的,而且本文写的是 C API,但是 DBus 设计中充满的面向对象的思想,请注意。 一

D-Bus学习(六):Method的收发小例子

坚强是说给别人听的谎言 提交于 2019-12-06 07:31:00
  我们继续学习D-Bus,参考 http://dbus.freedesktop.org/doc/dbus/libdbus-tutorial.html ,相关的API接口reference参考 http://dbus.freedesktop.org/doc/dbus/api/html/modules.html 。从底层,即libdbus学习如何发送Method以及如何等待应答,在 上上次学习中,给出了同步的方式 ,这是更为高层的处理方式,建议使用。监听method和监听signal的方式非常相似。在给出例子之前,我希望和上次学习一样给出一个示意图,更好地了解D-Bus的各个概念。 监听Method call消息,并返回Method reply消息   Method的监听和signal的监听的处理时一样,但是信号是不需要答复,而Method需要。在下面的例子中,我们将学习如何在消息中加入多个参数(在D-Bus学习(四)中,我们加入了一个参数)的情况。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <dbus/dbus-glib.h> #include <dbus/dbus.h> #include <unistd.h> /*读取消息的参数,并且返回两个参数,一个是bool值stat

dbus介绍

那年仲夏 提交于 2019-12-06 07:30:13
dbus实例讲解(一):初次见面 网上有不少介绍dbus的文章。本文的目标是补充一些简单的例子。 1、dbus是什么东西? 网上有一篇叫“ D-Bus Tutorial ”的文章,流传较广。不少介绍dbus的资料,都引用了其中的段落。 其实相对于这篇文章,我建议大家直接读“ D-Bus Specification ”,篇幅不算长, 文字也不算枯燥。 D-Bus是针对桌面环境优化的IPC(interprocess communication )机制,用于进程间的通信或进程与内核的通信。最基本的D-Bus协议是一对一的通信协议。 但在很多情况下,通信的一方是消息总线。消息总线是一个特殊的应用,它同时与多个应用通信,并在应用之间传递消息。下面我们会在实例中观察消息总线的作用。 消息总线的角色有点类似与X系统中的窗口管理器,窗口管理器既是X客户,又负责管理窗口。 支持dbus的系统都有两个标准的消息总线:系统总线和会话总线。系统总线用于系统与应用的通信。会话总线用于应用之间的通信。 网上有一个叫d-feet的python程序,我们可以用它来观察系统中的dbus世界。 图1、由d-feet观察到的D-Bus世界 D-Bus是一个程序。它提供了API。但我们一般不会直接使用dbus的接口。dbus-glib是GTK版本的dbus接口封装。 本文假设读者安装了dbus-glib

DBUS 的 C 编程接口与配置

末鹿安然 提交于 2019-12-06 07:29:33
操作系统:ubuntu server 14.04 系统默认只安装了dbus包 使用apt-cache search dbus 得到下面 dbus - simple interprocess messaging system (daemon and utilities) 这里就是说只安装了 /usr/bin/ dbus-send dbus-monitor /bin/ dbus-daemon 等一些小工具 而要使用C API,就必须有C头文件和动态链接库文件 C头文件安装,使用: sudo apt-get install libdbus-1-dev /usr/include/dbus-1.0/dbus/ 下都是DBUS 的头文件,其中只用引用dbus.h这一个头文件就OK,这个头文件里面include了其他所有的头文件 来源: CSDN 作者: mika85489 链接: https://blog.csdn.net/mika85489/article/details/46418701

D-Bus概述

折月煮酒 提交于 2019-12-06 07:29:10
摘要参考自: http://blog.csdn.net/lizzywu/article/details/7651441 DBus是一种IPC机制,由freedesktop.org项目提供,使用GPL许可证发行,用于进程间通信或进程与内核的通信。 注 :Linux中的IPC通信机制还包括,管道(fifo),共享内存,信号量,消息队列,Socket等。 DBus进程间通信主要有三层架构 : 1. 底层接口层: 主要是通过libdbus这个函数库,给予系统使用DBus的能力。 2. 总线层: 主要Message bus daemon这个总线守护进程提供的,在Linux系统启动时运行,负责进程间的消息路由和传递,其中包括Linux内核和Linux桌面环境的消息传递。总线守护进程可同时与多个应用程序相连,并能把来自一个应用程序的消息路由到0或者多个其他程序。 3. 应用封装层: 通过一系列基于特定应用程序框架将DBus的底层接口封装成友好的Wrapper库,供不同开发人员使用(DBus官方主页 http://www.freedesktop.org/wiki/Software/dbus ,提供了大部分编程语言的DBus库版本)。比如libdbus-glib, libdbus-python. 如上图所示,Bus Daemon Process是运行在linux系统中的一个后台守护进程,dbus

Dbus组成和原理

不想你离开。 提交于 2019-12-06 07:27:43
在LINUX系统下写开源代码的程序员,对DBUS应该是不会再陌生了。它的低时延和低消耗等优点吸引了很多人的目光,因为我们现在开发的平台,很多设计到DBUS这个通讯机制,所以我花了比较多的时间去熟悉它。通过这段时间的学习,把笔记也做一下,今天先介绍什么DBUS。 什么是DBUS? DBUS是实质上一个适用于桌面应用的进程间的通讯机制,即所谓的IPC机制。适合在同一台机器,不适合于INTERNET的IPC机制。DBUS不是一个为所有可能的应用的通用的IPC机制,不支持其他IPC机制的很多特性。DBUS提供了一个低时延、低消耗的IPC通讯,因为它采用了二进制的数据交换协议,不需要转换成文本化的数据进行交换,DBUS提供了面向多重对象系统的包装,可以在原有的面向对象的应用框架下使用DBUS,不需要学习新的概念和规范等。 DBUS是支持一对一和多对多的对等通讯,在一对一的直接通讯时,两个应用程序连接在一起,这是最简单的工作方式。在多对多的通讯时,这就需要一个叫DBUS后台的角色去分转,一个应用程序发消息给另外一个应用程序,先到达后台,再让后台将信息发送到目的应用程序。在这里DBUS后台就充当着一个路由器的角色。 DBUS包含了系统更新通知,如插入新设备通知、新软件安装通知等,和桌面应用的交互协作能力,可以作为文件系统监控器和配置服务器。 Dbus由对象、消息、连接、 Dbus后台几部分组成。

DBus的简介

荒凉一梦 提交于 2019-12-06 07:27:33
转载: http://www.cnblogs.com/muxue/archive/2012/12/02/2798876.html 前面一篇 讲了DBus的 C 编程接口。现在开始解释一下 DBus 的基本概念,顺序反了,但和我的理解过程是一致的。看到 C 的编程接口之后,至少对于它的理解会有一定的感性认识。 DBus是用来进行进程间通信的。下面这张图展示了一些DBus的大部分东西,但是它太复杂了: DBus 本身是构建在 Socket 机制之上。真正的通信还是由 Socket 来完成的。DBus 则是在这之上,制定了一些通信的协议,并提供了更高一层的接口,以更方便应用程序之间进行数据的交互。 在DBus的体系中,有一个常驻的进程 Daemon,所有进程间的交互都通过它来进行分发和管理。所有希望使用 DBus 进行通信的进程,都必须事先连上 Daemon,并将自己的名字注册到 Daemon 上,之后,Daemon会根据需要把消息以及数据发到相应的进程中。 D-bus里面提到了一些概念,刚开始不太好理解,这些概念也很容易混淆。这些概念的权威解释可以看 这里 。   首先,运行一个dbus-daemon就是创建了一条通信的总线Bus。当一个application连接到这条Bus上面时,就产生了Connection。   每个application里面会有不同的Object

DBUS 实现c/s 全双工

本小妞迷上赌 提交于 2019-12-06 07:27:23
前一篇文章主要介绍了dbus调用的流程,及简单的单工通信,这里记录下双工通信的流程,供后续参考。 定义dbus名称,路径,接口,方法等。 额外注意点: 1. 所有的全局资源必须加锁 2. handle-method-call中 从g_variant_get获得的字符串,不需要自己释放,系统会自动释放,注意如果后续需要使用,必须strdump出来。 #define TEST_DBUS_A "methodA" #define TEST_DBUS_B "methodB" #define TEST_DBUS_INTERFACE "com.test.hello" #define TEST_DBUS_OBJPATH "/com/test/hello" #define TEST_DBUS_NAME "com.test.hello" #define TEST_DBUS_TIMEOUT 100000 client static GDBusConnection *test_client_conn = NULL; static GDBusNodeInfo *dbus_node_info = NULL; static pthread_mutex_t callback_info_list_mutex; GHashTable *g_callback_info_list = NULL; typedef