D-Bus:Linux 進程間通信的幕後英雄

更新 發佈閱讀 5 分鐘

概念:為什麼我們需要 D-Bus?

在 Linux 的世界裡,不同的process(或稱「進程」)經常需要互相溝通。想像一下, 你的電腦裡有一場盛大的協同作業:

  • 播放器需要接收「播放/暫停」的按鍵訊號。
  • 檔案管理器需要告訴文字編輯器「請幫我打開這個檔案」。
  • 系統服務需要通知桌面「網路已經連線了」。

傳統的 IPC (Inter-Process Communication) 方式, 例如 pipesocketshared memory , 雖然能完成任務, 但它們就像是私下協定的暗號, 缺乏統一的標準。每個程式都要自己處理複雜的協定、尋址和同步問題, 這讓系統變得難以擴展和維護。

D-Bus 的出現, 解決了這些問題。它統一負責所有程式間訊息的收發、路由與廣播,將複雜的通訊細節從應用程式中抽離,讓開發者能更專注於程式本身的邏輯。

寶妮說故事的時間

想像一下,你的伺服器或電腦就像一個高度自動化的「智慧城市」。城市裡有許多大樓(服務程式)、道路(通訊總線), 每個單位各司其職, 而D-Bus就是這個城市中負責郵件和廣播的核心系統。

  • Bus(總郵局與道路網): Bus 是整個小鎮的郵政系統與交通網絡。所有訊息都透過 Bus 傳遞, 確保寄件者與收件者可以互相聯繫。分為兩種類型如下。
    • System Bus(系統郵局)
      處理「系統層級」的重要訊息, 例如 systemd 管理的開關機、NetworkManager 的網路事件…etc。就像城市的中央郵局,每個政府部門都接在這裡。
    • Session Bus(個人郵局)
      處理「單一使用者 session」內應用程式間的訊息,例如桌面應用程式之間的協作。像你租了一棟辦公大樓樓層,裡面是你的私人郵局。

      在 OpenBMC 這種嵌入式系統中,大部分情況只用到 System Bus。

  • Bus Name(大樓地址): 城市裡有很多棟大樓(服務程式), 要寄信就得知道送到哪裡。你可能會看到這兩種名稱的表達方式。
    • Well-known Name(大樓招牌)
      • 範例:org.freedesktop.NetworkManager
      • 一個固定且具備可讀性的名稱, 方便人類識別。有了這個招牌, 開發者一眼就知道該service做什麼。
    • Unique Connection Name(唯一地址)
      • 範例::1.123
      • 每個服務在註冊到 Bus 時系統分配的唯一代號, 像郵遞區號或門牌號碼, 保證不重複。
  • Object Path(部門信箱):同一棟大樓裡面可能有多個部門。
    • 範例:/org/freedesktop/NetworkManager/Settings
    • 表示信件是寄到 NetworkManager 大樓裡的「設定部門」。每個部門可以獨立處理屬於自己的業務。
    • 一個 Service 裡可以有很多 Object, 每個 Object 專門處理自己的業務範圍。
  • Interface(業務手冊): 每個部門的說明書, 記載它能處理的所有業務、可用的功能和規範, 其實就是列出它能做的事。
    • 範例:org.freedesktop.NetworkManager.Settings
    • 一個 Object 可以同時擁有多個 Interface, 像一個部門能同時處理「設定」與「統計」兩類業務。
    • Interface 的細項:(每個 Interface 都有三種互動元素)
    raw-image

    最後…

    結構化的來總結一下他:
    城市道路(Bus: System/Session)
    └── 大樓(Service / Bus Name)
    └── 部門(Object Path)
    └── 業務手冊(Interface)
    ├── Method(辦事信:寄信請求工作)
    ├── Property(公告欄:狀態資訊)
    └── Signal(廣播喇叭:主動通知)
    比喻總是不夠精確, D-bus一樣有官方文件可以閱讀, 建議大家如果在工作中或學習上遇到不解的問題, 都要回到SPEC來做確認。很多D-bus相關的文件都可以在這裡面找到:https://www.freedesktop.org/wiki/Software/dbus/?utm_source=chatgpt.com
留言
avatar-img
L'Angolo di Embedded
22會員
26內容數
這裡會有一些我對於OpenBMC, Embedded Software的學習與經驗分享, 本來只在Line社群跟大家互動, 但是有夥伴提出想要看到歷史文章的需求, 於是我決定把它放到這裡, 努力磨練自己的技術和文筆。
L'Angolo di Embedded 的其他內容
2025/09/15
介紹了 IPC (Inter-Process Communication) 和 Sysfs 在 Linux 嵌入式系統中的應用,並以生活化的比喻說明程序間通訊的概念,以及 Sysfs 作為虛擬檔案系統介面,如何簡化硬體存取與系統狀態監控。
2025/09/15
介紹了 IPC (Inter-Process Communication) 和 Sysfs 在 Linux 嵌入式系統中的應用,並以生活化的比喻說明程序間通訊的概念,以及 Sysfs 作為虛擬檔案系統介面,如何簡化硬體存取與系統狀態監控。
2025/09/15
介紹OpenBMC中的電源控制機制,特別是phosphor-state-manager在其中的核心角色。透過比喻和實際程式碼範例,闡述電源狀態轉換流程、不同系統的實作差異以及錯誤處理的重要性,並提供小練習引導讀者更深入瞭解。
2025/09/15
介紹OpenBMC中的電源控制機制,特別是phosphor-state-manager在其中的核心角色。透過比喻和實際程式碼範例,闡述電源狀態轉換流程、不同系統的實作差異以及錯誤處理的重要性,並提供小練習引導讀者更深入瞭解。
2025/09/11
本文深入淺出地介紹systemd在Linux系統中的角色、與傳統SysVInit的差異,以及如何在OpenBMC中應用systemd的service unit file來管理服務,並透過實作範例,幫助讀者理解systemd的運作機制。
2025/09/11
本文深入淺出地介紹systemd在Linux系統中的角色、與傳統SysVInit的差異,以及如何在OpenBMC中應用systemd的service unit file來管理服務,並透過實作範例,幫助讀者理解systemd的運作機制。
看更多
你可能也想看
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
※ 什麼是路由? 當我們說「路由」時,可能是在談論路由器(實體設備),也可能是在談論路由(選擇路徑的過程),或者是在談論路徑(資料封包的傳輸路徑)。 路由器 (Router):這是一種實體設備,負責將資料封包 (Packet) 從一個網路傳送到另一個網路。它的工作方式類似於交通指揮,確保資料封包
Thumbnail
※ 什麼是路由? 當我們說「路由」時,可能是在談論路由器(實體設備),也可能是在談論路由(選擇路徑的過程),或者是在談論路徑(資料封包的傳輸路徑)。 路由器 (Router):這是一種實體設備,負責將資料封包 (Packet) 從一個網路傳送到另一個網路。它的工作方式類似於交通指揮,確保資料封包
Thumbnail
這篇文章介紹了路由器 (Router) 在網絡硬體中的功能與運作概念,包括路由器的工作原理、運作流程和與其他硬體設備的區別。文章也提及了路由器運作的基本概念,例如路由表的建立方式和路由協定的基礎知識。
Thumbnail
這篇文章介紹了路由器 (Router) 在網絡硬體中的功能與運作概念,包括路由器的工作原理、運作流程和與其他硬體設備的區別。文章也提及了路由器運作的基本概念,例如路由表的建立方式和路由協定的基礎知識。
Thumbnail
傳說中.....只要Linux喝下名為Wine的葡萄酒,就能獲得運行.exe程式的能力......
Thumbnail
傳說中.....只要Linux喝下名為Wine的葡萄酒,就能獲得運行.exe程式的能力......
Thumbnail
對於上班族來說,在處理文案、報告、新聞稿撰寫,或是資料彙整、簡報內容調整等,要是有一個好用小幫手可以支持,絕對能省不少時間與心力。特別在推出Chat GPT後,雖然有說對不少產品帶來衝擊,但也是工作上的好幫手,不過它的付費版卻不便宜....
Thumbnail
對於上班族來說,在處理文案、報告、新聞稿撰寫,或是資料彙整、簡報內容調整等,要是有一個好用小幫手可以支持,絕對能省不少時間與心力。特別在推出Chat GPT後,雖然有說對不少產品帶來衝擊,但也是工作上的好幫手,不過它的付費版卻不便宜....
Thumbnail
訊息的即時傳遞已然成為現代社會的趨勢了, 而扮演中樞平台的系統架構功能也漸趨複雜完整, Kafka是一個事件流平台, 正好滿足串流時代之下的即時訊息傳遞架構, 因此我們有必要深入來學習這套事件流平台, 不論是自動化、金融交易、IOT、物流…皆離不開即時的需求, 所以就讓我們蹲好馬步來好好的學習一
Thumbnail
訊息的即時傳遞已然成為現代社會的趨勢了, 而扮演中樞平台的系統架構功能也漸趨複雜完整, Kafka是一個事件流平台, 正好滿足串流時代之下的即時訊息傳遞架構, 因此我們有必要深入來學習這套事件流平台, 不論是自動化、金融交易、IOT、物流…皆離不開即時的需求, 所以就讓我們蹲好馬步來好好的學習一
Thumbnail
Docker是由GO語言實現,是一個在GitHub上開發原始碼的專案。它的目標是實現羽量級的作業系統虛擬化。讓使用者操作Docker,就像是操作一個羽量級的虛擬機器。 優勢 快速發表和部署 高效的部署和擴充 資源使用率高 管理簡單 核心 Image映像檔 Docker
Thumbnail
Docker是由GO語言實現,是一個在GitHub上開發原始碼的專案。它的目標是實現羽量級的作業系統虛擬化。讓使用者操作Docker,就像是操作一個羽量級的虛擬機器。 優勢 快速發表和部署 高效的部署和擴充 資源使用率高 管理簡單 核心 Image映像檔 Docker
Thumbnail
這本書從 docker 的角度出發,介紹很多可重複使用的 pattern,除了翻譯某些地方有點怪之外,算是很有趣的一本書,後面很多的 pattern 可以想成是 sidecar 的進階使用方式,在不改變應用程式的情況下,增加不同的功能,相當實用。
Thumbnail
這本書從 docker 的角度出發,介紹很多可重複使用的 pattern,除了翻譯某些地方有點怪之外,算是很有趣的一本書,後面很多的 pattern 可以想成是 sidecar 的進階使用方式,在不改變應用程式的情況下,增加不同的功能,相當實用。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News