我最近开始使用Linux(我工作的地方是Microsoft商店,因此我只使用C#编写代码,使用MS产品等)。
我试图在高层次上理解Linux中的一些基本内容是如何结合在一起的。 我一直在阅读www.linfo.org
无论如何,我从来没有得到过X.
从阅读this article开始,在我看来,X是位于操作系统之上的层(一个X服务器位于操作系统之上),X客户端应用程序向X服务器发出请求。 我认为KDE,Xfce和Gnome是显示管理器,那么它们是X服务器客户端吗?
我对所有事情都很困惑。
任何解释都会非常感激!
答案 0 :(得分:28)
这一切都非常模块化和灵活;然而,这会导致复杂性。
“X Server”驱动显示设备。它为客户提供图形服务,这些服务非常简单 - 例如:
"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 - 来调用这些服务。
Window Manager,它只是另一个X客户端程序,负责桌面的“外观和感觉” - 如何移动和排列窗口等。因为窗口管理器绘制了所有的窗口装饰,它可以使桌面看起来像WindowsXP,Mac或NeXTSTEP。
X的一部分哲学是定义“机制而非政策” - 意思是,它们为您提供了工具,但不告诉您如何使用这些工具。一个这样的工具是窗口管理器,可以随意替换。
许多现代X应用程序都是为了使用桌面环境而编写的,例如Gnome或KDE。这为这些程序提供了一组一致的按钮和控件来绘制,并为一些传统上不包含在X中的东西提供了一致的界面,但通常被认为是桌面的一部分 - 例如如何响应拖放或如何呈现标准文件选择器对话框。
桌面环境通常提供对象模型或编程接口,负责处理所有简单的X客户端请求,并让程序处理更重要的事情。删除这些低级别调用会产生另一个重要好处 - 平台独立性。
许多桌面环境都包含一个窗口管理器,因此窗口控件和按钮的外观和感觉是一致的,并且可以与环境提供的桌面隐喻一起使用。但是,它通常仍可以关闭。
X服务器(运行显示器)和X客户端(想要使用显示器)的分离有一些含义:
图形系统与GUI程序是分开的,它们与Web浏览器和Web服务器完全分开。
因此GUI程序可能不会在本地计算机上显示 - 就像Web浏览器不必指向本地计算机上的Web服务器一样。
一台机器可以运行JUST客户端,X服务器可以在其他地方运行。
带显示屏的机器不必运行客户端 - 它可以运行JUST服务器,所有客户端都可以在专用机器上运行。这是最初的瘦客户端:在大型中央服务器上运行的大型程序 - 图形用户交互由用户面前的桌面上的专用硬件处理。
您需要知道X服务器的网络地址是什么,这样您就可以告诉GUI程序在哪里显示其GUI。 (这通常通过设置DISPLAY环境变量来完成)
您可以在同一台桌面上同时显示来自多台不同计算机的多个程序。它全部无缝处理,包括剪切和粘贴。
答案 1 :(得分:4)
X11是一种网络协议,目前处于第7版(因此为X11R7)。它封装图形和输入信息,并将在本地或远程计算机上运行的X客户端(应用程序或窗口管理器)连接到当前驱动本地屏幕和输入设备的X服务器。
Gnome,KDE,XFCE和LXDE是桌面环境;它们包含与X服务器通信的部分(metacity,kwin等),但也包括应用程序必须遵循的规范以及可用于使应用程序“属于”DE的库。
答案 2 :(得分:2)
此外,值得记住的是,X服务器只是另一个在linux下运行的程序。它并没有什么特别之处,它恰好知道如何抓住显卡并使用视频驱动程序接管显示器。 您可以(理论上)非常愉快地运行Linux而无需运行X服务器 - 当然,您将仅限于命令行程序。
这就是linux组织自己的方式 - 基础内核,然后是一组为更高级别的程序提供功能的程序,它们本身为更高级别的程序提供功能,所有程序都构建成一个完整的软件堆栈,面向任何工作该机器(例如,通用桌面,软件开发,Web服务器等)。除了内核和它的模块之外,没有什么是“特殊的”。
答案 3 :(得分:1)
Wikipedia有一些关于它的信息。