X Window System:原理

2020-05-06 01:53:39

跳转到导航跳转以搜索X窗口系统(X11,或简称X)是位图显示的窗口系统,在类Unix操作系统上很常见。

X提供了GUI环境的基本框架:在显示设备上绘制和移动窗口,以及与鼠标和键盘交互。X不强制使用用户界面-这是由单独的程序处理的。因此,基于X的环境的视觉样式差异很大;不同的程序可能呈现完全不同的界面。

X起源于1984年麻省理工学院(MIT)的雅典娜项目。[1][需要更好的来源]X协议自1987年9月以来一直处于版本11(因此";X11&34;)。X.Org基金会领导了X项目,目前的参考实现是X.Org Server,根据麻省理工学院的许可和类似的许可许可,X.Org Server作为免费和开放源码软件提供。[2]。

X是一个独立于体系结构的系统,用于远程图形用户界面和输入设备功能。使用联网终端的每个人都能够与任何类型的用户输入设备与显示器交互。

在其标准发行版中,它是一个完整的、尽管简单的显示和界面解决方案,它提供了一个标准工具包和协议栈,用于在大多数类Unix操作系统和OpenVMS上构建图形用户界面,并且已经移植到许多其他当代通用操作系统上。

X提供了用于构建这样的GUI环境的基本框架或原语:在显示器上绘制和移动窗口,以及与鼠标、键盘或触摸屏交互。X不强制使用用户界面;单个客户端程序处理这一点。程序可以在没有用户界面的情况下使用X的图形功能。因此,基于X的环境的视觉样式差异很大;不同的程序可能呈现完全不同的界面。

与大多数早期的显示协议不同,X专门设计为在网络连接上使用,而不是在集成或连接的显示设备上使用。X具有网络透明性,这意味着在网络(如Internet)上的某台计算机上运行的X程序可以在网络上其他计算机上运行的X服务器上显示其用户界面。X服务器通常是X客户端的图形资源和键盘/鼠标事件的提供者,这意味着X服务器通常在人类用户面前运行在计算机上,而X客户端应用程序运行在网络上的任何地方,并与用户的计算机通信,以请求渲染图形内容并从包括键盘和鼠标的输入设备接收事件。

术语服务器被应用于用户面前的软件的事实常常令习惯于他们的程序是远程计算机上的服务的客户端的用户感到惊讶。这里,不是远程数据库作为本地应用程序的资源,而是用户的图形显示和输入设备成为由本地X服务器提供给需要共享用户的图形和输入设备以与用户通信的本地和远程托管的X客户端程序的资源。

X';的网络协议基于X命令原语。此方法允许可能在不同计算机上运行的X客户端应用程序的2D和(通过GLX等扩展)3D操作仍可在X服务器的显示器上完全加速。例如,在经典的OpenGL(3.0版之前)中,包含大量对象的显示列表可以由远程X客户端程序完全构建并存储在X服务器中,然后通过在网络上发送单个glCallList(它)来呈现每个对象。

X不提供对音频的原生支持;有几个项目可以填补这一空白,有些项目还提供透明的网络支持。

X使用客户端-服务器模型:X服务器与各种客户端程序通信。服务器接受图形输出请求(Windows)并发回用户输入(从键盘、鼠标或触摸屏)。服务器可以作为以下功能运行:

这种客户端-服务器术语-用户的终端是服务器,应用程序是客户端-经常会让新的X用户感到困惑,因为这两个术语看起来是相反的。但是X站在应用程序的角度,而不是从最终用户的角度:X向应用程序提供显示和I/O服务,因此它是服务器;应用程序使用这些服务,因此它们是客户端。

服务器和客户端之间的通信协议是网络透明的:客户端和服务器可以运行在同一台机器上,也可以运行在不同的机器上,可能具有不同的体系结构和操作系统。客户端和服务器甚至可以通过在加密的网络会话上通过隧道传输连接来安全地在Internet上通信。

X客户端本身可以通过向其他客户端提供显示服务来模拟X服务器。这称为X嵌套。Xnest和Xephyr等开源客户端支持这样的X嵌套。

要在远程计算机上使用X客户端应用程序,用户可以执行以下操作:

请求本地显示/输入服务(例如,如果未使用启用X转发的SSH,则导出显示=[用户的机器]:0)

然后,远程X客户端应用程序将连接到用户的本地X服务器,为用户提供显示和输入。

或者,本地机器可以运行连接到远程机器并启动客户端应用程序的小程序。

使用客户端应用程序加入协作工作组中的大量其他终端用户。

在远程计算机上运行计算密集型模拟,并在本地台式计算机上显示结果。

在一台显示器、键盘和鼠标的控制下,同时在多台机器上运行图形软件。

除非实现者没有新功能就无法完成真正的应用程序,否则不要添加新功能。

决定一个制度不是什么和决定它是什么一样重要。不要满足世界上所有人的需求;相反,要使系统具有可扩展性,以便能够以向上兼容的方式满足其他需求。

唯一比从一个例子中概括更糟糕的是从根本没有例子中概括。

如果问题没有被完全理解,最好是根本不提供解决方案。

如果您可以用10%的工作量获得90%的预期效果,那么使用更简单的解决方案。(另请参阅越差越好。)。

提供机制而不是政策。特别是,将用户界面策略交到客户端手中。

第一个原则在X11的设计过程中被修改为:不要添加新功能,除非您知道某些实际的应用程序会需要它。";[3]。

X在很大程度上遵守了这些原则。开发样本实施是为了扩展和改进实施,同时保持与原始1987年议定书的兼容。

X主要定义协议和图形基元-它故意不包含应用程序用户界面设计的规范,如按钮、菜单或窗口标题栏样式。取而代之的是,应用软件-如窗口管理器、GUI小部件工具包和桌面环境,或者特定于应用的图形用户界面-定义并提供这样的细节。因此,没有典型的X界面,几种不同的桌面环境在用户中变得流行起来。

窗口管理器控制应用程序窗口的位置和外观。这可能会导致桌面界面让人联想到Microsoft Windows或Apple Macintosh(示例包括GNOME 2、KDE、Xfce),或者具有完全不同的控件(例如平铺窗口管理器,如wmii或Rattoxic)。一些界面,如Sugar或Chrome OS,完全避开了桌面的比喻,简化了专门应用程序的界面。窗口管理器的复杂性和复杂性从基本的窗口管理器(例如,TWM,随X提供的基本窗口管理器,或evilwm,一个极其轻量级的窗口管理器)到更全面的桌面环境(如启蒙),甚至到用于垂直市场(如销售点)的特定于应用程序的窗口管理器,不一而足。

许多用户在桌面环境中使用X,除了窗口管理器之外,桌面环境还包括使用一致用户界面的各种应用程序。流行的桌面环境包括GNOME、KDE软件编译和Xfce。UNIX 98标准环境是通用桌面环境(CDE)。freedesktop.org计划解决桌面与竞争对手X桌面所需组件之间的互操作性问题。

X.Org实现是X的规范实现。由于自由许可,出现了许多变体,既有免费的,也有开源的,也有专有的。商业Unix供应商倾向于采用参考实现并使其适应其硬件,通常是对其进行定制并添加专有扩展。

直到2004年,XFree86在类Unix免费系统上提供了最常见的X变体。XFree86最初是作为X到386兼容PC的端口,到20世纪90年代末,已经成为X技术创新的最大来源和X开发的事实标准。[4]然而,自2004年以来,XFree86的分支--X.Org服务器占据了主导地位。

虽然将X与Unix相关联是很常见的,但X服务器也以本机方式存在于其他图形环境中。VMS Software Inc.的OpenVMS操作系统包括一个X版本,其标准桌面环境为通用桌面环境(CDE),称为DECwindows。[需要引用]苹果最初以X11.app的形式将X移植到MacOS上,但为了支持XQuartz实现,这一做法遭到了抨击。在20世纪90年代苹果较旧的操作系统System7和MacOS8和9下的第三方服务器,包括苹果的MacX和白松软件(White Pine Software)的大量撤离。

Microsoft Windows未附带对X的支持,但存在许多第三方实现,如Cygwin/X等免费开源软件,以及Except、MKS X/Server、Reflect X、X-Win32和Xming等专有产品。

还有X服务器的Java实现。WeirdX可以在任何支持Swing 1.1的平台上运行,并且可以作为小程序在大多数浏览器中运行。Android X Server是一个运行在Android设备上的开源Java实现。

当具有本地窗口系统的操作系统另外托管X时,X系统可以在单独的主机窗口中使用其自己的普通桌面,或者它可以无根运行,这意味着X桌面被隐藏,并且主机窗口环境管理主机屏幕内托管的X窗口的几何形状和外观。

X终端是只运行X服务器的瘦客户端。这种体系结构在构建便宜的终端公园方面变得流行起来,许多用户可以同时使用相同的大型计算机服务器作为每个用户的X终端的客户端来执行应用程序。这一用途非常符合麻省理工学院项目的初衷。

X终端使用X显示管理器控制协议探索网络(本地广播域),以生成允许作为客户端的可用主机列表。其中一台客户端主机应该运行X显示管理器。

X终端和大多数瘦客户机的一个限制是,除了键盘、鼠标和显示器之外,它们不能进行任何输入或输出。假设所有相关数据仅存在于远程服务器上,并且X终端用户没有可用于从本地外围设备保存或加载数据的方法。

专用(硬件)X终端已不再使用;配备X服务器的PC或现代瘦客户端通常以相同或更低的成本提供相同的功能。

Unix-Hater手册(1994)花了整整一章来讨论X的问题。[5]Gajeska、Manasse和McCormack在1990年出版的“为什么X不是我们的理想窗口系统”详细说明了协议中存在的问题,并提出了改进建议。

在X中缺乏设计指南导致了几个截然不同的界面,以及应用程序并不总是能很好地协同工作。客户端间通信约定手册(ICCCM)是客户端互操作性的规范,以难以正确实现而著称。进一步的标准努力,如Motif和CDE,并没有缓解问题。这让用户和程序员感到沮丧。[6]图形程序员现在通常通过编码到特定桌面环境或特定窗口小部件工具包来解决应用程序外观和通信的一致性问题,这也避免了必须直接与ICCCM打交道。

X还缺乏对X服务器上用户定义的存储过程的本机支持,这与新闻报道的方式不同-没有图灵完整的脚本工具。因此,各种桌面环境可以提供它们自己的(通常是相互不兼容的)设施。

基于X构建的系统可能存在可访问性问题,这会使残疾用户难以使用计算机,包括右键单击、双击、中键单击、鼠标悬停和焦点窃取。一些X11客户端比其他客户端更好地处理可访问性问题,因此有可访问性问题的人不会被排除在使用X11之外。但是,X11没有可访问性标准或可访问性指南。在X11标准过程中,没有关于可访问性的工作组,但是,软件项目正在解决可访问性需求,以便在X之上提供这些功能。

Orca项目向X Window系统添加了可访问性支持,包括实现API(AT-SPI[7])。这与GNOME的ATK结合在一起,允许使用GNOME/GTK API在X程序中实现辅助功能。[8]KDE提供了一套不同的辅助功能软件,包括文本到语音转换器和屏幕放大镜。[9]其他主要台式机(LXDE、XFCE和启迪)都试图与ATK兼容。

X客户机通常不能从一台服务器分离并重新连接到另一台服务器,除非它的代码专门为它提供了支持(Emacs是少数几个具有此功能的常见程序之一)。因此,将整个会话从一台X服务器移到另一台服务器通常是不可能的。然而,像虚拟网络计算(VNC)、NX和Xpra这样的方法允许从不同的X服务器到达虚拟会话(以类似于终端的GNU屏幕的方式),并且其他应用程序和工具包提供相关的工具。[10]还存在x11vnc(VNC:0观众)、Xpra的影子模式和NX#39;的nxagent影子模式等解决办法,以使当前的X-server屏幕可用。此功能允许将正在运行的应用程序的用户界面(鼠标、键盘、监视器)从一个位置切换到另一个位置,而无需停止和重新启动该应用程序。

默认情况下,X服务器和远程X客户端之间的网络流量不加密。拥有数据包嗅探器的攻击者可以拦截它,从而可以查看显示到用户屏幕或从用户屏幕发送的任何内容。加密X流量的最常见方法是建立用于通信的安全外壳(SSH)隧道。

与所有瘦客户端一样,当在网络中使用X时,带宽限制可能会阻碍位图密集型应用程序的使用,这些应用程序需要以低延迟快速更新大部分屏幕,例如3D动画或照片编辑。即使是相对较小的未压缩的640x480x24Mbit 30Fps视频流(~211 Mbit/s)也可以轻松超过单个客户端100Mbit/s网络的带宽。相比之下,现代版本的X通常具有诸如MESA之类的扩展,该扩展允许本地程序的图形的本地显示被优化以绕过网络模型并直接控制视频卡,以使用全屏视频、渲染的3D应用程序和其他此类应用程序。

X';的设计要求客户端和服务器分开操作,而设备独立性和客户端和服务器的分离会产生开销。大部分开销来自客户端和服务器之间的网络往返延迟时间(延迟),而不是协议本身:性能问题的最佳解决方案取决于高效的应用程序设计。[11]对X的一种常见批评是,如果仅在本地使用,其网络功能会导致过度复杂和性能下降。

现代X实现使用Unix域套接字在同一主机上进行高效连接。此外,可以使用共享内存(通过MIT-SHM扩展)来实现更快的客户端-服务器通信。[12]但是,程序员仍必须显式激活和使用共享内存扩展。还需要提供后备路径,以便与较旧的实现保持兼容,并与非本地X服务器通信。

有些人曾试图编写X的替代方案和替代方案。历史上的替代方案包括Sun的新闻和Next的Display PostScript,这两个基于PostScript的系统都支持用户可定义的显示端过程,这是X所缺乏的。目前的替代方案包括:

MacOS(和它的移动同行iOS)实现了它的Windows系统,也就是众所周知的Quartz。当苹果公司(Apple Inc.)。购买NeXT,并使用NeXTSTEP构建MacOSX,它用Quartz取代了Display PostScript。Quartz的作者之一Mike Paquette解释说,如果苹果在X11中增加了对它想要包括的所有功能的支持,它就不会与X11有太多相似之处,也不会与其他服务器兼容。[13]。

在Linux内核上运行的Android使用自己的系统来绘制称为SurfaceFlinger的用户界面。3D渲染由EGL处理。

Wayland正在由几个X.Org开发人员开发,作为X的潜在替代品。它通过DRI直接与GPU硬件一起工作。Wayland可以将X.org服务器作为客户端运行,这可以是无根的。[14]2013年完成了Raspberry Pi的Wayland后端的专有端口。[15]该项目于2012年达到1.0版。和Android一样,Wayland也是基于EGL的。

MIR是Canonical Ltd.的一个项目,目标与Wayland类似。[16]MIR旨在与使用ARM芯片组的移动设备(明确的目标是与Android设备驱动程序兼容)以及x86台式机一起使用。和Android一样,Mir/UnityNext也是基于EGL的。与X客户端应用程序的向后兼容是通过Xmir实现的。

其他替代方案试图通过直接使用硬件来避免X的开销;这样的项目包括DirectFB。[17](旨在为帧缓冲区提供可靠内核级接口的直接渲染基础设施(DRI)可能会[需要引用]使这些工作变得多余。)。

通过图形服务的网络传输性,实现X的网络透明性功能形式的其他方式包括:

虚拟网络计算(VNC),这是一个非常低级的系统,它通过网络发送压缩的位图;Unix实现包括一个X服务器。

远程桌面协议(RDP),目的类似于VNC,但在移植到类Unix系统之前起源于Microsoft Windows;参见NX、GoToMyPC等。

在X之前有几个位图显示系统。施乐推出了Alto(1973)和Star(1981)。阿波罗计算机公司推出了“显示经理”(1981)。苹果推出了丽莎(Lisa)(1983年)和麦金塔(Macintosh)(1984年)。Unix世界有安德鲁项目(1982)和罗伯·派克的Blit终端(1982)。

卡内基梅隆大学制作了一款远程访问应用程序。

..