dbus

DBus研究笔记(一)

旧街凉风 提交于 2019-12-06 07:42:57
一.建立连接 要使用DBus进行通信必须首先与系统建立连接, 并申请一个"域名"使得其他应用可以找到你。常用DBusConnection* dbus_bus_get(DBusBusType, DBusError*)系列函数来与bus daemon建立连接。DBusBusType为需要连接的总线类型有系统总线,会话总线,和DBUS_BUS_STARTER。系统总线顾名思义在整个系统级别都有效,而会话总线只是相对于当前登录的用户。 需要说明的问题有两个:第一.dbus_bus_get可以被调用多次当用户,不想使用这个连接的时候需要需要调用dbus_connection_unref解除引用,原因在于,dbus_bus_get这个接口获取的连接不是私有的,不能直接调用dbus_connection_close关闭连接。第二.如果dbus_bus_get获得的是一个新的连接那么dbus_bus_get内部会调用dbus_connection_set_exit_on_disconnection()接口当用户把connection解除引用的时候,应用程序会自动退出。一般我们会在dbus_bus_get之后调用接口撤销该设置。 其实dbus_bus_get所做的事情远比我们以为的复杂的多,首先做的第一件事情是,初始化bus_connection_addresses这个指针数组,指针指向的是总线地址

write DBUS Services (II)

被刻印的时光 ゝ 提交于 2019-12-06 07:42:42
For the system bus server you would need only to modify line 13 from the session bus server and line 7 from the client scripts; to replace SessionBus() with SystemBus() . Let’s also change the names for the methods and for the service. The final code would look like this: #!/usr/bin/env python3 from gi.repository import GLib import dbus import dbus.service from dbus.mainloop.glib import DBusGMainLoop class Session_DBus(dbus.service.Object): def __init__(self): bus_name=dbus.service.BusName('org.me.test_system',bus=dbus.SystemBus()) dbus.service.Object.__init__(self,bus_name,'/org/me/test

DBus 进程间的通信

家住魔仙堡 提交于 2019-12-06 07:42:27
summary DBus本身是属于比较高阶层的IPC的分装,他的底层是用socket来实现的。 DBus的应用特别的广泛,比如systemd, USB热拔插,界面程序之间的通信等等。 DBus还有更高级的封装,比如 GDBUS和QDBUS。 theory dbus的原理很简单,没有什么好讲的,只要知道client,server和deamon之间的相互交互就可以了,dbus的优势在与清晰的统一的借口定义,然后是其无所不在的广泛的应用。 Keywords DBus有几个重要的概念: signal : 是由server向client发送的message method: 是由client发起请求后server响应的消息 interface:就是一系列的signal和method的集合,类比C++的class,他会有一个自己的名字。 proxy:代表远端的server Implement 所有的通信都需要一个event loop来对通信实时响应,gdbus中有g_main_loop, 这个很简洁明了。 其中有一些简单的回调函数作为响应,dbus的回调有连接和断开两个,因为dbus程序可以在运行的过程中实现不停的断开和连接的变化,而不是一开始就设定好了状态的,这个设置非常好用,比如usb的热插拔,随便什么时候插什么时候拔都OK。但是这个要特别留心memory leak的问题。

dbus-send以及dbus-monitor工具的使用方法示例

北城以北 提交于 2019-12-06 07:42:15
dbus-send以及dbus-monitor工具的使用方法示例。 dbus-send的详细用法可以参阅手册($man dbus-send或者$dbus-send --help)。 调用远程方法的一般形式是: $ dbus-send [--system | --session] --type=method_call --print-reply --dest=连接名 对象路径 接口名.方法名 参数类型:参数值 参数类型:参数值 dbus-send支持的参数类型包括:string, int32, uint32, double, byte, boolean。 下面是一些调用示例: (1)调用org.freedesktop.DBus.Introspectable.Introspect方法查看消息总线对象支持的接口。 $ dbus-send --session --type=method_call --print-reply --dest=org.freedesktop.DBus / org.freedesktop.DBu s.Introspectable.Introspect (2)You can get the number of seconds the screensaver has been active by running the following: dbus-send -

QtDbus进阶之dbus-send与dbus-monitor的使用

谁都会走 提交于 2019-12-06 07:41:56
dbus-send与dbus-monitor是常用的dbus命令行测试、监听工具 下面举一些例子 1、利用dbus-send调用远程服务器的method,由于命令过长分为三行。 dbus- send --session --dest=com.123.display --type=method_call --print-reply /com/ 123 /display com .123 .display.setDisplay byte : 0x01 byte : 0x01 byte : 0x01 byte : 0x01 byte : 0x01 指定发送的类型是session,远程服务器名字用–dest指定,–type指定是signal还是method_call ,–print-replay表示打印接收到的消息,/com/123/display为dbus服务器的path,com.123.display.setDisplay为interface.name,interface的名字是com.123.display,method函数名为setDisplay,一共传送了5个字节。在dbus-send中byte即uchar。 2、利用dbus-send发送signal dbus-send --session --type=signal / com / 123 /camera com .123

DBus介绍

假装没事ソ 提交于 2019-12-06 07:41:38
一篇关于DBus的入门介绍,澄清了一些D-Bus中容易混淆的概念 意译:freeworkzz 日期:2010-07-21 来源:http://www.freedesktop.org/wiki/IntroductionToDBus 关于本文 本文不是教程,更不是手册。它不会教你如何使用D-Bus,也不会教你如何安装及如何写基于D-BUS的程序。 这里有的,是解释了D-Bus到底是什么,其背后的概念以及如何将这些概念集合在一起,还有一些必须了解的术语。这里没有不必要的技术细节,也并不关心读者所使用的编程语言。初学者可以在阅读其他教程或指南前先参考本文,它将告诉你使用D-Bus可以做什么。 即使读者已经有了一本好的教程,先读一读本文也是有好处的。在D-Bus的世界中,有很多专用术语,它们与通常的概念并不完全一致。这篇文章将从最基础开始解释这些术语,从而避免理解上的偏差。本文也尝试从不同角度来看D-Bus,避免只专注于一种编程语言来阐述时对使用其他语言的读者产生排斥。 D-Bus概述 D-Bus是一种本地进程间通信机制(不同主机间的进程通信支持可能会在将来加入,但这并不是D-Bus最初设计思想)。D-Bus的特点是轻量级、快速,为主流桌面环境提供统一的进程间通信界面。 与其他重量级的进程间通信技术不同,D-Bus并未使用会话进行通信。D-Bus使用了状态以及连接的概念

dbus-python指南

怎甘沉沦 提交于 2019-12-06 07:41:11
菜鸟学dbus-python,翻译dbus-python指南,错误之处请在所难免,请诸位不吝赐教,多多指正! 查看英文原版请点这里 。 连接总线Connecting to the Bus 方法调用Making method calls 代理对象proxy objects 接口和方法Interfaces and methods See also 数据类型Data types 基本类型Basic types 基本类型转换Basic types conversions 容器类型Container types 返回值和byte_arrays和utf8_strings选项 异步方法调用Making asynchronous method calls 设置一个事件循环Setting up an event loop 向后兼容dbusglib Qt主循环 异步调用Making asynchronous calls See also 接收信号Receiving signals 信号匹配Signal matching 从一个信号获取更多信息Getting more information from a signal 字符串参数匹配String argument matching 从代理对象接收信号Receiving signals from a proxy object See also

D-Bus 配置相关(四)

旧时模样 提交于 2019-12-06 07:39:50
一个dbus daemon都一个配置文件来指定建立什么类型的dbus daemon,比如sysetm或者session类型,配置文件还会有一些资源限制,安全相关的参数设置等等 一.dbus daemon配置文件 我系统中的session的配置文件选项列出来 地址:  /etc/dbus-1/session.conf 配置文件是xml格式 june@june:/etc/dbus-1$ cat session.conf <!-- This configuration file controls the per-user-login-session message bus. Add a session-local.conf and edit that rather than changing this file directly. --> <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> <busconfig>  //root 元素 <!-- Our well-known bus type, don't change this --> <type

dbus 通信分析

这一生的挚爱 提交于 2019-12-06 07:38:28
简介 D-Bus是针对桌面环境优化的IPC(interprocess communication )机制,用于进程间的通信(会话总线)或进程与内核的通信(系统总线)。 安装python-dbus开发环境 # wget https: //pypi .python.org /packages/source/d/dbus-python/dbus-python-0 .84.0. tar .gz # ./congigure # make &sudo make install 观察系统中的dbus # sudo apt-get install d-feet # d-feet 图 1 名词解释 Bus Name: 可以把Bus Name理解为连接的名称,一个Bus Name总是代表一个应用和消息总线的连接。有两种作用不同的Bus Name,一个叫公共名(well-known names,起别名,格式是反域名的点分字符串,主要是方面其他程序访问),还有一个叫唯一名(Unique Connection Name)。 Object Paths Bus Name确定了一个应用到消息总线的连接。在一个应用中可以有多个提供服务的对象。这些对象按照树状结构组织起来。每个对象都有一个唯一的路径(Object Paths)。或者说,在一个应用中,一个对象路径标志着一个唯一的对象。 “org.fmddlmyy

linux下的dbus分析

狂风中的少年 提交于 2019-12-06 07:37:29
原文链接 点击打开链接 简单的客户端服务端程序示例 服务端只提供一种方法,add 需要两个double型的参数并把相加的结果用double型返回 客户端将用proxy对象来代理服务器,同时也使用proxy对象来使用add方法 简单的服务端程序 这个服务端会运行10秒然后自动关闭 服务端程序概述 对于服务端程序我们做了哪些事 1 包含需要的头文件 2 初始化dbus-cxx库 3 创建一个调度来管理线程,程序超时和监视I/O 4 创建一个连接来连上D-Bus 节点 5 询问在总线上要连接的程序的名字(即绑定服务端程序名和节点) 6 在总线上创造一个对象 7 添加一个叫add的方法给创建的对象 8 等待连接调用 服务端示例代码 稍后会分步解析 /*************************************************************************** * Copyright (C) 2007,2010 by Rick L. Vinyard, Jr. * * rvinyard@cs.nmsu.edu * * * * This file is part of the dbus-cxx library. * * * * The dbus-cxx library is free software; you can redistribute it