共计 1925 个字符,预计需要花费 5 分钟才能阅读完成。
1. X 窗口系统和 X11
1.1 X Window System
Linux 内核是没有图形化界面的,Linux 的图形化界面,比如常见的 GNOME、KDE 等桌面环境,它们实际上是构建在 Linux 内核之上的软件,可以看作是 Linux 系统下运行的应用程序。
Linux 的图形界面需要 X Window System(简称 X)的支持。X Window System 是一个网络透明、多字体、多窗口的图形用户界面系统,它允许用户通过图形界面与计算机交互。
X Window System 的主要组成部分:
- X 服务器(X Server):运行在本地机器上,负责处理输入设备(如键盘和鼠标)的事件,并将图形输出到显示器。
- X 客户端(X Client):图形界面程序,如窗口管理器、应用程序等,它们通过 X 协议与 X 服务器通信,请求显示图形界面,例如 xclock、firefox、gedit 等。
- X 协议(X Protocol):定义了 X 客户端和 X 服务器之间通信的规则和数据格式。
X 服务器和 X 客户端可以在同一台用户机器上,也可以在不同的机器上通过网络远程连接。
1.2 X11 转发
X11 是 X 协议的第 11 个版本,X11 也被称为 X Window System,是一个用于图形窗口环境的标准协议。
在 Linux 系统中,传统的图形界面 GUI 很大程度上依赖于 X11。X11 是一种网络协议,也是一个软件架构,它提供了图形显示的基本框架。
随着技术的发展,出现了一些 X11 的替代方案。例如,Wayland 是一种新的显示服务器协议,它被设计用来克服 X11 的一些缺点,如性能和安全性方面的问题。一些现代的 Linux 发行版开始支持 Wayland,并且部分桌面环境(如 GNOME)也能够在 Wayland 上运行。但是,目前 X11 仍然在广泛使用,尤其是在一些传统的 Linux 应用场景和对兼容性要求较高的系统中。
通过第三方工具,比如 VcXsrv,也可以在 Windows 操作系统上模拟 X11 环境,从而运行 X11 应用程序,这允许用户利用 X11 转发技术在 Windows 系统上显示来自远程 Linux 系统的图形界面。
1.3 X11 转发是什么
X11 转发是一种通过 SSH 协议实现的安全技术,它允许 X11 客户端和服务器之间的通信通过一个加密的隧道进行,这个隧道可以跨越网络,甚至是不安全的网络。
X11 转发的主要目的是提高安全性,它确保了在远程会话中运行图形应用程序时,所有图形数据和用户输入都被加密,从而保护了数据不被截获或篡改。
X11 转发依赖于 X11 协议,但它增加了一层安全性,使得远程访问图形界面变得更加安全。
1.4 X11 转发原理
- SSH 通道隧道传输
SSH(Secure Shell)通道隧道传输是一种通过 SSH 协议创建的安全网络隧道,它允许数据通过一个加密的通道在网络之间传输。
- X11 转发通过 SSH 通道进行隧道传输
X11 转发遵循与 X11 相同的模型,但 X 客户端到 X 服务器的连接是通过 SSH 通道进行隧道传输的。为了实现此流程,SSH 服务器将远程 X 客户端连接代理到 SSH 客户端,然后,SSH 客户端再将其代理到用户的 X 服务器。
X11 转发功能可以让我们通过 SSH 连接,直接运行对端 Linux 主机上的 GUI 程序,并将图形界面显示在本地机器上。这样,用户就可以在本地计算机上访问和操作远程 Linux 系统上的图形化应用程序。
2. Windows 运行 X11 应用
2.1 简单使用
首先下载 VcXsrv,然后安装。
安装后运行 xlaunch.exe
,选择 Multiple windows 模式。
然后选择 Start no client。
附加设置,3 个选项都勾选,特别是第三个。
最后点击完成,鼠标悬浮在 VcXsrv 图标上,即可显示的 X11 服务器的地址。Hausen
是本机的主机名,可用 ip 替代。
然后需要在 ssh 客户端设置 DISPLAY 变量,值为 ip:0.0
,然后即可运行 x11 客户端程序。
2.2 授权访问
现在 linux 生成 .Xauthority
文件。
# 创建文件
touch ~/.Xauthority
# 生成密钥
export DISPLAY=172.21.9.171:0.0
xauth add $DISPLAY . $(xxd -l 16 -p /dev/urandom)
生成后可以使用 xauth list
授权信息。然后将 .Xauthority
复制到 xlaunch.exe
同级目录,再启动 xlaunch.exe
。此时附加选择就不勾选 Disable access control
了,而是设置如下参数:
-multiwindow -clipboard -wgl -auth ".Xauthority"
启动成功后,就可以在远程 Linux 上显示图形界面了。
参考文档: