X11 / X - Linux 桌面软件,我不理解它们如何配合使用。

5

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

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

无论如何,我从来没有弄清楚X是什么。

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

我很困惑一切都在哪里。

非常感谢任何解释!

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"
有一个名为Xlib的库由X提供,它具有所有这些简单服务的标准接口。任何想要使用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环境变量完成) - 您可以在同一桌面上同时显示许多程序,这些程序来自许多不同的机器。它们全部无缝处理,包括剪切和粘贴。

1
GNOME和KDE不是GUI框架,它们是桌面环境。GTK+和kdelibs是它们背后的框架。此外,请注意窗口管理器本身也是X客户端,以及DE中的所有GUI应用程序。 - strager
窗口管理器的工作方式非常棒...它们有一个钩子,在新客户端连接时会调用该钩子,并将客户端的窗口抓取并放入自己的子窗口中。这个子窗口绘制边框、关闭/最大化按钮等。(我认为) - rmeador
我正准备写一个答案,但这个答案比我写的更详细。只有一件事:我会补充说明窗口管理器只是另一个 X 客户端。而且通常将 X 称为“X”、“X11”或“X Window System”。我更喜欢“X11”,因为它简短而且相当明确。 - Joachim Sauer
你的答案看起来比最初的好多了。然而,你将X服务器称为服务器以及“显示器”。保持一致的词汇表并说“X服务器”。另外,“This has a few implications”中的“This”有点模糊。请说明你正在谈论X11的设计。 - strager
一个很好的解释!当我第一次开始使用X11时,它看起来像魔法。现在我知道更多了,它仍然是魔法。;-) - Jon Ericson
一台机器可以仅运行客户端,而将显示放在其他地方。-- 我认为你应该在这里使用“X服务器”代替“显示器”。否则,看起来非常不错。你最终得到了我的+1。;P - strager

4

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

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


你的平均应用程序也会与X服务器通信,尽管通常是通过工具库(例如GTK或Qt)间接进行的。 - strager

2
此外,值得记住的是X服务器只是在Linux下运行的另一个程序。它并没有什么特别之处,只是碰巧知道如何使用视频驱动程序抓取图形卡并接管显示器。理论上,您可以非常愉快地在没有运行X服务器的情况下运行Linux,尽管当然,您将受限于命令行程序。
这就是Linux的组织方式 - 内核位于底层,然后是一组提供功能给更高级别程序的程序,这些程序本身向更高级别程序提供功能,所有这些构建成为面向机器任务的完整软件堆栈(例如通用桌面、软件开发、Web服务器等)。
除了内核及其模块外,没有任何“特殊”的东西。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接