利用X11Forwarding远程启动CentOS服务器GUI图形界面程序 - 图1
    一般Linux服务器出于性能和效率的考虑,通常都没有安装图形化界面,但有些时候,有些程序可能需要依赖图形界面才能启动,例如需要启动一个图形界面的浏览器如firefox,那么如何在不安装图形界面的的情况下启动图形界面的程序呢?


    一、原理介绍

    1. X 协议
    Linux 早期本身是没有图形化界面的,所谓的图形化界面系统只不过中 Linux 下的应用程序。这一点和 Windows 不一样。Windows 从 Windows 95 开始,图形界面就直接在系统内核中实现了,是操作系统不可或缺的一部分。Linux 的图形化界面,底层都是基于 X 协议。
    X Window System(常被简称为X11或X),是一套基于X display protocol的windowing system,X GUI环境的功能包括窗口的绘制、移动,以及与鼠标、键盘等输入设备的交互。
    X采用C/S模型(这是关键):一个X server 和多个应用程序(client)通信。server接收client的请求绘制窗口,并将来自鼠标、键盘等设备的输入传递给client。
    利用X11Forwarding远程启动CentOS服务器GUI图形界面程序 - 图2
    X 协议由 X server 和 X client 组成:

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

    举个例子,如果用户点击了鼠标左键,因为鼠标归 X server 管理,于是 X server 就捕捉到了鼠标点击这个动作,然后它将这个动作告诉 X client,因为 X client 负责程序逻辑,于是 X client 就根据程序预先设定的逻辑(例如画一个圆),告诉 X server 说:“请在鼠标点击的位置,画一个圆”。最后,X server 就响应 X client 的请求,在鼠标点击的位置,绘制并显示出一个圆。
    2. X11 Forwarding
    因此 X server和client可以位于同一计算机上,例如在Linux主机上使用KDE等桌面环境就是这种模式。X server也可以通过同构网络、异构网络或Internet与client通信。

    image.png
    这么绕,有啥意义呢?当然有!
    许多时候 X server 和 X client 在同一台主机上,这看起来没什么。但是, X server 和 X client 完全可以运行在不同的机器上,只要彼此通过 X 协议通信即可。于是,我们就可以做一些“神奇”的事情,比如像本文开头谈到的,在本地显示 (X server),运行在服务器上的 GUI 程序 (X client)。这样的操作可以通过 SSH X11 Forwarding (转发) 来实现。
    X server与client之间的通信是不加密的,这个问题可以通过SSH解决。SSH是Secure Shell的简称,SSH可以看作是通信被加密压缩版的telnet。
    需要用到SSH的forwarding功能,当X server与client所在计算机都支持SSH协议时,X server与client之间不安全的TCP/IP连接可以转送到(forwarding)二者之间建立的SSH连接上。
    了解原理后,我们就可以在本地自建X服务,然后服务器作为X client,把绘图的请求发给本地的X server。 这样就实现了本地显示图像的目的。
    X11 中的 X 指的就是 X 协议,11 指的是采用 X 协议的第 11 个版本
    以上原理知识摘至下面博文

    image.png


    二、实践:利用X11 Forwarding远程启动CentOS服务器GUI图形化程序
    1、X11转发是一种机制,允许在远程系统上运行的X11程序的图形界面显示在本地客户端计算机上。对于X11转发,远程主机不需要安装完整的X11系统,但至少需要安装xauth。xauth是一个实用程序,Xauthority用于维护服务器和客户端用于X11会话(源)身份验证的配置。
    由于X11 forwarding依赖“xorg-x11-xauth”软件包,所以必须先安装“xorg-x11-xauth”软件包,同时安装x11字体
    yum install xorg-x11-xauth xorg-x11-fonts-
    image.png
    2、检查/etc/ssh/sshd_config配置文件
    将 X11Forwarding、X11DisplayOffset、X11UseLocalhost 前面的 # 去掉
    验证AllowTcpForwarding是否为yes
    将 X11Forwarding 设置为 yes
    并将X11UseLocalhost选项设置为yes
    X11DisplayOffset默认为10,一般不用更改,保持默认值10
    *参数解释:

    1)X11Forwarding 是否允许进行 X11 转发。默认值是”no”,设为”yes”表示允许。
    2)X11DisplayOffset指定 X11 转发的第一个可用的显示区(display)数字。默认值是 10 。
    这个可以用于防止 sshd 占用了真实的 X11 服务器显示区,从而发生混淆。
    3)X11UseLocalhost是否应当将X11转发服务器绑定到本地loopback地址。默认值是”yes”。
    sshd 默认将转发服务器绑定到本地loopback地址并将 DISPLAY 环境变量的主机名部分设为”localhost”
    image.png
    设置好之后,重启sshd服务
    image.png
    3、若使用SecureCRT来进行X11 Forwarding需要在SecureCRT客户端所在主机先安装免费X Server 软件Xming软件
    https://sourceforge.net/projects/xming/
    image.png
    安装完后启动Xming,按照设置向导进行设置
    利用X11Forwarding远程启动CentOS服务器GUI图形界面程序 - 图9
    利用X11Forwarding远程启动CentOS服务器GUI图形界面程序 - 图10
    利用X11Forwarding远程启动CentOS服务器GUI图形界面程序 - 图11
    利用X11Forwarding远程启动CentOS服务器GUI图形界面程序 - 图12
    设置完成后,还需要启动SecureCRT的X11 Forwarding功能,如下图所示,全局选项——默认会话——Port Forwarding——Remote/X11——X11 forwarding启用设置后保存配置重启SecureCRT

    利用X11Forwarding远程启动CentOS服务器GUI图形界面程序 - 图13
    接下来登录远程服务器,例如打开wireshark-gnome 图形化程序
    使用yum install wireshark-gnome安装wireshark-gnome 图形化程序
    输入wireshark &打开Wireshark
    image.png
    本地电脑则会自动打开Wireshark的图形化窗口
    image.png
    同样若有安装firefox,输入firefox可以打开Firefox图形界面
    image.png
    4、如果使用MobaXterm工具就相当简单了
    利用X11Forwarding远程启动CentOS服务器GUI图形界面程序 - 图17
    见上图红圈标注: X11-forwarding 和 DISPLAY 这两项都打上了绿色的勾,代表X11 Forwarding设置成功
    并且MobaXterm自带X Server,不需要另外单独安装Xming等X Server工具
    例如打开GUI程序xclock
    利用X11Forwarding远程启动CentOS服务器GUI图形界面程序 - 图18