`$DISPLAY` 是否同时指定 X 服务器的侦听套接字和渲染目标?

`$DISPLAY` 是否同时指定 X 服务器的侦听套接字和渲染目标?

我可以指定任意的“$DISPLAY”吗?

不要混淆实际显示器(您的显示器)、X11 服务器(“显示器”),以及它的访问方式插座或其他方式:通过 ssh 转发的 DISPLAY=:0 和 DISPLAY=localhost:10 指的是相同的显示器/xserver、相同的显卡和相同的显示器。

$DISPLAY提供启动 X 服务器。是否$DISPLAY同时指定X服务器的监听套接字和渲染目标?如果是,它如何设法指定两种不同类型的事物?

  • $DISPLAY指定一个套接字。例如,如果$DISPLAYis :40,则它对应于端口 6040 或以 40 命名的 unix 域套接字。

    $DISPLAY是指定X服务器监听socket的socket吗?

  • 还应该$DISPLAY指定渲染目标(即 X 服务器将在其上渲染某些内容的显示设备或其模拟器)?

这是正确的吗

X client <->  X server <-> rendering target

X 客户端不能直接与渲染目标通信,而是通过 X 服务器间接通信?

谢谢。

答案1

据说AX服务器在显示中启动

不。X 服务器为 X 客户端提供通信端点。 X 客户端通过命令行选项或环境变量选择它们想要与之通信的服务器。从客户端的角度来看,这就是它使用的“display”,因此选项通常是-display,环境变量是$DISPLAY,并且相关库函数的名称中带有“display”。

通信可以通过网络(不安全,并且目前大多已禁用)进行,也可以在本地进行。用于提供两种端点的 unix 构造称为“套接字”(请参阅man 2 socket)。 “display”值编码 (1) 主机,(2) 映射到众所周知的端口号或 UNIX 域路径(用于本地通信)的显示编号,(3) 屏幕编号(现在主要是0默认的,因为大多数 X 服务器不提供多个屏幕),格式为hostname_or_address:display_number.screen_number.

许多客户端可以连接到单个服务器提供的相同“套接字”,因此

寻址 X 服务器显示的“套接字”(在第一句中)和由 X 服务器创建并连接到 X 客户端的“套接字”(在第二句中)是否是同一个“套接字”?

没有意义。

编辑

这是正确的吗

X client <->  X server <-> rendering target

X 客户端不能直接与渲染目标通信,而是通过 X 服务器间接通信?

假设您的意思是“渲染目标”“可以在监视器上显示为图形的某些硬件”,那么是的,这基本上是正确的。

然而,X 服务器并不以某种方式与“渲染目标”进行通信,X 服务器独占控制“渲染目标”(通常是显卡上用作帧缓冲区的一块内存,以及一块硬件)在一台或多台显示器上显示帧缓冲区,所有显示器都是通过各种驱动程序和内核层抽象的)。

另外,这就是原始 X 协议的情况。随着 OpenGL 扩展的出现,X 客户端可以使用 X 协议的扩展来绕过 X 服务器,更直接地访问“渲染目标”(GPU 的内核驱动程序)。如今,大多数应用程序都使用 OpenGL 来加速图形...这就是为什么一旦 X 客户端通过网络连接到另一台计算机上的 X 服务器,您就会失去硬件加速的原因。

相关内容