fbpx
维基百科

D-Bus

D-Bus是一個行程間通訊远程过程调用機制,可以讓多個不同的计算机程序(即行程)在同一臺電腦上同時進行通訊[6]。D-Bus作為freedesktop.org專案的一部份,其設計目的是使Linux桌面环境(如GNOMEKDE等)提供的服務標準化。

D-Bus
開發者紅帽公司及社群
当前版本
  • 1.14.8 (2023年6月6日;穩定版本)[1]
  • 1.15.6 (2023年6月6日;不稳定版)[2]
源代码库
  • gitlab.freedesktop.org/dbus/dbus.git
编程语言C
操作系统跨平台
类型
许可协议GNU通用公共许可证第二版或更新,或是AFL 2.1[3]
网站www.freedesktop.org/wiki/Software/dbus

freedesktop.org專案同時也開發了一個稱為libdbus的自由及开放源代码软件函式庫,作為規範的參考實作。這個函式庫常與D-Bus本身混淆。也存在著其他的D-Bus實作,像是GDBus (GNOME)[7],QtDBus (Qt/KDE)[8],dbus-java[9]以及sd-bus(systemd的一部份)[10]

概觀

 
沒有D-Bus時程序間的通訊
 
使用D-Bus時程序間的通訊
沒有D-Bus時,如果大量的程序需要彼此進行通訊,其通訊網路將會非常復雜及龐大(因爲大部分程序使用一對一通訊)。使用D-Bus則可以簡化通訊網路。

D-Bus可用於同一個桌面会话中不同桌面应用软件間的通訊,能整合桌面会话,也解決了行程的生命週期的問題。它也允許桌面会话與操作系统間的通訊,這通常包括了内核與任何的系統守护进程或一般行程間的通訊。

當大量的程序進行通訊時,由於程序跟程序之間必須建立起一對一的通訊,則整體的通訊網路將會非常復雜,而通訊效率也會因此低下不可靠。D-Bus提供了一個軟體匯流韃靼語Software bus抽象層,能夠匯整所有的訊息到一個虛擬的通訊頻道[6]。連接到D-Bus的程序無法也無需知道D-Bus是如何實做,但是只要遵從D-Bus的標準,就能保證所有連接到D-Bus的程序能進行彼此間的交流。換句話說,D-Bus是一個訊息匯流排英语Message-oriented middleware系統,即行程間通訊的媒介,讓應用程式間可以通訊並交換訊息。因此,D-Bus为應用程式增加新的功能,簡化已有功能,包含資訊分享、模組化及權限分離英语Privilege separation。例如透過藍牙Skype所接收到的通話可以傳播到任何目前執行中的音樂播放器,並可使其靜音或暫停播放,直到通話結束[11]

大多數的系統會實作一個具較高權限的系統頻道,連同給每一個已登入的使用者的專用頻道,這就可以讓D-Bus中可用的登錄資訊受到限制。因此,D-Bus服務同時包含了系統守護行程(給像是「新增硬體裝置」或是「印表機佇列變更」等事件使用)以及一個給每個使用者的登入会话(給这个使用者啟動的行程間的一般通訊使用)使用的獨有守护进程。應用程式透過Unix域套接字與守護行程通訊。訊息匯流排是建基於通用的一對一訊息傳遞框架,這讓任意兩個程式間可以不必透過訊息匯流排守護行程而直接通訊[12]

內部

 
dbus-daemon在現代的Linux圖形化桌面環境中扮演相當重要的角色。上面同時也有出現的Binder則是在Android上的等價軟體。

D-Bus有三個抽象層[11]

  • libdbus —— 讓兩個應用程式可以互相連結並交換訊息的函式庫
  • dbus-daemon —— 訊息匯流排的可執行檔,建基於libdbus,可連結到多個應用程式。這個守護行程可以將訊息按特定路徑轉送給零個或更多個應用程式,從而實作发布/订阅模式。
  • 基於特定應用程式框架的封裝函式庫

接收到訊息的D-Bus連線會被轉送到一個特定的物件,而非行程。因此,客戶端只知道它們是與物件互動,但並不知道另一側是否真的有物件。

D-Bus為每個物件定義了一個名稱,其看起來像是POSIX檔案系統路徑,但實際上並不是,例如/org/kde/kspread/sheets/3/cells/4/5。D-Bus物件的名稱通常會使用命名空间以協助獨立開發程式碼模組[13]。命名空間一般會以開發者的保留域名組件作為前綴(例如/org/kde)。

採用

KDE第二版與第三版使用的DCOP英语DCOP系統对D-Bus有深刻影响,后者在KDE 4中取代了前者。D-Bus的實作支援大多數的POSIX作業系統,也有一個Windows的移植。它也在Qt 4、GNOMEXfce中使用。在GNOME中,它已逐漸取代了早期的Bonobo英语Bonobo (component model)機制。

D-Bus最初用于桌面環境,后来使用範圍逐漸扩展,包含的系統服務越來越多。例如NetworkManager網路守護行程、BlueZ藍牙堆疊及PulseAudio音訊伺服器都使用D-Bus來提供其部份或全部的服務,systemd也正促使傳統的系統守護行程(如logind)轉換到D-Bus服務。[來源請求]

它也用于AllJoyn協定在家庭自動化中的導線協定英语Wire protocol,為AllJoyn加入了探索、工作階段管理、安全、標頭壓縮、嵌入式裝置支援[14]

實作

libdbus
雖然已經有多個D-Bus的實作,但其中使用最廣泛的參考實作是libdbus,開發者就是設計規範的freedesktop.org專案。不过libdbus是一個低階的實作,並不會直接被應用程式開發者所使用,但是可作為其他D-Bus實作(像是包含在桌面環境的標準函式庫中或是在编程语言綁紮中的實作)的參考指南。freedesktop.org專案自身建議應用程式的作者「使用較高階的綁紮或是實作」來替代[15]
因為libdbus是最常被使用的D-Bus實作,術語"D-Bus"與"libdbus"經常互換使用,導致了混亂。
GDBus
GDBus[7]是一個基於包含在GLib中的GIO串流英语GIO (software)的D-Bus實作,其致力於讓GTK+GNOME使用。GDBus並不是libdbus的封裝,而是一個完整且獨立的D-Bus規範與協定的重新實作[16]
QtDBus
QtDBus[8]是一個自4.2版開始,包含於Qt函式庫的D-Bus實作。這個組件也被KDE的應用程式、函式庫及組件用於存取在系統中所提供的D-Bus服務。
sd-bus
2013年時,systemd專案重寫了libdbus,並努力簡化程式碼[17],它也使得D-Bus的整體效能有所提升。在先前的測試中,BMW發現systemd的D-Bus函式庫效能增長了360%[18]。 而到了221版本的systemd,sd-bus的应用程序接口(英語:API)已被宣告為穩定[19]
kdbus
另外還有一個積極開發中的專案,稱為kdbus,其致力於重新實作D-Bus為核心中介的點對點行程間通訊機制。除了效能的提升,kdbus也受益於已經存在的Linux内核特性,像是命名空間、審核機制[20][21]、核心傳遞的安全特性、終止競爭條件等,並讓D-Bus可以在開機與關機時使用(此時需要systemd)[22]。但kdbus在Linux核心的特性中造成了不尋常的爭議[23],是以截至2015年6月 (2015-06)都尚未被合併[24]
語言綁紮
已經有多個程式語言的D-Bus綁紮被開發出來[25],像是 JavaC♯Ruby以及Python等的綁紮均已存在。

參見

參考資料

  1. ^ Announcing dbus 1.14.8 (security update). 
  2. ^ Announcing dbus 1.15.6 (development release). 
  3. ^ havoc. . Havoc's Blog. 2007-07-17 [2015-08-27]. (原始内容存档于2015-09-07). 
  4. ^ Simon McVittie. . 2022-02-28 [2022-02-28]. (原始内容存档于2022-03-01). 
  5. ^ Simon McVittie. . 2022-02-23 [2022-02-23]. (原始内容存档于2022-02-28). 
  6. ^ 6.0 6.1 Cocagne, Tom. . pythonhosted.org. [2015-05-23]. (原始内容存档于2015-06-08). 
  7. ^ 7.0 7.1 gdbus. GNOME developer. GNOME project. [2015-01-04]. (原始内容于2015-01-05). 
  8. ^ 8.0 8.1 QtDBus module. Qt專案. Qt專案. [2015-06-01]. (原始内容于2015-05-06). 
  9. ^ . FreeDesktop.org. [2015-01-04]. (原始内容存档于2014-12-23). 
  10. ^ The new sd-bus API of systemd. 2015-06-19 [2015-06-20]. (原始内容于2015-06-22). 
  11. ^ 11.0 11.1 Robert Love. Get on the D-BUS. Linux Journal. 2005-01-05 [2014-10-14]. (原始内容于2014-10-20). 
  12. ^ dbus: What is D-Bus?. freedesktop.org. 2014-01-20 [2014-10-14]. (原始内容于2014-10-18). 
  13. ^ . [2015-08-28]. (原始内容存档于2015-08-28). 
  14. ^ . Allseen Alliance. 2013-12-11 [2015-08-27]. (原始内容存档于2015-07-21). 
  15. ^ What is D-Bus?. FreeDesktop.org. [2015-01-05]. (原始内容于2015-01-05). 
  16. ^ Migrating to GDBus. GNOME Developer. [2015-06-16]. (原始内容于2015-09-06). 
  17. ^ Poettering, Lennart. libsystemd-bus + kdbus plans. systemd-devel mailing list. [2015-04-24]. (原始内容于2019-06-24). 
  18. ^ ALS: Linux inter-process communication and kdbus. LWN.net. 2013-05-30 [2013-11-13]. (原始内容于2013-11-13). 
  19. ^ [systemd-devel] [ANNOUNCE] systemd v221. freedesktop.org. 2015-06-19 [2015-06-20]. (原始内容于2015-06-20). 
  20. ^ Jake Edge. ALS: Linux interprocess communication and kdbus. LWN.net. 2013-05-30 [2014-04-11]. (原始内容于2014-04-09). 
  21. ^ Jonathan Corbet. The unveiling of kdbus. LWN.net. 2014-01-13 [2014-04-11]. (原始内容于2014-04-09). 
  22. ^ Greg Kroah-Hartman. [GIT PULL] kdbus for 4.1-rc1. 2015-04-13 [2015-08-28]. (原始内容于2015-07-01). 
  23. ^ Corbet, Jonathan. The kdbuswreck. LWN.Net. [2015-06-29]. (原始内容于2015-06-24). 
  24. ^ Michael Larabel. It Doesn't Look Like KDBUS Will Make It For Linux 4.1. Phoronix. 2015-04-26 [2015-08-28]. (原始内容于2015-09-05). 
  25. ^ D-Bus Bindings. FreeDesktop.org. [2015-01-05]. (原始内容于2014-12-24). 

外部連結

  • D-Bus(页面存档备份,存于互联网档案馆)在Freedesktop.org上的首頁
  • D-Bus的簡介(页面存档备份,存于互联网档案馆)在Freedesktop.org的wiki上

是一個行程間通訊及远程过程调用機制, 可以讓多個不同的计算机程序, 即行程, 在同一臺電腦上同時進行通訊, 作為freedesktop, org專案的一部份, 其設計目的是使linux桌面环境, 如gnome與kde等, 提供的服務標準化, 開發者紅帽公司及社群当前版本1, 2023年6月6日, 穩定版本, 2023年6月6日, 不稳定版, 源代码库gitlab, freedesktop, dbus, dbus, git编程语言c操作系统跨平台类型ipc守護行程桌面應用的linux许可协议gnu通用公共许可证第二版. D Bus是一個行程間通訊及远程过程调用機制 可以讓多個不同的计算机程序 即行程 在同一臺電腦上同時進行通訊 6 D Bus作為freedesktop org專案的一部份 其設計目的是使Linux桌面环境 如GNOME與KDE等 提供的服務標準化 D Bus開發者紅帽公司及社群当前版本1 14 8 2023年6月6日 穩定版本 1 1 15 6 2023年6月6日 不稳定版 2 源代码库gitlab wbr freedesktop wbr org wbr dbus wbr dbus wbr git编程语言C操作系统跨平台类型IPC守護行程桌面應用的Linux许可协议GNU通用公共许可证第二版或更新 或是AFL 2 1 3 网站www wbr freedesktop wbr org wbr wiki wbr Software wbr dbusfreedesktop org專案同時也開發了一個稱為libdbus的自由及开放源代码软件函式庫 作為規範的參考實作 這個函式庫常與D Bus本身混淆 也存在著其他的D Bus實作 像是GDBus GNOME 7 QtDBus Qt KDE 8 dbus java 9 以及sd bus systemd的一部份 10 目录 1 概觀 2 內部 3 採用 4 實作 5 參見 6 參考資料 7 外部連結概觀 编辑 沒有D Bus時程序間的通訊 使用D Bus時程序間的通訊沒有D Bus時 如果大量的程序需要彼此進行通訊 其通訊網路將會非常復雜及龐大 因爲大部分程序使用一對一通訊 使用D Bus則可以簡化通訊網路 D Bus可用於同一個桌面会话中不同桌面应用软件間的通訊 能整合桌面会话 也解決了行程的生命週期的問題 它也允許桌面会话與操作系统間的通訊 這通常包括了内核與任何的系統守护进程或一般行程間的通訊 當大量的程序進行通訊時 由於程序跟程序之間必須建立起一對一的通訊 則整體的通訊網路將會非常復雜 而通訊效率也會因此低下不可靠 D Bus提供了一個軟體匯流 韃靼語 Software bus 抽象層 能夠匯整所有的訊息到一個虛擬的通訊頻道 6 連接到D Bus的程序無法也無需知道D Bus是如何實做 但是只要遵從D Bus的標準 就能保證所有連接到D Bus的程序能進行彼此間的交流 換句話說 D Bus是一個訊息匯流排 英语 Message oriented middleware 系統 即行程間通訊的媒介 讓應用程式間可以通訊並交換訊息 因此 D Bus为應用程式增加新的功能 簡化已有功能 包含資訊分享 模組化及權限分離 英语 Privilege separation 例如透過藍牙或Skype所接收到的通話可以傳播到任何目前執行中的音樂播放器 並可使其靜音或暫停播放 直到通話結束 11 大多數的系統會實作一個具較高權限的系統頻道 連同給每一個已登入的使用者的專用頻道 這就可以讓D Bus中可用的登錄資訊受到限制 因此 D Bus服務同時包含了系統守護行程 給像是 新增硬體裝置 或是 印表機佇列變更 等事件使用 以及一個給每個使用者的登入会话 給这个使用者啟動的行程間的一般通訊使用 使用的獨有守护进程 應用程式透過Unix域套接字與守護行程通訊 訊息匯流排是建基於通用的一對一訊息傳遞框架 這讓任意兩個程式間可以不必透過訊息匯流排守護行程而直接通訊 12 內部 编辑 dbus daemon 在現代的Linux圖形化桌面環境中扮演相當重要的角色 上面同時也有出現的Binder則是在Android上的等價軟體 D Bus有三個抽象層 11 libdbus 讓兩個應用程式可以互相連結並交換訊息的函式庫 dbus daemon 訊息匯流排的可執行檔 建基於libdbus 可連結到多個應用程式 這個守護行程可以將訊息按特定路徑轉送給零個或更多個應用程式 從而實作发布 订阅模式 基於特定應用程式框架的封裝函式庫接收到訊息的D Bus連線會被轉送到一個特定的物件 而非行程 因此 客戶端只知道它們是與物件互動 但並不知道另一側是否真的有物件 D Bus為每個物件定義了一個名稱 其看起來像是POSIX檔案系統路徑 但實際上並不是 例如 org kde kspread sheets 3 cells 4 5 D Bus物件的名稱通常會使用命名空间以協助獨立開發程式碼模組 13 命名空間一般會以開發者的保留域名組件作為前綴 例如 org kde 採用 编辑KDE第二版與第三版使用的DCOP 英语 DCOP 系統对D Bus有深刻影响 后者在KDE 4中取代了前者 D Bus的實作支援大多數的POSIX作業系統 也有一個Windows的移植 它也在Qt 4 GNOME及Xfce中使用 在GNOME中 它已逐漸取代了早期的Bonobo 英语 Bonobo component model 機制 D Bus最初用于桌面環境 后来使用範圍逐漸扩展 包含的系統服務越來越多 例如NetworkManager網路守護行程 BlueZ藍牙堆疊及PulseAudio音訊伺服器都使用D Bus來提供其部份或全部的服務 systemd也正促使傳統的系統守護行程 如logind 轉換到D Bus服務 來源請求 它也用于AllJoyn協定在家庭自動化中的導線協定 英语 Wire protocol 為AllJoyn加入了探索 工作階段管理 安全 標頭壓縮 嵌入式裝置支援 14 實作 编辑libdbus 雖然已經有多個D Bus的實作 但其中使用最廣泛的參考實作是libdbus 開發者就是設計規範的freedesktop org專案 不过libdbus是一個低階的實作 並不會直接被應用程式開發者所使用 但是可作為其他D Bus實作 像是包含在桌面環境的標準函式庫中或是在编程语言綁紮中的實作 的參考指南 freedesktop org專案自身建議應用程式的作者 使用較高階的綁紮或是實作 來替代 15 因為libdbus是最常被使用的D Bus實作 術語 D Bus 與 libdbus 經常互換使用 導致了混亂 GDBus GDBus 7 是一個基於包含在GLib中的GIO串流 英语 GIO software 的D Bus實作 其致力於讓GTK 與GNOME使用 GDBus並不是libdbus的封裝 而是一個完整且獨立的D Bus規範與協定的重新實作 16 QtDBus QtDBus 8 是一個自4 2版開始 包含於Qt函式庫的D Bus實作 這個組件也被KDE的應用程式 函式庫及組件用於存取在系統中所提供的D Bus服務 sd bus 2013年時 systemd專案重寫了libdbus 並努力簡化程式碼 17 它也使得D Bus的整體效能有所提升 在先前的測試中 BMW發現systemd的D Bus函式庫效能增長了360 18 而到了221版本的systemd sd bus的应用程序接口 英語 API 已被宣告為穩定 19 kdbus 另外還有一個積極開發中的專案 稱為kdbus 其致力於重新實作D Bus為核心中介的點對點行程間通訊機制 除了效能的提升 kdbus也受益於已經存在的Linux内核特性 像是命名空間 審核機制 20 21 核心傳遞的安全特性 終止競爭條件等 並讓D Bus可以在開機與關機時使用 此時需要systemd 22 但kdbus在Linux核心的特性中造成了不尋常的爭議 23 是以截至2015年6月 2015 06 update 都尚未被合併 24 語言綁紮 已經有多個程式語言的D Bus綁紮被開發出來 25 像是 Java C Ruby以及Python等的綁紮均已存在 參見 编辑 自由软件主题 桌面應用的Linux 通用语言架构 CORBA 组件对象模型 Distributed COM Java远程方法调用 遠程過程調用 XPCOM參考資料 编辑 Announcing dbus 1 14 8 security update Announcing dbus 1 15 6 development release havoc GPL AFL Havoc s Blog 2007 07 17 2015 08 27 原始内容存档于2015 09 07 Simon McVittie Announcing dbus 1 14 0 new stable branch 2022 02 28 2022 02 28 原始内容存档于2022 03 01 Simon McVittie Announcing dbus 1 13 22 1 14 0 release candidate 2022 02 23 2022 02 23 原始内容存档于2022 02 28 6 0 6 1 Cocagne Tom DBus Overview pythonhosted org 2015 05 23 原始内容存档于2015 06 08 7 0 7 1 gdbus GNOME developer GNOME project 2015 01 04 原始内容存档于2015 01 05 8 0 8 1 QtDBus module Qt專案 Qt專案 2015 06 01 原始内容存档于2015 05 06 DBus Java Documentation FreeDesktop org 2015 01 04 原始内容存档于2014 12 23 The new sd bus API of systemd 2015 06 19 2015 06 20 原始内容存档于2015 06 22 11 0 11 1 Robert Love Get on the D BUS Linux Journal 2005 01 05 2014 10 14 原始内容存档于2014 10 20 dbus What is D Bus freedesktop org 2014 01 20 2014 10 14 原始内容存档于2014 10 18 D Bus Tutorial 2015 08 28 原始内容存档于2015 08 28 Difference from D Bus Allseen Alliance 2013 12 11 2015 08 27 原始内容存档于2015 07 21 What is D Bus FreeDesktop org 2015 01 05 原始内容存档于2015 01 05 Migrating to GDBus GNOME Developer 2015 06 16 原始内容存档于2015 09 06 Poettering Lennart libsystemd bus kdbus plans systemd devel mailing list 2015 04 24 原始内容存档于2019 06 24 ALS Linux inter process communication and kdbus LWN net 2013 05 30 2013 11 13 原始内容存档于2013 11 13 systemd devel ANNOUNCE systemd v221 freedesktop org 2015 06 19 2015 06 20 原始内容存档于2015 06 20 Jake Edge ALS Linux interprocess communication and kdbus LWN net 2013 05 30 2014 04 11 原始内容存档于2014 04 09 Jonathan Corbet The unveiling of kdbus LWN net 2014 01 13 2014 04 11 原始内容存档于2014 04 09 Greg Kroah Hartman GIT PULL kdbus for 4 1 rc1 2015 04 13 2015 08 28 原始内容存档于2015 07 01 Corbet Jonathan The kdbuswreck LWN Net 2015 06 29 原始内容存档于2015 06 24 Michael Larabel It Doesn t Look Like KDBUS Will Make It For Linux 4 1 Phoronix 2015 04 26 2015 08 28 原始内容存档于2015 09 05 D Bus Bindings FreeDesktop org 2015 01 05 原始内容存档于2014 12 24 外部連結 编辑D Bus 页面存档备份 存于互联网档案馆 在Freedesktop org上的首頁 D Bus的簡介 页面存档备份 存于互联网档案馆 在Freedesktop org的wiki上 取自 https zh wikipedia org w index php title D Bus amp oldid 71582685, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。