Xorg 是如何工作的?

use*_*202 5 linux xorg terminal tty

我试图了解 Xorg 的工作原理。

我创建了下图来显示我的理解(此图显示了按 Ctrl+Alt+F7 后组件的状态):

在此处输入图片说明

下面是对图片的解释:

  • /dev/tty7 是 Xorg 的控制终端。
  • Xorg 直接与 VGA 驱动程序对话以在屏幕上绘制(它不会将它想要绘制的内容发送给 TTY 驱动程序)。
  • Xorg 直接接收来自键盘和鼠标驱动程序的输入(它不接收来自 TTY 驱动程序的键盘和鼠标输入)。
  • 虚拟终端还接收来自键盘驱动程序的输入(但根据我的测试,它接收按键的扫描码)。
  • X 客户端(图像中的 xterm 和 Firefox)没有控制终端。

我的理解正确吗?

Gil*_*il' 10

您的描述与您的图表不太匹配,并且比您的图表更正确。

X 服务器不将 tty 驱动程序用于输入或输出。它直接从各种输入设备的驱动程序读取输入,并将输出直接发送到显卡驱动程序。

您可以使用 列出输入设备,xinput然后使用 获取更多信息xinput list-props。例如:

$ xinput | tail -n 1
    ?   USB Keyboard                            id=10   [slave  keyboard (3)]
$ xinput list-props 10 | tail -n 1
        Device Node (263):      "/dev/input/event2"
Run Code Online (Sandbox Code Playgroud)

您可以看到我的 X 服务器通过从/dev/input/event2.

对于输出,不知道有没有类似的用户级工具。xrandr --listproviders列出正在使用或可用的图形驱动程序,但不列出/dev条目。您可以查看 X 服务器打开的图形设备lsof -p$(pgrep Xorg)less /var/log/Xorg.0.log

控制终端的概念是为文本模式会话设计的。X 服务器可能有也可能没有控制终端,这取决于它是如何启动的。从 GUI 菜单启动的 X 程序通常没有控制终端,因为窗口管理器没有控制终端。从终端中运行的 shell 启动的 X 程序确实将该终端作为控制终端。