Xorg

X、Xorg 和 D-Bus:有什麼區別?

  • December 30, 2013

在學習在 GUI 程式中做某些事情的過程中(例如,為應用程序保留螢幕上的空間),我必須了解更多關於視窗管理器的知識,通常是 Linux 上的 X11(我不確定是否有發行版,它使用 X11 以外的任何東西,雖然我聽說過Wayland,它還沒有在任何地方實現。)

我對程式很陌生,而且不耐煩;所以我只是潛入其中。現在我正在閱讀ICCCM,希望能學到更多。然而,這份文件針對的是比我更了解(方式)的公眾。所以我遇到了一些資訊,我很想得到一些澄清。

ICCCM 的第 2 節引述:

請注意,所有者和請求者之間傳輸的所有數據通常必須通過 X 版本 11 環境中的伺服器。客戶端不能假設另一個客戶端可以打開相同的文件,甚至可以直接通信。另一個客戶端可能通過完全不同的網路機制與伺服器通信(例如,一個客戶端可能是 DECnet 而另一個是 TCP/IP)。因此,只有在兩個客戶端都明確同意的情況下,才允許傳遞對數據的間接引用(例如文件名、主機名和埠號等)。

據我了解,X Window Manager 建立在 X Server 之上(感謝 Wikipedia)。在上面的引用中:它說客戶端可以使用 DECnet 或 TCP/IP 與伺服器通信。到目前為止,我認為“伺服器”是一種比喻,現在我懷疑:X 伺服器是否像“Web 伺服器”一樣是伺服器?我應該如何理解它的功能/定義?

然後,經常會提到 X11、Xorg、X Server 和/或 X Window Manager。它變得令人困惑:X11 是一個包含 Xorg 和 X Window Manager 的包嗎?如果是這樣,這個 X11 捆綁包中還有其他內容嗎?

X 還需要滑鼠或鍵盤或任何其他類型的輸入:這也是 X Server 功能的一部分嗎?X Window Manager 是否嚴格只關注顯示器?

最後,上面的引用還提到了客戶端是否相互通信:這讓我想起了 D-Bus,我曾用它來學習一下。使用 D-Bus,您還可以觸發視窗事件。這讓我對程序應該如何相互通信有點困惑: 使用 X Server 或使用 D-Bus 互動的程序之間有什麼區別?

遺憾的是,這些資訊仍然有些晦澀難懂,這使得學習變得更加困難,但希望您能對此有所了解:) 謝謝。

你在這裡問了五個問題,最好問五個問題☺但我會跳進去:

  1. X 是一個伺服器,可以與“Web 伺服器”進行比較,因為它是一個程序,它偵聽使用特定協議(X 協議)的傳入連接並發布答案。連接來自 X 客戶端,這些客戶端可能位於本地主機上,也可能位於通過網路訪問的遠端主機上。
  2. X11 是 X 協議的“主要版本”,從一開始就不斷發展。X11 是最新的協議,也是最常見的協議。(Xorg 是 X 伺服器、X 庫和客戶端集合的實現,都在使用 X11。還有其他實現:大部分已失效的 XFree86;商業版本,如 Hummingbird Exceed;分支,如 XQuartz,在 Mac OS X 上執行)
  3. “視窗管理器”是管理視窗的 X 客戶端。它通常負責用斜角/邊框、陰影、包含按鈕的菜單欄等裝飾視窗——並處理視窗放置的邏輯;支持視窗被拖動、調整大小或重新排列等。
  4. X 需要輸入,並且它有共同的責任來管理核心。從歷史上看,X 本身做了很多硬體管理。在現代,在 Linux 平台上,X 正在逐漸變得“更小”,並將這個責任委託給 Linux 核心。這樣做的好處是:更小的 X 程式碼庫;更少的“交叉線”與核心和 X 都試圖管理相同的東西。(這方面的一個例子是 Linux 事件介面,來自滑鼠等的事件被核心及其驅動程序解釋和翻譯成標準介面 at /dev/input/event*,由 X 伺服器使用)。請注意,在其他平台(BSD、Solaris)上,X 仍然非常單一。
  5. 程序之間的通信方式有很多種。我相信 X 客戶端可以通過 X 協議進行互動(例如,傳統的 X 視窗管理器需要知道其他客戶端何時繪製視窗,以便裝飾它們;分頁器需要知道視窗的大小或位置何時發生變化,以便反映在尋呼機中)。D-Bus 是一種現代程序間通信 (IPC) 技術,旨在解決其他方法的缺點。它不是 X 特定的。

引用自:https://unix.stackexchange.com/questions/14085