一、什么是X11-forwarding

X11 中的 X 指的就是 X 协议;11 指的是采用 X 协议的第 11 个版本。
X11-forwarding 说的简单明白点就是:可以通过一个支持 X Server 的 SSH 客户端,例如:MobaXterm。 连接到远程 Linux 服务器,可以在本地通过 MobaXterm 运行操作一个远程 Linux 服务器上有图形界面或命令行的程序。


二、X协议原理

通常来说,Linux 本身是没有图形化界面的,所谓的图形化界面系统只不过中 Linux 下的应用程序。这一点和 Windows 不一样。

Windows 从 Windows 95 开始,图形界面就直接在系统内核中实现了,是操作系统不可或缺的一部分。Linux 的图形化界面,底层都是基于 X 协议。

X 协议由 X serverX client 组成:
X server 管理主机上与显示相关的硬件设置(如显卡、硬盘、鼠标等),它负责屏幕画面的绘制与显示,以及将输入设置(如键盘、鼠标)的动作告知 X client。
X client (即 X 应用程序) 则主要负责事件的处理(即程序的逻辑)。

举个例子:
如果用户点击了鼠标左键,因为鼠标归 X server 管理,于是 X server 就捕捉到了鼠标点击这个动作,然后它将这个动作告诉 X client,因为 X client 负责程序逻辑,于是 X client 就根据程序预先设定的逻辑(例如,画一个圆),告诉 X server 说:“请在鼠标点击的位置,画一个圆”。最后,X server 就响应 X client 的请求,在鼠标点击的位置,绘制并显示出一个圆。


三、使Linux支持X11-Forwarding

Linux操作系统:CentOS 7

  1. 安装X11-Forwarding的支持

$ sudo yum install xorg-x11-xauth xorg-x11-fonts-* xorg-x11-font-utils xorg-x11-fonts-Type1 xclock
这一堆安装的,实际上是X Client。其中最后的 xclock 是用来测试X11Forwarding功能的。

  1. 修改ssh的配置文件:/etc/ssh/sshd_config

$ sudo vim /etc/ssh/sshd_config
X11Forwarding Yes

  1. 重启SSH服务,让ssh配置文件生效。

$ systemctl restart sshd 或 $ /etc/rc.d/init.d/sshd resta

  1. 测试 X11-forwarding 效果

运行以下命令测试效果,正常情况下会出现一个时钟界面。
$ xclock
image.png

  1. 如果提示 -bash: xclock: command not found 报错,则需安装 yum install xorg-x11-xauth -y
  2. 如果出现:Warning: Missing charsets in String to FontSet conversion 输入:export LANG=C 即可解决

四、支持 X11-forwarding 的 SSH 客户端

  • XShell
  • MobaXterm