一般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。
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通信。
这么绕,有啥意义呢?当然有!
许多时候 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 个版本
以上原理知识摘至下面博文
二、实践:利用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-*
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"
设置好之后,重启sshd服务
3、若使用SecureCRT来进行X11 Forwarding需要在SecureCRT客户端所在主机先安装免费X Server 软件Xming软件
https://sourceforge.net/projects/xming/
安装完后启动Xming,按照设置向导进行设置
设置完成后,还需要启动SecureCRT的X11 Forwarding功能,如下图所示,全局选项——默认会话——Port Forwarding——Remote/X11——X11 forwarding启用设置后保存配置重启SecureCRT
接下来登录远程服务器,例如打开wireshark-gnome 图形化程序
使用yum install wireshark-gnome安装wireshark-gnome 图形化程序
输入wireshark &打开Wireshark
本地电脑则会自动打开Wireshark的图形化窗口
同样若有安装firefox,输入firefox可以打开Firefox图形界面
4、如果使用MobaXterm工具就相当简单了
见上图红圈标注: X11-forwarding 和 DISPLAY 这两项都打上了绿色的勾,代表X11 Forwarding设置成功
并且MobaXterm自带X Server,不需要另外单独安装Xming等X Server工具
例如打开GUI程序xclock
领取专属 10元无门槛券
私享最新 技术干货