使用SSH的X11 Forwarding运行远程服务器上的GUI程序


X11所归属的X.rog基金会

使用SSH的X11 Forwarding运行远程服务器上的GUI程序

Note:服务器一般用的都是Linux,本文不讨论其他平台的服务器,例如Windows Server

远程Linux桌面,一般用VNC或者XRDP。但是使用VNCXRDP的话,那么需要在服务器上进行配置,就很麻烦,经常设置了很久VNC或者屏幕共享仍然没成功。因此,简单好用的X11 Forwarding就出现了,X11 ForwardingX Service的一个特性,它可以把桌面显示到远程服务器上,从而实现远程执行Linux服务器上的GUI程序

本文就将介绍如何使用使用SSHX11 Forwarding运行远程服务器上的GUI程序。

Linux X系统介绍

X系统X Window System)最早由MIT在1984年提出, 主要目的是希望能够实现一个与系统无关的通用窗口系统。在开发X时,开发者就希望窗口接口不要与硬件有强烈的相关性,否则就等于是一个新操作系统了, 会导致应用上的局限。因此X系统在设计之初就是以应用程序的概念来开发的,而非以操作系统来开发。

X系统提出后不断经厂商更新,一直到1987年到X11版本,这一版X取得了明显的进步, 后来的窗口接口改良都是架构于此一版本,因此后来X系统也被称为X11

X系统采用Client/Server主从式架构,X ClientX ServerX Protocol沟通。通常情况下,X ServerX Client都运行在同一台机器上,但因为X系统当初设计成是通过socketX ServerX Client之间通信的,所以它们也可以运行在不同的机器上

具体来说:

  • X server管理硬件,绘制界面,同时接受鼠标/键盘的输入,因此,X Server将运行在将要显示GUI的机器上,即我们的机器上
  • X Client执行具体逻辑,例如要在屏幕的那个地方绘制一个怎样的矩形……因此X Client运行在远程服务器上

X Client说白了就是一套库,因此只要是使用了X11这个库作为显示库的软件,都可以远程运行,例如我们看到的火狐浏览器LibreOfficeThunderbird等GUI程序都是用X Client作为图形显示库的。

在本机运行GUI程序的时候,要显示图形的程序作为X Client在前台运行,而X Server在后台运行,一般通过手动启动或者由Display Manager启动

事实上,X 11作为图形显示库,是硬件之上的硬件抽象层,提供了统一的API来操作硬件,而所谓的KDEGNOME等图形管理界面(桌面)都是基于X 11开发的,因此只要是带有桌面系统Linux都安装得有X 11的运行库。

而作为开发GUI程序的QT,属于上层应用层,还是构建在桌面应用之上的,因此也支持X 11

使用SSH的X11 Forwarding运行Linux系统的GUI程序

理解了X ServerX 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程序。运行带桌面环境的UbuntuDebianFedoraCentOSLinux发行版的本地电脑,已经自带X Server,可以略过这一步。WindowsMacOS系统需要自行下载X Server程序:

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

屏幕录制2022-11-28 上午12.41.07

X11 Forwarding相关事项

X11 Forwarding有一些注意事项:

  • VNCXRDP等技术相比,X11 Forwarding数据传输量很大,效率低,不建议长时间使用
  • 如上面所说,不需要在远程服务器上运行桌面系统,只需安装xauth
  • 有一些GUI形式的ssh客户端,需要在设置中开启X11 Forwarding

文章作者: Jack Wang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Jack Wang !
  目录