dbus-glib bindings 入門磚
當你需要用 C 語言實作一個 D-Bus 服務時,你有兩種選擇。其一,使用 D-Bus Low-Level API ( D-Bus Low-Level API Tutorial)。但是 D-Bus 開發人員強烈建議我們不要使用這種方法 (WARNING: you should NOT use this API unless you absolutely have to.
)。其二,使用 dbus-glib bindings 。絕大多數時候,我們都將採用此一方法。
你首先需要參考 DBus Tutorial 這篇文章。這篇文章說明了 D-Bus 的設計概念與運作機制。然而,它的內容太少,遠遠不足以支撐你完成工作。真正能幫助你完成 D-Bus 服務實作工作的文件中,訊息最完整的是「DBusGlibBindings 」的源碼 (licensed by GPL)。
其次,dbus-glib binding 架構在 GNOME (Gnome Network Object Model Environment) 之上。所以必須先學習 GNOME 核心的 Object system (GObject) 才能運用。在此要特別說明 GNOME 的意思,GNOME is GNU Network Object Model Environment. 它代表兩項意涵: 1. 桌面環境。 2. 使用 C 語言建立的 Object-oriented development platform。在 dbus-glib binding 中, GNOME 的用途是第2個: 使用 C 語言建立的 Object-oriented development platform。跟桌面環境沒有關係。所以不要以為 dbus-glib binding 只能運作在具有 X Window 的桌面環境上,它也可以運作在純文字環境。
在 GNU/Linux 環境下,GNOME (glib) 大幅擴展了 C 語言的基礎函數庫內容,其重要性與豐富度,可比 C++ 的 Boost Libraries。學習它有很大的好處。
Debian/Ubuntu required package: dbus-glib-1, gnome-common, libdbus-glib-1-dev
到 DBusGlibBindings ,下載源碼包 (program.tar.gz), 解開後,執行其中的 autogen.sh
產生 Autoconf 與 Automake 所需的文件,包含 configure 與 Makefile 。
DBusGlibBindings源碼包具有 Autoconf 與 Automake 的建置架構,幫我們處理了許多繁複的工具操作。我們通常只需要修改 program.c 以及相對應的 D-Bus 服務介面宣告文件(XML格式),便可產生自定的 D-Bus 服務。
Glib 參考文件
當你用 C 語言開發 D-Bus 服務時,你絕大多數時間是在跟 glib 打交道。在我的經驗中,下列手冊是我們一定要了解的內容。
- GObject Reference Manual
- GLib Basic Types
- GLib Enumeration and Flag Types
- GLib Error Reporting
- GLib Quarks
D-Bus 參考文件
- D-Bus service activation
- D-Bus Tutorial
- D-Bus GLib bindings - Reference Manual
- D-Bus low-level API
- rhythmbox source codes
- network-manager source codes
Autoconf, Automake
關於 Autoconf, Automake 的使用,可以參考下列兩篇我寫的文章。
其他語言的 DBus bindings
除了 C 語言,我也使用 Ruby, Python 和 PHP 實作與使用 D-Bus 服務。
- Write a D-Bus service by Ruby
- Write a PHP DBus client
- Write a D-Bus service by Python (working...)