dbus

DBUS与QDBUS的应用

允我心安 提交于 2019-12-06 08:13:21
转自: http://blog.chinaunix.net/uid-23023613-id-219094.html 稍有改动~ D -Bus概述 什么是D -Bus? D-Bus是一种进程间通信的机制,它被设计成为一种低开销、低延迟的IPC,并被多种桌面环境(如KDE、GNOME等)所采用。 关于D -Bus的详细介绍可以参考freedesktop.org提供的两份文档, D-Bus Tutorial 和 D-Bus Specification 。 基本概念 D -Bus提供了多种Message Bus用于应用程序之间的通信。通常,Linux发行版都会提供两种Message Bus:System Bus和Session Bus。System Bus 主要用于内核和一些系统全局的service之间通信;Session Bus 主要用于桌面应用程序之间的通信。 D-Bus中用于通信的基本单元叫做Message,Message的具体格式可以参考 D-Bus Specification 。 当应用程序连接到M essage Bus上时,D-Bus会分配一个unique connection name,这个unique name通常的格式如":34-907"。Unique name以":"开头,后面的数字没有特别的意义,只是为了保证这个unique name的唯一性。 另外

Dbus组成和原理

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

dbus-glib 安装环境搭建

北城余情 提交于 2019-12-06 08:12:50
首先安装dbus的各种库 具体步骤请在csdn上参考 别说郁闷 写的 dbus-glib 安装环境搭建 按照他写的步骤,全部做完后再编译可能会出现找不到mechine-id的错误具体解决方法如https://www.sothink.cn/archives/2015/12/d-bus-library-appears-to-be-incorrectly-set-up.html 再调整好所有的头文件位置后即可编译。 下面是简单的首发实例,这个实例server从client读取两个整数并将其和返回给client server: #include <stdbool.h> #include <stdlib.h> #include <dbus/dbus-glib.h> #include <stdio.h> #include <string.h> #include <time.h> #include <unistd.h> #include <dbus-1.0/dbus/dbus.h> #include <math.h> void reply_to_method_call(DBusMessage* msg, DBusConnection* conn) { DBusMessage* reply; DBusMessageIter rootIter; dbus_uint32_t serial = 0;

dbus org.freedesktop.DBus.Error.AccessDenied 错误处理

↘锁芯ラ 提交于 2019-12-06 08:12:41
在使用 dbus时,bus type 是system, dbus-daemon 也是以–system 模式拉起的。运行某个客户端,向dbus 建立链接,并输出bus name 时,出现如下错误: org.freedesktop.DBus.Error.AccessDenied 修改system.conf中如下部分 <!-- Holes must be punched in service configuration files for name ownership and sending method calls --> < deny own = " * " /> < deny send_type = " method_call " /> 为 <!-- Holes must be punched in service configuration files for name ownership and sending method calls --> < allow own = " * " /> < allow send_type = " method_call " /> 或者增加配置文xxx.conf件到/etc/dbus-1/system.d/ 目录下 <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus

dbus

瘦欲@ 提交于 2019-12-06 08:11:56
D-Bus 也是一个用于进程间通信的框架。 简单介绍一下如何编写一个helloworld通信例子。 0. 下载源码 http://www.freedesktop.org/wiki/Software/dbus#Download . 1. ./configure 这时候可能会出现问题: configure: error: Could not find expat.h, check config.log for failed attempts 可以通过 sudo apt-get install libexpat1-dev 来解决 2. make 3. make install 其中 可能遇到的编译问题 1. fatal error: dbus/dbus.h: No such file or directory 把 /usr/local/include/dbus-1.0/dbus/拷贝到/usr/include/dbus 2. fatal error: dbus/dbus-arch-deps.h: No such file or directory 把 /usr/local/lib/dbus-1.0/include/dbus/dbus-arch-deps.h拷贝到/usr/include/dbus 3. 链接错误 collect2: ld returned 1 exit status

D-bus 介绍(一)

我与影子孤独终老i 提交于 2019-12-06 08:11:23
1.DBus 是什么 a) DBus 是一种本地进程间通信机制,支持点对点的通信,以及广播/订阅式的通信方式. b) DBus将要传输的的数据结构化为二进制数据.包括不同长度的整数.浮点数.字符串.数据.复合类型等等. 2. DBus组成部分 DBus有两个主要组成部分,一是点对点通信的支持库,任何想用DBus通信的进程都可以引用;二是dbus服务进程,其作用类似于总线,进程可以连接到这个总线,并在总线上传输消息.流程:进程使用支持库,连接到服务进程总线并收发消息. 3.总线地址 每条总线者有总线地址,进程通过这个地址连接到总线.总线地址一般是类似于"/tmp/dbus_***"这类socket接口,但也有可能是TCP端口,或者其他通信方式接口.具体如何使用使用这些接口通信,是完全封装在dbus支持库的.我们使用都是说客户进程打开并连接到总线. 4.每个连接到总线的对象(连接称为对象,总线也是对象,总线对象本身提供了很多接口与方法) 总线上的每个连接都有名字.这些名字一般叫做连接名,称为bus names.(也可以不设置连接名,比如你不提供服务)连接名由'.'分开的字符串组成,比"com.free.add",中间的字符可以是字母.数字.连接线.下划线.当连接建立以后.DBus服务会分配一个不可改变的连接名,称为唯一连接名.这个连接名即使在进程结束后也不会再被其他进程所使用

DBUS 记录

久未见 提交于 2019-12-06 08:09:51
problem?????????????????????????????????????????????????????????????????????????????????????? 1./autogen.sh [sbox-MYTARGET: ~/hello-world] > ./autogen.sh + aclocal + autoconf + autoheader + automake --add-missing --foreign + ./configure checking for a BSD-compatible install... /scratchbox/tools/bin/install -c checking whether build environment is sane... yes checking for gawk... gawk checking whether make sets $(MAKE)... yes checking for gcc... gcc checking for C compiler default output file name... a.out checking whether the C compiler works... configure: error: cannot run C compiled programs

dbus发送与接收数据入门例子

二次信任 提交于 2019-12-06 08:09:23
1.dbus 通信发送数据的代码例子: ( 1 ) //dbus-send-hello.c /* cc $(pkg-config --cflags --libs dbus-glib-1) -o dbus-send-hello dbus-send-hello.c && ./dbus-send-hello */ int main (int argc, char *argv[]) { DBusError dberr; DBusConnection *dbconn; DBusMessage *dbmsg; char *text; dbus_error_init (&dberr); dbconn = dbus_bus_get (DBUS_BUS_SESSION, &dberr); // 代表连接到会话总线,如果需要连接到 // 系统总线,简单把 DBUS_BUS_SESSION 替换为 DBUS_BUS_SYSTEM 即可。但是有麻烦,因为 // 系统总线对可以连接到它的用户有限制。可能需要提供一个 .service 文件指明能连接到某一个指定服务器的权限 if (dbus_error_is_set (&dberr)) { fprintf (stderr, "getting session bus failed: %s\n", dberr.message); dbus_error_free

DBus如何传送和接收数据

不打扰是莪最后的温柔 提交于 2019-12-06 08:08:25
DBus是进程间通信的工具。网上的资料不太多,大都又是基于GLib或python的。在windows下如果要用纯c/c++语言,似乎只能用原始的DBus库来编写程序。倘若不亲自写写,还真不知道到底是怎样的。 DBus的数据都要绑定在消息上: 消息: DBusMessage 数据: DBusMessageIter 从数据结构的命名上看,与其称之为消息的数据,不如称为消息数据的迭代器。 事实上其数据的操作过程,就是个迭代过程。 I 传输单独一个变量 如bool类型,有: DBusMessage *msg; // DBus消息 DBusMessageIter datatoSentIter; // DBus数据迭代器 dbus_bool_t singleData = true; // DBus的内建bool型 // 每条语句都需要返回值bool判断是否成功,为方便清晰略去 dbus_message_iter_init_append(msg, &datatoSentIter); // 将迭代器绑定至消息 dbus_message_iter_append_basic(&datatoSentIter, DBUS_TYPE_BOOLEAN, &singleData); // TODO: 向连接发送并flush 以上是发送,接收此单个bool数据也很简单: DBusMessageIter