You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
在早期,显卡只做一件事情:把帧缓冲区(framebuffer)的内容输出到显示器上。此时,显存就是一段内存空间,修改内容,显示器上对应的像素就会变化。帧缓冲区在 Linux 上暴露为 `/dev/fb0` 这样的设备文件,用户空间程序可以直接打开并且修改它的内容以读取分辨率等信息,并改变显示器上的内容。此时,X server 使用 `fbdev`(xf86-video-fbdev)驱动来操作帧缓冲区。
@@ -264,13 +284,41 @@ WARNING: running xinput against an Xwayland server. See the xinput man page for
264
284
265
285
进入二十一世纪之后,桌面环境开始追求更炫酷的视觉效果,例如圆角的窗口、半透明的窗口、有阴影的窗口、不规则形状的窗口、动画效果等等。但是 X 传统仍然假设:窗口是个不透明矩形,X 服务器需要直接把这样的窗口画到屏幕上,并且跳过被挡住的部分——而且这个过程没有缓冲,动画只能靠窗口不停重绘自己来实现,非常不流畅。而混成器做的事情就是:接管图形显示的流程,让窗口不再直接画在屏幕上,而是画在一个缓冲区中,然后由混成器统一将这些缓冲区合成(composite)到屏幕上。这样一来,要显示什么酷炫的效果就由混成器说了算了。在 X 下,混成器需要调用 [X Composite 扩展](https://freedesktop.org/wiki/Software/CompositeExt/)来实现。
266
286
267
-
最著名的例子是 compiz,它实现了很多诸如 3D 立方体桌面切换等等的效果,是 2010 年前后 Linux 桌面炫酷效果的代名词,在当时也吸引了很多用户来使用 Linux 桌面。
287
+
!!! tip "我的 X 服务器开启了哪些扩展?"
288
+
289
+
可以使用 `xdpyinfo` 来查看当前 X 服务器开启了哪些扩展:
290
+
291
+
```console
292
+
$ xdpyinfo
293
+
(省略)
294
+
number of extensions: 25
295
+
BIG-REQUESTS
296
+
Composite
297
+
DAMAGE
298
+
DOUBLE-BUFFER
299
+
(省略)
300
+
```
301
+
302
+
最著名的例子是 compiz,它实现了很多诸如 3D 立方体桌面切换等等的效果,是 2010 年前后 Linux 桌面炫酷效果的代名词,在当时也吸引了很多用户来使用 Linux 桌面。各个桌面环境的窗口管理器,例如 GNOME 的 mutter、KDE 的 kwin 也都集成了混成器的功能。
X 的网络透明性设计似乎使得远程桌面访问变得非常简单,似乎只需要 `ssh -X` 或者 `ssh -Y` 就可以了。但是由于 X 协议本身的设计问题,这么做的性能并不好,主要原因包括:
312
+
313
+
1. X 协议很「啰嗦」,大量的操作都需要往返通信,这导致网络延迟会被协议放大数倍,甚至十几倍。
314
+
2. 旧的 X 程序一般会调用 X 协议的接口来画线段、字体等(例如[客户端、服务端与窗口](#client-server-window)中展示的 xedit),但是绝大多数现代 UI 框架(例如 GTK、Qt)早已经不这么做了,而是直接画图给服务器。在远程环境下意味着传输大量未压缩的图像数据,网络带宽消耗大。
315
+
316
+
因此 X 的网络透明性几乎只适合在极低延迟的网络环境下使用。对于更常见的场景,根据需求不同,可以使用传统的 VNC/RDP 方案,针对游戏场景优化的 [Sunshine](https://github.com/LizardByte/Sunshine),或者为远程协助设计的 [RustDesk](https://rustdesk.com/) 等等。类似的远程桌面方案还有很多,可以按需选择。
317
+
318
+
!!! example "SSH + VNC 的远程桌面访问方案"
319
+
320
+
以下介绍一种常见的远程桌面访问方案:通过 SSH 隧道访问远程主机上的 VNC 服务器。只要能够建立 SSH 连接,就可以通过这种方法获取到基本的 X 桌面环境,并且用户之间互相隔离,且不需要配置防火墙,远程桌面图像也不会经手第三方。
0 commit comments