使用ssh客户端的X11-forwarding在远程linux主机上运行GUI程序

使用ssh客户端的X11-forwarding在远程linux主机上运行GUI程序

ssh客户端远程使用linux主机图形化界面的pycharm

偶然在修改sshd配置文件过程中,发现了X11-forwarding这个配置项。该选项支持远程调用linux上主机的图形化界面程序。
以前我一直有个误区,必须在安装了图形化界面的linux系统上才能运行GUI程序,而作为无界面的linux Sever 本身不支持GUI程序。直到发现X11-forwarding才直到这个想法是错误的。因为linux的图形化界面也不过是一个软件罢了,并非系统内核支持。既然是软件,那么任意linux都可以安装实现图形化界面。

什么是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 server 和 X client 组成:

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

测试环境

  • centos7 Server (腾讯云上任意开的一台CVM)
  • MobaXterm v21.5(xshell也可以,理论上任意支持X11-forwarding的ssh客户端都可以)

本来想用weterm的,可惜不支持X11-forwarding。

在sshd_config中开启X11-forwarding

vim /etc/ssh/sshd_config
systemctl restart sshd    //修改后重启sshd生效

安装xorg*图形化程序及依赖

yum install xorg-x11-xauth xorg-x11-fonts-* xorg-x11-font-utils xorg-x11-fonts-Type1 xclock -y

执行xclock测试是否成功

安装firefox

yum install -y  firefox dbus-x11
yum groupinstall 'Fonts'

安装qq音乐

wget https://dldir1.qq.com/music/clntupate/linux/AppImage/qqmusic-1.1.3.AppImage &&chmod +x qqmusic-1.1.3.AppImage
./qqmusic-1.1.3.AppImage --no-sandbox
在ssh客户端上运行的qq音乐

安装pycharm写代码

以往大家普遍认为在非桌面环境的linux开IDE写代码是不太可能的事。但测试后在linux开IDE确实是可以的事。

wget https://download.jetbrains.com.cn/python/pycharm-professional-2021.3.2.tar.gz && tar xvf pycharm-professional-2021.3.2.tar.gz
cd ./pycharm-2021.3.2/bin && chmod +x pycharm.sh
./pycharm.sh

总结

任何虚拟机和远端电脑上的Linux应用程序均可以使用SSH和X11 Forwarding进行连接。

使用SSH和X11 Forwarding可以解决很多远程桌面相关的问题。例如我们很多时候使用虚拟机安装Linux系统,其实并不是要使用Linux的桌面环境,而是使用Linux的命令行和一些GUI程序。

对于命令行程序,使用SSH完全可以解决。而对于GUI程序,我们也可以通过文章介绍的X11 Forwarding来解决。

和正常的连接到Linux再进行操作相比,SSH和X11 Forwarding的优势其实很明显:

  • 避免进入Linux的GUI环境,而可以在我们熟悉的Windows/macOS环境下使用Linux的各种功能
  • 避免配置Virtualbox Guest软件、Hyper-V的Enhanced Session等虚拟机的增强软件
  • 由于避开了图形界面的模拟,SSH和X11 Forwarding也通常有更好的性能

本文使用的腾讯云上的cvm进行测试,考虑到延迟和带宽的关系,偶尔会有卡顿的现象(比如开浏览器浏览网页)但是大部分情况(如开IDE写代码)没有任何问题。使用x11-forwarding也可以增加linux的可玩性。

赞赏

微信赞赏支付宝赞赏

Zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。

目前为止有一条评论

匿名 发布于10:52 上午 - 2月 11, 2022

请问X11-forwarding的方案和用VNC或xfce连上linux的方案 最大的区别是什么?对性能的要求呢?

发表评论