有趣的X11

大多数熟练使用Linux的用户都习惯于使用高效的命令行进行操作,尤其是在服务器上,安装桌面环境浪费资源、降低稳定性。但是有的应用程序又必须有显示输出才有意义,比如使用服务器运行一些有图像输出的程序时。你可以选择安装桌面环境,然后使用VNCRDP进行远程桌面连接,但更好的选择其实是使用X窗口系统(以下简称X11)转发输出。这张图片就是一个神奇的Linux文件管理器和macOS文件管理器”运行”在同一桌面下的有趣效果:
x11

什么是X11?

这项有趣的技术自1984年第一版X1发布至今已经有三十多年,可以称得上是古老的技术了。1987年9月15日首次发布现有X窗口系统所用的协议X11(Protocol),后续发布的版本命名为X11R2X11R3…而今最新的引用实现(引用性、示范性的实现体)版本则是2012年发布的X11R7.7(X11 Release 7.7),所以后来就简称X11了。

X窗口系统(X Window System,也常称为X11或X)是一种以位图方式显示的软件窗口系统。最初是1984年麻省理工学院的研究,之后变成UNIX、类UNIX、以及OpenVMS等操作系统所一致适用的标准化软件工具包及显示架构的运作协定。X窗口系统通过软件工具及架构协定来创建操作系统所用的图形用户界面,此后则逐渐扩展适用到各形各色的其他操作系统上。现在几乎所有的操作系统都能支持与使用X。更重要的是,今日知名的桌面环境——GNOME和KDE也都是以X窗口系统为基础建构成的。————维基百科-X窗口系统

X11最大的特点是它的C/S架构和我们一般认为的Server运行在远端Client运行在本地恰好相反,X11的Server反而通常运行在用户本地的机器上,而运行在远端的Client也并非特指某一个或一种程序,而是一切基于X11开发的GUI。通常我们把X Server安装在本地并启动,例如Windows上的XManagermacOS上的XQuartz等软件,用以接收远端的图像信号并将鼠标、键盘输入转发到远端。你可以把X11理解为将图像数据处理运行在服务器上,但显示信号通过网络输出到另外一台机器上,想象将平时我们使用显示器的HDMI或者DVI线被换成了一根网线。

X11的优点

让显示输出更加灵活

客户端可以在远程服务器上执行计算任务,而X Server仅负责图形显示。既可以充分利用服务器的强大性能进行运算,还不用给服务器安装桌面环境或连接显示器就能看到图像输出,这种场景在集群环境下非常常见。

让GUI变得可移植

只有X Server服务端与硬件打交道,所有的客户端都与硬件无关,这让不同的平台上的移植变得很容易。

风格可自定义

X系统只负责显示图形,并不限制显示和操作的风格,因此不同的X Window的风格并不相同,用户可以根据自己的喜好进行选择。

X11的缺点

性能

X Window的C/S体系(C/S架构)设计在应用程序和视频硬件之间多加了一层软件,导致绘图效率下降,所以引起了一些批评。因此开发了若干扩展,在设备和客户机在同一个系统上时,通过在获取适当许可的情况下,以直接访问设备来改善这一问题。而在Linux上,一些视频驱动已经部分移入内核以提高效率。

稳定性

另一方面,X也被批评为需要(或者提供)了过多的对硬件的直接访问,从而影响了系统稳定性。行为不良的显卡驱动(有时也可能是应用程序)甚至能够导致整个系统崩溃或者重启;有时即使操作系统仍在工作,它也不能继续渲染其显示(这时除了重启,缺乏好的恢复手段)。目前所有的桌面GUI操作系统都提供某种对硬件的直接访问,支持者认为市场已经证明为了提供图形性能牺牲一点稳定性是值得的。或许将来随着技术和用户的演化这一平衡会有所变化。

不规范的用户界面

X刻意不去规范用户界面和程序之间大多数的通信,导致出现了许多非常不同的界面,同时造成程序之间协同的困难;而客户机之间的互操作规范ICCCM以难以正确实现而闻名。后来的标准化尝试,如Motif和CDE,也于事无补。长久以来这已经成为用户和程序员的噩梦。

其他

X缺乏良好的网络与透明的音效系统。当用户对音效日益期盼时,各种不兼容的音效子系统便出现了。过去,大多数程序员只好忽略网络问题,简单地使用本地操作专用的音效API。第一代客户端-服务端音效系统有rplay和Network Audio System。而最近的努力产生了EsounD(GNOME)和ARts(KDE),而这也并非标准。而其他系统如Media Application Server则正在开发当中。
直到最近,X也没有好地解决显示与打印机所打印的内容一致性(所见即所得)的解决方案。许多X客户机完全用PostScript实现打印,而这与发送到服务端的几乎是分离的。从X11R6.3起包含了Xprint,此时客户端已经不错,但是服务器实现还不行。而从X11R6.8起实现的质量已经很好,并且获得了组件支持。

总结

X11是一个功能非常强大的 C/S 图形显示系统,具有很好的跨网络性能,也易于进行扩展,是一个值得学习研究的技术。

参考链接

坚持原创技术分享,您的支持将鼓励我继续创作!