5

我最近开始使用 Linux(我工作的地方是一家微软商店,所以我只用 C# 编写代码,使用 MS 产品等)。

我试图从高层次上理解 Linux 中的一些基本事物是如何结合在一起的。我一直在阅读www.linfo.org

无论如何,我从来没有完全了解 X 是什么。

通过阅读这篇文章,在我看来 X 是位于操作系统之上的层(一个 X 服务器位于操作系统之上??)并且 X 客户端应用程序向 X 服务器发出请求。我认为 KDE、Xfce 和 Gnome 是显示管理器,那么它们是 X 服务器客户端吗?

我很困惑一切都在哪里。

任何解释将不胜感激!

4

4 回答 4

27

这一切都非常模块化和灵活;然而,这会导致复杂性。

“X 服务器”驱动显示设备。它为客户端提供图形服务,这些服务非常简单——例如:

"Give me a window frame to draw in"

"Put this bitmap here"

"Draw a horizontal black line 100px wide"

"Render the text 'hello' at (100,100)"

"Tell me if any mouse clicks or key presses have been aimed at my window frame"

X 提供了一个名为 Xlib 的库,它具有所有这些简单服务的标准接口。任何想要使用 X 服务器显示的程序最终都会使用这个客户端库,称为 X 客户端。Xlib 知道如何连接到任意 X 服务器——在本地机器上,或者通过 LAN 上的 TCP/IP,或者跨越世界——来调用这些服务。

窗口管理器,它只是另一个 X 客户端程序,负责桌面的“观感”——如何移动和排列窗口等。因为窗口管理器绘制了所有的窗口装饰,它可以使桌面看起来像 WindowsXP、Mac 或 NeXTSTEP。

X 的部分哲学是定义“机制而不是政策”——意思是,他们给你工具来做这件事,但不告诉你如何使用这些工具。一种这样的工具是窗口管理器,可以随意更换。

许多现代 X 应用程序都是为使用桌面环境而编写的,例如 Gnome 或 KDE。这为这些程序提供了一组一致的按钮和控件来绘制,并为一些传统上不包含在 X 中的东西提供了一致的界面,但通常被认为是桌面的一部分 - 例如如何响应拖放或如何呈现标准文件选择器对话框。

桌面环境通常提供一个对象模型或编程接口,负责处理所有简单的 X 客户端请求并让程序处理更重要的事情。删除这些低级调用会产生另一个重要的好处——平台独立性。

许多桌面环境都包含一个窗口管理器,因此窗口控件和按钮的外观和感觉是一致的,并且可以与环境提供的桌面隐喻配合使用。但是,它通常仍然可以关闭。

X 服务器(运行显示)和 X 客户端(想要使用显示)的分离有一些含义:

  • 图形系统与 GUI 程序是分开的,它们完全分开,就像 web 浏览器和 web 服务器一样。

  • 因此,GUI 程序可能不会显示在本地机器上——就像 Web 浏览器不必指向本地机器上的 Web 服务器一样。

  • 一台机器可以只运行客户端,而 X 服务器在其他地方。

  • 带有显示器的机器不必运行客户端——它可以只运行 X 服务器,所有客户端都可以在专用机器上运行。这是最初的瘦客户端:大型中央服务器上运行的大型程序 - 图形用户交互由用户面前办公桌上的专用硬件处理。

  • 你需要知道你的 X 服务器的网络地址是什么,这样你才能告诉 GUI 程序在哪里显示它们的 GUI。(这通常通过设置 DISPLAY 环境变量来完成)

  • 您可以同时在同一个桌面上显示来自许多不同机器的许多程序。这一切都是无缝处理的,包括剪切和粘贴。

于 2009-03-11T20:58:49.467 回答
4

X11 是一种网络协议,当前版本为 7(因此为 X11R7)。它封装图形和输入信息,并将运行在本地或远程机器上的 X 客户端(应用程序或窗口管理器)连接到当前驱动本地屏幕和输入设备的 X 服务器。

Gnome、KDE、XFCE 和 LXDE 是桌面环境;它们包含与 X 服务器(metacity、kwin 等)对话的部分,但也包含应用程序必须遵循的规范和可用的库,以便应用程序“属于”DE。

于 2009-03-11T21:06:45.517 回答
2

此外,值得记住的是,X 服务器只是另一个在 linux 下运行的程序。它没有什么特别之处,它只是碰巧知道如何抓住显卡并使用视频驱动程序接管显示器。您可以(理论上)非常愉快地运行 linux,而无需运行 X 服务器——当然,您将受限于命令行程序。

这就是 linux 组织自身的方式——以内核为基础,然后是一组为高级程序提供功能的程序,这些程序本身为高级程序提供功能,所有这些都构建成一个完整的软件堆栈,面向任何机器的工作是(例如,通用桌面、软件开发、Web 服务器等)。

除了内核和它的模块,没有什么是“特别的”。

于 2009-03-12T09:34:50.133 回答
1

维基百科有一些关于它的信息。

于 2009-03-11T20:54:32.800 回答