int*_*ika 55 linux xorg xrandr wayland resolution
Linux 的显示系统使用多种技术、协议、扩展、应用程序、服务器(守护进程)、驱动程序和概念来实现窗口系统,例如:
Xorg、Wayland、X11、OpenGL、RandR、XrandR、屏幕分辨率、DPI、显示服务器、等等。
当我们没有完整的画面时,大量的内容可能会让人不知所措或令人困惑。Linux 显示系统的每一面都有多个文档,但在全球范围内它究竟是如何工作的?
int*_*ika 59
Linux 的显示系统,使用多种技术、协议、扩展、应用程序、服务器(守护进程)、驱动程序和概念来实现窗口系统,例如:Xorg、Wayland、X11、OpenGL、RandR、XrandR、屏幕分辨率、DPI、显示服务器等。这可能很难完全理解,但它的每一面都用于特定目的,它们不会同时使用。
X 窗口系统,X11(X version 11) 是位图显示的窗口系统,在类 Unix 操作系统上很常见,X 提供了 GUI 环境的基本框架:在显示设备上绘制和移动窗口以及与鼠标和键盘进行交互。X 不强制要求用户界面,这是由单个程序处理的。因此,基于 X 的环境的视觉样式差异很大;不同的程序可能呈现完全不同的界面。X 起源于 1984 年麻省理工学院 (MIT) 的 Athena 项目。 X 协议自 1987 年 9 月以来一直处于版本 11(因此称为“X11”)。X.Org 基金会领导 X 项目,具有当前的参考实现, X.Org Server,在 MIT 许可和类似的许可许可下作为免费和开源软件提供。
大多数 Linux 发行版使用X.Org Server,它是 X.Org 基金会管理的 X Window System (X11) 显示服务器的免费和开源实现。单独的 Xorg/X 不支持多个提供的功能,如缩放或渲染,因为Xorg使用扩展,如XFixes,RandR(RandR 由xrandr它管理,例如可以设置平移、分辨率或缩放)、GLX(OpenGL 扩展)、渲染或复合这导致窗口层次结构的整个子树被渲染到离屏缓冲区,然后应用程序可以获取该缓冲区的内容并做任何他们喜欢的事情,离屏缓冲区可以自动合并到父窗口或由外部程序合并,称为合成管理器,像一些窗口管理器一样自行合成;例如 Compiz、Enlightenment、KWin、Marco、Metacity、Muffin、Mutter 和 Xfwm。对于其他“非合成”窗口管理器,可以使用独立的合成管理器,例如:Picom、Xcompmgr或Unagi。Xorg 支持的扩展可以列出:xdpyinfo -display :0 -queryExtensions | awk '/^number of extensions:/,/^default screen number/'.
另一方面,Wayland旨在作为 Xorg/X11 的更简单替代品,更易于开发和维护,但截至 2020 年桌面对 Wayland 的支持还没有完全准备好,除了 Gnome(例如KDE Kwin 和 Wayland 支持);在发行版方面,Fedora默认使用Wayland。请注意,Wayland 和 Xorg可以同时工作,具体情况取决于所使用的配置。XWayland是基于 X.Org 服务器代码库的一系列补丁,实现了运行在 Wayland 协议上的 X 服务器。这些补丁由 Wayland 开发人员开发和维护,以在过渡到 Wayland 期间与 X11 应用程序兼容,并于 2014 年在 X.Org Server 的 1.16 版中主线。当用户从 Weston 内部运行 X 应用程序时,它会调用XWayland 为请求提供服务。

甲显示服务器或窗口服务器是一个程序(如Xorg的或韦兰),其主要任务是其客户的输入和输出,以协调去往和来自操作系统的其余部分,硬件,和彼此。显示服务器通过显示服务器协议与其客户端进行通信,该协议可以是网络透明的或仅具有网络能力的通信协议。例如 X11 和 Wayland 是显示服务器通信协议。
如图所示,窗口管理器是桌面环境的另一个重要元素,它是一种系统软件,用于控制图形用户界面中窗口系统中窗口的放置和外观。大多数窗口管理器旨在帮助提供桌面环境。它们与底层图形系统协同工作,为图形硬件、指点设备和键盘提供所需的功能支持,并且通常使用小部件工具包编写和创建。KDE 使用KWin作为窗口管理器(截至 2020 年它对 Wayland 的支持有限),类似的 Gnome 2 使用Metacity,Gnome 3 使用Mutter作为窗口管理器。
窗口管理器的另一个重要方面是合成器或合成窗口管理器,它是一个窗口管理器,为应用程序提供每个窗口的离屏缓冲区。窗口管理器将窗口缓冲区合成为代表屏幕的图像,并将结果写入显示存储器。合成窗口管理器可以对缓冲窗口执行附加处理,应用 2D 和 3D 动画效果,例如混合、淡入淡出、缩放、旋转、复制、弯曲和扭曲、混洗、模糊、重定向应用程序,以及将窗口转换为多个显示之一和虚拟桌面。计算机图形技术允许实时渲染视觉效果,例如投影、实时预览和复杂动画。由于屏幕是双缓冲的,它在更新期间不会闪烁。最常用的合成窗口管理器包括:Linux、BSD、Hurd 和 OpenSolaris-Compiz、KWin、Xfwm、Enlightenment 和 Mutter。每个都有自己的实现,例如 KDE 的KWin 合成器具有许多功能/设置,如动画速度、撕裂预防 (vsync)、窗口缩略图、缩放方法,并且可以使用OpenGLv2/OpenGLv3 或XRender作为渲染后端以及 Xorg。(XRender/Render不要与XRandR/RandR混淆)。
OpenGL(开放图形库)是一种跨语言、跨平台的应用程序编程接口 (API),用于渲染 2D 和 3D 矢量图形。API 通常用于与图形处理单元 (GPU) 交互,以实现硬件加速渲染。OpenGL 是一个渲染库,可以与 Xorg、Wayland 或任何实现它的应用程序一起使用。OpenGL 安装可以通过glxinfo | grep OpenGL.
计算机显示器或显示设备的显示分辨率或显示模式是每个维度上可以显示的不同像素的数量。通常引用为width?×?height,单位为像素:例如1024?×?768表示宽度为1024像素,高度为768像素。xrandr可用于添加或渲染/模拟新的显示分辨率。
在DPI立场每英寸点数和为空间印刷/显示的量度,特别是各个点可以放置在一条线的1英寸(2.54厘米)的跨度内的数目。计算机的屏幕没有点,但有像素,密切相关的概念是每英寸像素或 PPI,因此 DPI 是用 PPI 概念实现的。默认的96DPI 测量在垂直和水平方向上是 96x96。此外,X DPI(每英寸点数)设置是否仅用于文本缩放?QA 的信息量很大。
一些 KDE 的 gui 工具: systemsettings5 > 显示,kcmshell5 xserver和kinfocenter.
链接和来源: 1、 2、 3、 4、 5、 6、 7、 8、 9、 10、 11和 12。
这个问题非常广泛,关于这个主题的内容比这个答案涵盖的要多得多。我试图提供有关 Linux 图形演变的历史观点。自 1990 年代初 X Window System (X11) 移植到 Linux 以来,Linux 上的图形、窗口系统和图形用户界面 (GUI) 经历了很多变化。
X Window System 于 1980 年代在麻省理工学院开发。名称 X11 指的是 X 协议的协议版本 11,但在 1987 年被版本 11 取代之前,X10 也在麻省理工学院之外使用。
X Window System 旨在处理 1980 年代最先进的图形系统。一个典型的工作站有一个单独的帧缓冲器,它连接到一个简单的 CRT 控制器,该控制器在显示监视器上显示帧缓冲器的内容。PC 和工作站时代之前的计算是通过串行线路(“哑”)终端连接到位于计算机机房的中央计算机完成的。这一历史背景影响了 X11 的设计:图形应用程序可以在远程计算机上运行,用户可以使用具有图形功能的终端与程序进行交互。“终端”可以是工作站或专用 X 终端。
X11 被设计为服务器-客户端系统。X 服务器是唯一直接与图形硬件通信的部分。X 客户端是使用 X 协议与服务器通信的应用程序,使用本地 Unix 域套接字或 TCP/IP 连接。客户端使用 X 协议向服务器发送请求和从服务器接收事件消息。
请求包括以下信息:
客户端接收消息(不是详尽的列表):
为了使用户能够处理屏幕上的窗口,例如移动、调整大小、关闭、升高和降低窗口,提供了一个称为窗口管理器的特定应用程序。窗口管理器还可以显示窗口装饰,如边框、标题栏和全局菜单。
您可以说 X11 服务器非常“高级”,因为它处理(或至少传统上处理)各种资源:窗口、字体、像素图、颜色图、图形上下文(例如前景色/背景色、线宽等) )。除此之外,服务器还会处理诸如窗口父子关系和窗口堆叠顺序之类的事情。
X 协议被设计为可扩展的。可以教 X 服务器执行新的技巧,并且将新的操作码添加到协议中以让服务器执行这些技巧。例如,XRender 扩展引入了一种处理透明度的方法(“alpha 混合”)。引入此扩展主要是为了支持抗锯齿字体,但也已用于桌面效果,例如 Windows 上的投影。RandR(“调整大小和旋转”)扩展可以调整大小、旋转和反映屏幕上的根窗口。这使您可以使用倒置的投影仪或倾斜的显示器来投影屏幕。
该GLX扩展(OpenGL扩展到X窗口系统)能够在X服务器提供了一个窗口,使用OpenGL。对 OpenGL 的调用嵌入在 X 协议请求中。
在 X11 发展的某个时刻,字体处理被转移到由客户端处理。这种变化背后的原因在X Window 系统的新进化中讨论。
在 2000 年代初期,显示硬件与 1980 年代开始开发 X 时存在的简单黑白位图显示相比,已经走了很长一段路。即使在使用本地套接字时,进程间通信 (IPC) 模型的 X11 相对开销也变得太大。对此的解决方案是放弃X服务器是唯一直接与硬件对话的部分的原则,而让客户端直接与显卡对话。在直接渲染架构(DRI)出生。
DRI 允许 X 客户端应用程序绕过 X 服务器并直接在图形适配器上呈现。因为除了传统的 X 服务器之外,还有几个直接渲染应用程序可以同时处于活动状态,所以引入了一个称为直接渲染管理器的内核组件来仲裁对硬件的访问。DRI 架构共有三个版本,原始 DRI(过时)、DRI2 和 DRI3。
进入 Linux 图形领域的下一个创新是合成窗口管理器。传统上,每个 X 客户端应用程序负责按需重新绘制其窗口(部分或整个窗口)。当由于窗口被映射到屏幕上而需要重绘时,或者如果它不再被某个其他窗口遮挡,X 服务器向应用程序发送一个 Expose 事件。当一个重叠的窗口被移除时,它下面的窗口就会暴露出来。未能重新绘制该区域会导致旧内容仍在显示。https://en.wikipedia.org/wiki/Visual_artifact
一个复合窗口管理器改变了这一点。应用程序渲染到它们自己的屏幕外缓冲区,每个缓冲区都是一个单独的屏幕,拥有缓冲区的应用程序可以独占访问。合成窗口管理器的任务是在真实屏幕上的窗口中显示这些缓冲区,剪切任何被其他窗口遮挡或部分离屏的窗口。窗口管理器显示窗口的“组合”。
合成管理器通常还可以显示动画效果,如缩放、扭曲、淡入淡出、旋转、模糊窗口。例如,移动窗口可以使其摇晃,或者可以在旋转立方体的一侧显示虚拟桌面。
X 服务器传统上还负责设置图形适配器的模式,如分辨率和刷新率。此模式设置已移至名为内核模式设置 (KMS) 的 Linux 内核组件中。这解决了许多在 Linux虚拟控制台之间切换的问题。
X 服务器还了解输入设备,例如,必须在 X 配置中指定鼠标类型。随着Linux 内核的evdev子系统的引入,X 服务器已经摆脱了这个任务,它提供了一个通用的输入事件接口。
随着所有这些发展,许多由 X 服务器执行的任务已经转移到 X 服务器之外。使用直接渲染,客户端不再使用 X 协议。多亏了 KMS,X 服务器不需要处理图形适配器的低级编程。使用 evdev,X 服务器中的输入设备处理得到了简化。当使用合成窗口管理器重新排列和扭曲窗口时,X 服务器不再知道屏幕上发生了什么。“窗口管理器是新的 X 服务器”。
Wayland 的出现是因为意识到 X 服务器进程几乎没有什么可做的,并且通过消除中间人(X 服务器),可以实现更简单的桌面图形系统。通过Xwayland提供向后兼容性,Xwayland是一个经过修改的 Xorg 服务器,可使用 Wayland 表面显示顶级 X 窗口。
严格来说,Wayland 只是一个定义客户端如何与显示服务器通信的协议。Wayland 协议与 X 协议完全不同:Wayland 协议不定义用于绘制图形或文本的消息,也不处理字体。
在 Wayland 架构中,窗口管理器和显示服务器合并为一个软件组件,即合成窗口管理器。客户可以通过使用 Wayland 协议的软件库请求绘制表面。“表面是表示屏幕上矩形区域的对象,由位置、大小和像素内容定义”。
客户端渲染到屏幕外缓冲区,然后附加到表面,在屏幕上产生输出。客户端可以使用各种 API 来进行渲染:OpenGL、OpenGL ES 等(“绘图 API 是什么?无论你想要它是什么”)使用双缓冲:客户端使用第二个缓冲区更新其图像,并且当该缓冲区包含相干图像时,它被切换到在下一个显示监视器垂直消隐间隔显示。Wayland 的座右铭是:“每一帧都是完美的”,即窗户不会撕裂、闪烁或闪烁。
Wayland 中的输入处理通过合成器进行,合成器是唯一知道哪个窗口位于鼠标光标下的组件(请记住,合成器也可能扭曲了窗口)。合成器将屏幕坐标转换为适当窗口的窗口本地坐标,并将事件发送到客户端。
如果你对导致 Wayland 创建的故事感兴趣,我建议你观看 Daniel Stone 的爆笑演示Wayland 和 X 背后的真实故事。
| 归档时间: |
|
| 查看次数: |
15691 次 |
| 最近记录: |