X、Xorg 和 D-Bus:有什么区别?

X、Xorg 和 D-Bus:有什么区别?

在学习在 GUI 编程中做某些事情的过程中(例如,为应用程序在屏幕上保留空间),我必须了解有关窗口管理器的更多信息,通常是 Linux 上的 X11(我不确定是否有发行版) ,它使用 X11 以外的任何东西,尽管我听说过韦兰,尚未在任何版本中实现。)

我对编程很陌生,而且缺乏耐心;所以我只是深入研究它。现在我正在阅读ICCCM,希望能学到更多。然而,这份文件针对的是比我了解更多的公众。所以我找到了一些信息,我很想得到一些澄清。

第2节ICCCM 报价:

请注意,所有者和请求者之间传输的所有数据通常必须通过 X 版本 11 环境中的服务器。客户端不能假设另一个客户端可以打开相同的文件,甚至不能直接通信。另一个客户端可能通过完全不同的网络机制与服务器通信(例如,一个客户端可能是 DECnet,另一个客户端可能是 TCP/IP)。因此,只有在两个客户端都明确同意的情况下,才允许传递对数据的间接引用(例如文件名、主机名和端口号等)。

据我了解,X Window Manager 构建在 X Server 之上(感谢维基百科)。在上面的引用中:它说客户端可以使用 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

你在这里问了五个问题,问五个问题可能会更好 ☺ 但我会插话:

  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 事件接口就是一个例子,其中来自鼠标等的事件由内核及其驱动程序解释并转换为标准接口/dev/input/event*,由 X 服务器使用)。请注意,在其他平台(BSD、Solaris)上,X 仍然相当单一。

  5. 进程之间进行通信的方式有很多很多。我相信X客户端可以通过X协议进行交互(例如,传统的X窗口管理器需要知道其他客户端何时绘制窗口,以便装饰它们;寻呼机需要知道窗口的大小或位置何时发生变化,以便在寻呼机中反映这一点)。 D-Bus 是一种现代进程间通信(IPC)技术,旨在解决其他方法的缺点。它不是 X 特定的。

相关内容