我想了解有关 UNIX 系统的更多信息,并且我想我有一个非常直接的问题。我想我知道 X 的用途:它为应用程序提供了呈现其 UI(除其他外)的标准。
但是为什么需要 Gnome/KDE 以及它们与 X 有何关系?我认为他们使用 X 作为应用程序和 GUI 之间的某种接口,因此 GUI 是可定制的,而界面在应用程序之间保持不变。
这是真的还是 Gnome/KDE 独立于 X?
答案1
(我正在研究GNOME和X的关系。我想分享一些我的理解。我会尽可能用逻辑的方式来表达它。并且我尽量使措辞精确。)
1.GUI由什么组成?
我想每个人都知道 GUI 是什么。
下面是 GUI 基本组件的图示。
开窗系统只是一种为用户界面实现 WIMP(窗口、图标、菜单、指针)范例的 GUI。
这里是 Linux 和 Windows 系统的主要窗口系统列表。
窗口系统的关键组件是显示服务器(或窗口服务器、合成器)。任何在窗口中呈现其 GUI 的应用程序都是客户显示服务器的。
由于涉及到客户端和服务器,所以需要通信协议,称为显示服务器协议当然。
显示服务器是一个程序,其主要任务是协调客户端与操作系统其余部分、硬件以及彼此之间的输入和输出。它提供了图形硬件的抽象,供图形界面的更高级别(毫不奇怪,GUI 系统具有分层设计)元素使用,例如窗口管理器。
有多种可用的显示服务器。例如:
- X.Org服务器(主要用于 *nix)
- Wayland(主要用于 *nix)
- Mir(主要用于 *nix)
- SurfaceFlinger(适用于 Google Android。)
- Quartz Compositor(这是 Apple MacOS 使用的。)
- 桌面窗口管理器(这是 Microsoft Windows 使用的。)
2. X 到底是什么意思?
X、X11 和 X Window System 是同义词。他们都代表着一个窗口系统。
如上所述,X窗口系统的关键组件——显示服务器是X.Org服务器。
有时,X.Org服务器也简称为X服务器。
任何运行并呈现其 GUI 的应用程序都是客户的显示服务器。显示服务器及其客户端通过通信协议相互通信,该协议通常称为显示服务器协议,显示服务器是调解人客户端和用户之间。显示服务器接收来自内核的所有输入,内核从所有连接的输入设备(例如键盘、指点设备或触摸屏)接收这些输入,并将其传输到正确的客户端。显示服务器还负责将客户端的输出输出到计算机显示器。 A显示服务器协议可以是网络能力的,甚至是网络透明的。 (所以你可以看到,它本质上只是关于数据流和路由,视觉数据仍然是数据。)
并根据这里:
X.Org Server 是一个提供以下功能的程序:显示和用户输入服务到其他程序。相比之下,文件服务器为其他程序提供对文件存储设备的访问。文件服务器通常位于远程位置,您可以从所在的计算机使用文件服务器的服务。相反,X 服务器通常运行在您所在的计算机上;显示和用户输入服务可能会被您机器上运行的程序请求,也可能被运行在偏僻的机器。
所以 X 窗口系统由以下部分组成:
- 显示服务器
- 显示服务器协议
- 一些用于开发的库
- 和其他东西
根据这里:
X(我认为是窗口系统)提供了 GUI 环境的基本框架:在显示设备上绘制和移动窗口以及与鼠标和键盘进行交互。 X 不强制要求用户界面——这是由单独的程序处理的。因此,基于 X 的环境的视觉样式差异很大;不同的程序可能呈现完全不同的界面。
换句话说,X 窗口系统只赋予程序执行基本操作的能力,例如绘制/移动窗口和输入交互。 X 不强制执行视觉样式。它只是提供一种绘制方式,而不是提供绘制什么。所以你说的“...它为应用程序提供了呈现其 UI 的标准...“ 是不正确的。
3. 什么是窗口管理器?
Gnome/Xfce/KDE 都有窗口管理器。因为它们都工作在X显示服务器上,所以都被称为X 窗口管理器。窗口管理器与 X 服务器和 X 客户端协作。您可以在上面的 GUI 组合图中看到窗口管理器所在的位置。这里是不同类型的窗口管理器。
4. 什么是 GNOME/KDE/Xfce 桌面
GNOME、KDE 和 Xfce 桌面都是 Linux桌面环境。桌面环境是运行在操作系统之上的一组程序,它们共享一个通用的 GUI。
但就像我上面提到的,X11作为一个显示服务器,只提供基本的绘图能力通过一些库,如 Xlib 或 XCB。通过此类库直接连接 X11 的应用程序可以具有截然不同的视觉风格。
那么如何创建一个通用的GUI呢?来了小部件工具包。例如GTK和Qt。它们在 Wayland 和 X11 中很受欢迎开窗系统。
GNOME 和 Xfce 使用 GTK。
KDE 使用 Qt。
和这里是 X Window 系统桌面环境的比较。
5.什么是gdm3、lightdm、kdm
都是显示管理器,如“dm”部分所示。
就我个人而言,我认为显示管理器是一个误导性的名字。最好被称为图形登录管理器。它通常是一个图形用户界面,在引导过程结束时显示,代替默认 shell。
不同的桌面环境使用不同的登录管理器来保持视觉风格一致。
- GNOME 使用 gdm3。
- Xfce使用lightdm
- KDE 使用 kdm
显示管理器可以从同一台或另一台计算机在 X 服务器上启动会话。
总结一下...希望我没有过度阐述...
GUI 可以有多种类型。开窗系统是 GUI 的一种类型。
任何窗口系统的关键组件通常称为显示服务器。
窗口系统,例如X,抽象硬件和IO。提供绘图、移动窗口、IO处理等基础服务。
窗口管理器, 例如侏儒、Xfce、KDE,在显示管理器之上工作并提供您所看到的外观和感觉。
A桌面环境是一组共享共同视觉风格的应用程序。
显示管理器,或图形登录管理器,提供图形登录界面。
我画了一个粗略的概念图。操作系统之上的 3 个部分是非常可定制的。这就是为什么会出现如此多的灵活性(混乱)。
添加 1 - 下午 1:26 9/21/2018
和这里有一些关于 QT 和 GTK 的讨论(不过可能是这个帖子的题外话……)