在计算中,窗口管理系统(Widnowing system)是一套用于管理显示屏幕不同部分的软件工具。它是一种图形用户界面(GUI),实现了WIMP(窗口、图标、菜单、指针)用户界面范式。
每个当前运行的应用程序通常被分配一个可调整大小、通常是矩形的显示区域,用于向用户展示其GUI。这些窗口可以相互重叠,与平铺界面(不允许窗口重叠)相反。通常,每个窗口周围都会绘制一个窗口装饰。窗口装饰以及窗口内可用的小部件(例如滑块、按钮等)是供用户直接交互的图形元素,通过使用小部件工具包使其编程变得更加容易和简化。
技术原理
任何窗口系统的主要组件通常称为显示服务器(display server),尽管也有其他称呼,如窗口服务器或合成器。任何在窗口中运行并展示其图形用户界面(GUI)的应用程序都是显示服务器的客户端。显示服务器与客户端通过应用程序编程接口(API)或通信协议进行通信,这些协议通常被称为显示服务器协议。显示服务器充当客户端和用户之间的中介,接收来自内核的所有输入,内核则从所有连接的输入设备(如键盘、指针设备或触摸屏)接收输入,并将这些输入传递给正确的客户端。显示服务器还负责将客户端的输出显示在计算机显示器上。通常情况下,显示服务器并不管理音频输出,但音量通常通过GUI小程序来控制,显示服务器决定哪些应用程序显示在最前端。
窗口系统使用户能够同时运行多个程序。每个程序在自己的窗口中展示其GUI,窗口通常是屏幕上的矩形区域。
从程序员的角度来看,窗口系统实现了图形基本功能,如字体渲染或在屏幕上绘制线条。它为更高级别的图形界面元素(如窗口管理器)提供了图形硬件的抽象。
显示服务器
图形用户界面(GUI)的基本组件:显示服务器实现了窗口系统。简单的窗口管理器仅绘制窗口装饰,而合成窗口管理器则具有更多功能。
显示服务器或窗口服务器是一种程序,主要任务是协调其客户端与操作系统的其他部分、硬件以及彼此之间的输入和输出。显示服务器通过显示服务器协议(display server protocol)与客户端进行通信,这是一种通信协议,可以支持网络透明性或网络功能。
显示服务器是任何图形用户界面的关键组件,特别是窗口系统中的核心部分。
独立显示服务器的服务器/客户端关系看起来有些反直觉,通常我们认为“服务器”是远程的大型机器,而独立的“显示服务器”却是一个本地的小系统,大多数客户端在更大的中心机器上运行。其原因在于显示服务器提供了显示和输入设备的服务。

显示服务器通信协议
X11
主要条目:X Window System 核心协议 和 X Window System
X.Org Server 是一个常见的显示服务器实例,它运行在内核之上(通常是类 Unix 的内核,如 Linux 或 BSD)。它接收用户输入数据(如 Linux 上的 evdev),并将其传递给一个客户端。同时,显示服务器也会从客户端接收数据,处理后进行合成,并在 Linux 上将数据传递给内核的三个组件之一——DRM、GEM 或 KMS 驱动程序。该组件将数据写入帧缓冲区,帧缓冲区的内容随后被传送到连接的屏幕进行显示。X 依赖 GLX。
X Window System 是显示服务器概念的一种实现,特别是其当前版本——X.Org Server 以及客户端库 Xlib 和 XCB。X.Org Server 本身是一个显示服务器,但在其当前实现中,它依赖第二个程序(如 Mutter 或 KWin 的合成窗口管理器)来进行合成。
实现 X11 显示服务器协议的著名实例包括 X.Org Server、XFree86、XQuartz 和 Cygwin/X,而实现该协议的客户端库包括 Xlib 和 XCB。

Wayland
主要条目:Wayland 协议
实现 Wayland 协议的显示服务器被称为 Wayland 合成器。与 X11 相比,Wayland 合成器不仅负责处理输入和输出,还负责合成功能。常见的例子有 Weston、Mutter、KWin 和 Enlightenment。
Wayland 合成器通过 Wayland 显示服务器协议与客户端通信,该协议允许客户端使用 EGL 渲染 API 直接将数据写入帧缓冲区。显示服务器仍然决定哪个窗口位于最上方,并将输入设备(如 evdev)相关的数据传递给客户端。
Wayland 已在一些 Linux 桌面发行版中部分应用,如 Fedora。它也非常适合移动计算,已被 Tizen、Sailfish OS 和 AsteroidOS 等智能手机和平板电脑项目采用。
Wayland 的实现库 libwayland-client 和 libwayland-server 依据 MIT 许可证发布。

Mir
主要条目:Mir 软件
Mir 显示服务器使用不同于 X11 和 Wayland 的 Mir 协议。它也支持 X11 协议。Mir 由 Canonical 开发,最初打算作为 Ubuntu 的首选显示服务器。然而,自 2017 年起,Ubuntu 桌面版已转为使用 Wayland 显示服务器。
Mir 显示服务器的实现库 libmir-server 和 libmir-client 根据 GPLv3 许可证发布。
窗口系统的API
SurfaceFlinger
Google 为 Android 开发了一个名为 SurfaceFlinger 的显示服务器,专门用于处理在 Android 上的显示和合成任务(Android 是基于 Linux 内核的操作系统,主要用于移动设备)。Android 中的一切内容都渲染到一个称为“surface”的对象中,而这些“surface”由应用程序生成,并放置到由 SurfaceFlinger 管理的队列中。SurfaceFlinger 使用 OpenGL ES 来进行合成。
Android 中另一个特定的解决方案是 “Gralloc”。Gralloc 负责设备内存的分配、仲裁和同步,利用 Android/Linux 的 fence 文件描述符来处理这些任务。它与其他内存管理解决方案(如 Mesa 的通用缓冲区管理(GBM)或 Nvidia 的 EGLStreams)竞争。Gralloc 的硬件抽象层(HAL)用于分配用于 “surface” 的底层缓冲区。
在 Android 3.0 引入了硬件合成器 HAL (Hardware Composer HAL, HWC),它的主要目的是根据可用硬件确定最有效的合成方式。由于 HWC 是一个 HAL,其实现通常由显示硬件的原始设备制造商(OEM)进行设备特定优化。
Quartz Compositor
在 Apple 的 macOS 操作系统系列中,Quartz Compositor 既充当了显示服务器的角色,也充当了窗口管理器,负责处理 macOS 的窗口系统。
Desktop Window Manager
在 Microsoft Windows 中,从 Windows Vista 开始,Desktop Window Manager (DWM) 允许使用硬件加速来渲染图形用户界面。DWM 最初是为了支持 “Windows Aero” 体验而设计的,允许实现透明效果、3D 窗口切换等图形效果。从 Windows 8 开始,DWM 无法禁用,若没有合适的显卡则使用软件渲染。
4706

被折叠的 条评论
为什么被折叠?



