MeeGo開發進程通信核心 DBus調試工具

來源: cuteqt  發布時間: 2011-02-28 14:58  閱讀: 1347 次  推薦: 0   原文鏈接   [收藏]  
摘要:在MeeGo開發中,DBus是MeeGo進程通信的核心。在本文中我們簡要的看一下MeeGo系統的哪些地方都使用了DBus.從一個應用中啟動另一個應用時、Service Framework是基于DBus的、發布和訂閱者系統、Notification Manager也是基于DBus的、系統的配置文件如果想在變動的時候通知MeeGo中感興趣的應用,也需要用到DBus等

  我們講過用QML語言開發MeeGo應用程序,在MeeGo開發中,DBus是MeeGo進程通信的核心。我們簡要的看一下MeeGo系統的哪些地方都使用了DBus.

  1.從一個應用中啟動另一個應用時。比如在聯系人應用中想要撥打聯系人的電話時,MeeGo系統中是通過DBus做進程通信的.

  2.Service Framework是基于DBus的。比如你看到一個多媒體文件,點擊提交一個"播放文件"的請求,該請求搜索合適的應用來播放該文件.

  3.發布和訂閱者系統。比如一個屏幕上的顯示訂閱了電池的電量消息,則在電量變化時通過DBus通知訂閱者.

  4.Notification Manager也是基于DBus的。如有短信到達,Notification Manger會進行提示.

  5.系統的配置文件如果想在變動的時候通知MeeGo中感興趣的應用,也需要用到DBus,比如主題的變化等.

  6.藍牙中間件bluez和電話管理系統ofono的進程通信系統也是基于DBus的。

  鑒于DBus的這種重要性,可以說"沒有DBus就沒有MeeGo。那么我們也有必要了解一下MeeGo中有哪些DBus工具可以使用,方便在開發過程中遇到問題時更快的定位和解決問題。

  準備DBUS_SESSION_BUS_ADDRESS

  兩個基于DBus的應用要能進行通信,他們需要有同樣的DBUS_SESSION_BUS_ADDRESS.MeeGo在啟動它的uxlaunch時,會啟動一個DBus的服務進程,可以從這個進程里得到DBUS_SESSION_BUS_ADDRESS的值,而且通過uxlaunch加載的應用會繼承該環境變量,如果是自己從命令行啟動的話,那么需要在運行你的應用前設置好該環境變量,才能正常的和MeeGo系統里的已有應用進行通信。可以通過如下方法設置該值.

 
1. export `tr ‘\0′ ‘\n’
< /proc/$(pidof duihome)/environ|grep DBUS_SESSION_BUS_ADDRESS`

  工具1:dbus-send/dbus-monitor

  這個是隨dbus軟件包一起發布的工具,封裝比較底層,這里不做介紹了。可以在控制臺命令行里輸入man dbus-send查詢詳細用法。

  工具2:qdbus

  該工具是基于Qt的一個命令行工具。用法如下

 
1. qdbus [--system] [--literal] [servicename] [path] [method] [args]
2. servicename the service to connect to (e.g., org.freedesktop.DBus)
3. path the path to the object (e.g., /)
4. method the method to call, with or without the interface
5. args arguments to pass to the call

  有兩個參數

  system 連接到system-bus(dbus有兩種bus,一種是session-bus,一種是system-bus,不加參數默認連接到session-bus.)

  literal 打印原始返回信息

  * 如果qdbus命令不帶任何參數,將會列出在dbus上所有的service.

  * 假如參數里只有service的名字,那么qdbus會列出所有的對象路徑.

  * 如果qdbus命令給出了service的名字和對應的對象路徑,則該路徑上的方法,信號和可用的屬性都會被列出來.

  qdbus 用法舉例

  列出session bus的所有service

 
1. $ qdbus

  列出system bus的所有service

 
1. $ qdbus system

  列出com.nokia.meego-im-uiserver service上所有路徑

 
1. $ qdbus com.nokia.meego-im-uiserver

  列出com.nokia.meego-im-uiserver service上某一路徑里可用的方法

 
1. $ qdbus com.nokia.meego-im-uiserver /org/maemo/duiinputmethodserver1

  調用指定service,指定路徑上的某個方法。

 
1. $ qdbus com.nokia.meego-im-uiserver /org/maemo/duiinputmethodserver1
org.maemo.duiinputmethodserver1.showInputMethod

  工具3:d-feet

  d-feet是一個用python寫的應用,在MeeGo中可以用如下命令安裝

 
1. #zypper install d-feet

  要查看系統里有哪些已經注冊的dbus service, 運行d-feet命令

 
1. #d-feet

Dfeet-dbus1

  如要調用指定的method,在對應的method上雙擊就可以了.

Dfeet-dbus2

  如要如果該method需要參數,則會彈出參數選項框 

Dfeet-dbus3

  工具4:qdbusviewer

  qdbusviewer則是Qt軟件包中的一個開發工具,在MeeGo中可以用如下命令安裝

 
1. #zypper install qt-devel-tools

  要查看系統里有哪些已經注冊的dbus service, 運行qdbusviewer命令

 
1. #qdbusviewer

Qdbusviewer

  如果想調用對應的method,在該方法上點擊鼠標右鍵,可以看到Call字樣,選擇即可

Qdbusviewer_call

  結語

  有了這些工具,你不僅可以很方便的知道系統里的服務是不是正常被注冊運行了。還可以無中生有的產生一些事件,比如模擬短信收到,或者電話撥入等。這樣你在模擬器上也可以調試一些本啦需要硬件支持的功能了。

0
0
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()