D-Bus
D-Bus
D-BUS是一個提供簡單的應用程序互相通訊的途徑的自由軟體項目,它是做為freedesktoporg項目的一部分來開發的。
D-Bus 允許程序在其上註冊以提供服務給其他的程序。同時他也提供客戶端程序查詢有哪些服務是可得的可能性。程序也可註冊以等待kernel的events比如說硬體的熱插拔。
D-Bus 以daemon的方式實現。使用者可以執行好幾個D-Bus的實體,每個實體被稱為一個channel。通常系統中會有一個特權的channel稱之為system channel,以及每個使用者擁有一個私有的實體。使用者需要私有的實體因為system channel將有存取的限制。
D-Bus受到了DCOP系統的影響而且在KDE 4中取代DCOP;他已經被集成在Qt 4, GNOME,Windows以及 Maemo 系統中。GNOME也逐漸的用它來取代了大部分的早期Bonobo機制。
System channel主要的功用在於傳遞HAL的消息給對這些消息感興趣的processes。而私有實體的功能在於提供程式間無限制的溝通。
所有使用D-BUS的應用程序都包含一些對象,它們一般映射為GObject、QObject、C++對象、或者Python對象(也許不需要)。一個對象是一個實例而不是類型。當經由一個D-BUS連接受到一條消息時,該消息是被發往一個對象而不是整個應用程序。
為了解決這一問題,D-BUS為每個對象引入名字。這些名字看起來像是文件系統路徑,例如一個對象可能叫做“/org/kde/kspread/sheets/3/cells/4/5”。易讀的路徑名是受鼓勵的做法,但也允許使用諸如“/com/mycompany/c5yo817y0c1y1c5b”等,只要它可以為你的應用程序所用。
Namespacing的對象路徑以開發者所有的域名開始(如/org/kde)以避免系統不同代碼模塊互相干擾。
函數庫libdbus,用於兩個應用程序呼叫聯繫和交互消息。一個基於libdbus構造的消息,匯流排守護進程可同時與多個應用程序相連,並能把來自一個應用程序的消息路由到0或者多個其他程序。一系列基於特定應用程序框架的Wrapper庫。 D-BUS為了兩個特定情況而設計:
同一個桌面會話中兩個桌面應用程序的通信,可使得桌面會話作為整體集成在一起以解決進程生命周期的相關問題。桌面會話和操作系統的通信,這裡操作系統一般而言包括內核和系統守護進程。