<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>中文 &#187; cuteqt</title>
	<atom:link href="http://software.intel.com/zh-cn/blogs/author/cuteqt/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/zh-cn/blogs</link>
	<description></description>
	<lastBuildDate>Mon, 28 May 2012 13:40:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>MeeGo 的 DBus 调试工具</title>
		<link>http://software.intel.com/zh-cn/blogs/2011/03/08/meego-dbus/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2011/03/08/meego-dbus/#comments</comments>
		<pubDate>Tue, 08 Mar 2011 02:43:04 +0000</pubDate>
		<dc:creator>cuteqt</dc:creator>
				<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[开放源代码]]></category>
		<category><![CDATA[移动技术]]></category>
		<category><![CDATA[DBus]]></category>
		<category><![CDATA[MeeGo]]></category>
		<category><![CDATA[Qt]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2011/03/08/meego-dbus/</guid>
		<description><![CDATA[  DBus是MeeGo进程通信的核心。我们简要的看一下MeeGo系统的哪些地方都使用了DBus. 1.从一个应用中启动另一个应用时。比如在联系人应用中想要拨打联系人的电话时，MeeGo系统中是通过DBus做进程通信的． 2.Service Framework是基于DBus的。比如你看到一个多媒体文件，点击提交一个＂播放文件＂的请求，该请求搜索合适的应用来播放该文件． 3.发布和订阅者系统。比如一个屏幕上的显示订阅了电池的电量消息，则在电量变化时通过DBus通知订阅者. 4.Notification Manager也是基于DBus的。如有短信到达，Notification Manger会进行提示. 5.系统的配置文件如果想在变动的时候通知ＭeeGo中感兴趣的应用，也需要用到DBus,比如主题的变化等． ６. 蓝牙中间件bluez和电话管理系统ofono的进程通信系统也是基于DBus的。 鉴于DBus的这种重要性，可以说＂没有DBus就没有MeeGo"。那么我们也有必要了解一下MeeGo中有哪些DBus工具可以使用，方便在开发过程中遇到问题时更快的定位和解决问题。 准备DBUS_SESSION_BUS_ADDRESS 两个基于DBus的应用要能进行通信，他们需要有同样的DBUS_SESSION_BUS_ADDRESS．ＭeeGo在启动它的uxlaunch时，会启动一个DBus的服务进程，可以从这个进程里得到DBUS_SESSION_BUS_ADDRESS的值，而且通过uxlaunch加载的应用会继承该环境变量，如果是自己从命令行启动的话，那么需要在运行你的应用前设置好该环境变量，才能正常的和MeeGo系统里的已有应用进行通信。可以通过如下方法设置该值． export `tr '' '\n' &#60; /proc/$(pidof duihome)/environ&#124;grep DBUS_SESSION_BUS_ADDRESS` 工具１：dbus-send/dbus-monitor 这个是随dbus软件包一起发布的工具，封装比较底层，这里不做介绍了。可以在控制台命令行里输入man dbus-send查询详细用法。 工具2：qdbus 该工具是基于Qt的一个命令行工具。用法如下 qdbus [--system] [--literal] [servicename] [path] [method] [args] servicename the service to connect to (e.g., org.freedesktop.DBus) path the path to the object (e.g., /) method the method to [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #000080;"> </span></p>
<p><span style="color: #000080;">DBus是MeeGo进程通信的核心。我们简要的看一下MeeGo系统的哪些地方都使用了DBus.</span></p>
<p><span style="color: #000080;">1.从一个应用中启动另一个应用时。比如在联系人应用中想要拨打联系人的电话时，MeeGo系统中是通过DBus做进程通信的．</span></p>
<p><span style="color: #000080;">2.Service Framework是基于DBus的。比如你看到一个多媒体文件，点击提交一个＂播放文件＂的请求，该请求搜索合适的应用来播放该文件．</span></p>
<p><span style="color: #000080;">3.发布和订阅者系统。比如一个屏幕上的显示订阅了电池的电量消息，则在电量变化时通过DBus通知订阅者.</span></p>
<p><span style="color: #000080;">4.Notification Manager也是基于DBus的。如有短信到达，Notification Manger会进行提示.</span></p>
<p><span style="color: #000080;">5.系统的配置文件如果想在变动的时候通知ＭeeGo中感兴趣的应用，也需要用到DBus,比如主题的变化等．</span></p>
<p><span style="color: #000080;">６. 蓝牙中间件bluez和电话管理系统ofono的进程通信系统也是基于DBus的。</span></p>
<p><span style="color: #000080;">鉴于DBus的这种重要性，可以说＂没有DBus就没有MeeGo"。那么我们也有必要了解一下MeeGo中有哪些DBus工具可以使用，方便在开发过程中遇到问题时更快的定位和解决问题。</span></p>
<h3><span style="color: #000080;">准备DBUS_SESSION_BUS_ADDRESS</span></h3>
<p><span style="color: #000080;">两个基于DBus的应用要能进行通信，他们需要有同样的DBUS_SESSION_BUS_ADDRESS．ＭeeGo在启动它的uxlaunch时，会启动一个DBus的服务进程，可以从这个进程里得到DBUS_SESSION_BUS_ADDRESS的值，而且通过uxlaunch加载的应用会继承该环境变量，如果是自己从命令行启动的话，那么需要在运行你的应用前设置好该环境变量，才能正常的和MeeGo系统里的已有应用进行通信。可以通过如下方法设置该值．</span></p>
<blockquote><p><span style="color: #000080;">export `tr '' '\n' &lt; /proc/$(pidof duihome)/environ|grep DBUS_SESSION_BUS_ADDRESS`</span></p></blockquote>
<h3>工具１：dbus-send/dbus-monitor</h3>
<p>这个是随dbus软件包一起发布的工具，封装比较底层，这里不做介绍了。可以在控制台命令行里输入man dbus-send查询详细用法。</p>
<h3>工具2：qdbus</h3>
<p>该工具是基于Qt的一个命令行工具。用法如下</p>
<blockquote><p>qdbus [--system] [--literal] [servicename] [path] [method] [args]</p>
<p>servicename the service to connect to (e.g., org.freedesktop.DBus)<br />
path the path to the object (e.g., /)<br />
method the method to call, with or without the interface<br />
args arguments to pass to the call</p></blockquote>
<p>有两个参数</p>
<blockquote><p>--system 连接到system-bus(dbus有两种bus,一种是session-bus,一种是system-bus,不加参数默认连接到session-bus.)<br />
--literal 打印原始返回信息</p></blockquote>
<p>* 如果qdbus命令不带任何参数，将会列出在dbus上所有的service.<br />
* 假如参数里只有service的名字，那么qdbus会列出所有的对象路径.<br />
* 如果qdbus命令给出了service的名字和对应的对象路径,则该路径上的方法,信号和可用的属性都会被列出来．</p>
<h4>qdbus 用法举例</h4>
<p>列出session bus的所有service</p>
<blockquote><p>$ qdbus</p></blockquote>
<p>列出system bus的所有service</p>
<blockquote><p>$ qdbus --system</p></blockquote>
<p>列出com.nokia.meego-im-uiserver service上所有路径</p>
<blockquote><p>$ qdbus com.nokia.meego-im-uiserver</p></blockquote>
<p>列出com.nokia.meego-im-uiserver service上某一路径里可用的方法</p>
<blockquote><p>$ qdbus com.nokia.meego-im-uiserver /org/maemo/duiinputmethodserver1</p></blockquote>
<p>调用指定service,指定路径上的某个方法。</p>
<blockquote><p>$ qdbus com.nokia.meego-im-uiserver /org/maemo/duiinputmethodserver1 org.maemo.duiinputmethodserver1.showInputMethod</p></blockquote>
<h3>工具3：d-feet</h3>
<p>d-feet是一个用python写的应用，在MeeGo中可以用如下命令安装</p>
<blockquote><p>#zypper install d-feet</p></blockquote>
<p>要查看系统里有哪些已经注册的dbus service, 运行d-feet命令</p>
<blockquote><p>#d-feet</p></blockquote>
<p><a href="http://www.cuteqt.com/blog/wp-content/uploads/2011/02/Dfeet-dbus1.png"><img class="alignnone size-medium wp-image-2042" src="http://www.cuteqt.com/blog/wp-content/uploads/2011/02/Dfeet-dbus1-300x211.png" alt="" width="540" height="390" /></a><br />
如要调用指定的method,在对应的method上双击就可以了．<br />
<a href="http://www.cuteqt.com/blog/wp-content/uploads/2011/02/Dfeet-dbus2.png"><img class="alignnone size-medium wp-image-2044" src="http://www.cuteqt.com/blog/wp-content/uploads/2011/02/Dfeet-dbus2-300x211.png" alt="" width="540" height="390" /></a><br />
如要如果该method需要参数，则会弹出参数选项框<br />
<a href="http://www.cuteqt.com/blog/wp-content/uploads/2011/02/Dfeet-dbus3.png"><img class="alignnone size-medium wp-image-2045" src="http://www.cuteqt.com/blog/wp-content/uploads/2011/02/Dfeet-dbus3-240x300.png" alt="" width="240" height="300" /></a></p>
<h3>工具4：qdbusviewer</h3>
<p>qdbusviewer则是Qt软件包中的一个开发工具，在MeeGo中可以用如下命令安装</p>
<blockquote><p>#zypper install qt-devel-tools</p></blockquote>
<p>要查看系统里有哪些已经注册的dbus service, 运行qdbusviewer命令</p>
<blockquote><p>#qdbusviewer</p></blockquote>
<p><a href="http://www.cuteqt.com/blog/wp-content/uploads/2011/02/Qdbusviewer.png"><img class="alignnone size-medium wp-image-2050" src="http://www.cuteqt.com/blog/wp-content/uploads/2011/02/Qdbusviewer-300x277.png" alt="" width="540" height="500" /></a><br />
如果想调用对应的method,在该方法上点击鼠标右键，可以看到"Call"字样，选择即可<br />
<a href="http://www.cuteqt.com/blog/wp-content/uploads/2011/02/Qdbusviewer_call.png"><img class="alignnone size-medium wp-image-2051" src="http://www.cuteqt.com/blog/wp-content/uploads/2011/02/Qdbusviewer_call-300x277.png" alt="" width="540" height="500" /></a></p>
<h3>结语</h3>
<p>有了这些工具，你不仅可以很方便的知道系统里的服务是不是正常被注册运行了。还可以无中生有的产生一些事件，比如模拟短信收到，或者电话拨入等。这样你在模拟器上也可以调试一些本啦需要硬件支持的功能了。</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2011/03/08/meego-dbus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

