使用SSH的X11 Forwarding运行远程服务器上的GUI程序
Note:服务器一般用的都是
Linux
,本文不讨论其他平台的服务器,例如Windows Server
远程Linux
桌面,一般用VNC
或者XRDP
。但是使用VNC
和XRDP
的话,那么需要在服务器上进行配置,就很麻烦,经常设置了很久VNC
或者屏幕共享仍然没成功。因此,简单好用的X11 Forwarding
就出现了,X11 Forwarding
是X Service
的一个特性,它可以把桌面显示到远程服务器上,从而实现远程执行Linux
服务器上的GUI
程序
本文就将介绍如何使用使用SSH
的X11 Forwarding
运行远程服务器上的GUI
程序。
Linux X系统介绍
X系统
(X Window System
)最早由MIT
在1984年提出, 主要目的是希望能够实现一个与系统无关的通用窗口系统。在开发X
时,开发者就希望窗口接口不要与硬件有强烈的相关性,否则就等于是一个新操作系统了, 会导致应用上的局限。因此X
系统在设计之初就是以应用程序的概念来开发的,而非以操作系统来开发。
X系统
提出后不断经厂商更新,一直到1987年到X11
版本,这一版X
取得了明显的进步, 后来的窗口接口改良都是架构于此一版本,因此后来X系统
也被称为X11
。
X系统
采用Client/Server
主从式架构,X Client
和X Server
以X Protocol
沟通。通常情况下,X Server
与X Client
都运行在同一台机器上,但因为X系统
当初设计成是通过socket
在X Server
与X Client
之间通信的,所以它们也可以运行在不同的机器上。
具体来说:
X server
管理硬件,绘制界面,同时接受鼠标/键盘的输入,因此,X Server
将运行在将要显示GUI
的机器上,即我们的机器上X Client
执行具体逻辑,例如要在屏幕的那个地方绘制一个怎样的矩形……因此X Client
运行在远程服务器上。
X Client
说白了就是一套库,因此只要是使用了X11
这个库作为显示库的软件,都可以远程运行
,例如我们看到的火狐浏览器
、LibreOffice
、Thunderbird
等GUI程序都是用X Client
作为图形显示库的。
在本机运行GUI
程序的时候,要显示图形的程序作为X Client
在前台运行,而X Server
在后台运行,一般通过手动启动或者由Display Manager启动
。
事实上,X 11
作为图形显示库,是硬件之上的硬件抽象层,提供了统一的API
来操作硬件,而所谓的KDE
、GNOME
等图形管理界面(桌面)都是基于X 11
开发的,因此只要是带有桌面系统Linux
都安装得有X 11
的运行库。
而作为开发GUI
程序的QT
,属于上层应用层,还是构建在桌面应用之上的,因此也支持X 11
。
使用SSH的X11 Forwarding运行Linux系统的GUI程序
理解了X Server
和X Client
的关系,通过SSH
远程运行Linux GUI
程序就比较简单了。
1 安装X Client
首先,确认远程服务器上的SSH
服务端开启了X11 Forwarding
功能(默认开启):
# 编辑 /etc/ssh/sshd_config 文件
X11Forwarding yes
# 如果之前未开启,保存配置文件后重启sshd
systemctl restart sshd
解下来,远程服务器上安装xauth
包。如果远程服务器安装时带桌面环境,xauth包已经默认安装,可以跳过这一步。无界面版的远程服务器需手动安装:
# CentOS
sudo yum install -y xorg-x11-xauth
# Debian/Ubuntu
sudo apt install -y xauth
2 安装X Server
接着,在本地电脑上安装X Server
程序。运行带桌面环境的Ubuntu
、Debian
、Fedora
、CentOS
等Linux
发行版的本地电脑,已经自带X Server
,可以略过这一步。Windows
、MacOS
系统需要自行下载X Server
程序:
MacOS
可到https://www.xquartz.org/ 下载XQuartz
程序Windows
可到 https://sourceforge.net/projects/vcxsrv/ 下载VcXsrv
,或到 https://sourceforge.net/projects/xming/ 下载Xming
,安装并运行X Server
程序,此外,MovaXterm
默认自带了一套X Server
程序,所以如果你是用的MobaXterm
做为SSH
客户端的话,那么直接用就行。
3 连接X Server
最后,只需要在SSH
连接的时候,开启X11 Forwarding
选项,SSH
就会转发X Client
的绘图数据给本机上的X Server
,从而实现连接运行远程服务器上的GUI
程序:
# -X 选项开启X11 Forwarding
ssh -X user@host
# 运行远程GUI程序,界面将在本地电脑上显示出来
xxxxx
例如我最近在开发操作系统,在调试的时候因为需要显示模拟的操作系统的屏幕,所以模拟使用的程序必须是一个GUI
程序。
ssh jack@192.168.1.20 -X
cd projects/ElephantBook/c09/a
bochs -f bochsrc
X11 Forwarding相关事项
X11 Forwarding
有一些注意事项:
- 和
VNC
和XRDP
等技术相比,X11 Forwarding数据传输量很大,效率低,不建议长时间使用 - 如上面所说,不需要在远程服务器上运行桌面系统,只需安装
xauth
包 - 有一些
GUI
形式的ssh客户端,需要在设置中开启X11 Forwarding