本地Linux如何显示远程Linux中的GUI程序?

394 阅读2分钟

前言

最近在学习Linux下的GUI程序开发,但是不知不觉学到了一个很有意思的功能,假如现在你有两个Linux电脑,并都有桌面环境,但某些原因你不能实体操作Linux A,只能操作Linux B,且可以在B上通过ssh去连接A,如果你想执行Linux A中的一个GUI程序并在本地显示,到底有没有办法?

如果放在以前,我可能会想这怎么可能。

但是事实是,可以的。

我们知道Linux不具备图形化API,Linux现在的图形界面的实现只是Linux下的应用程序实现的,那显示部分是谁负责呢?

也就是X11。

X11是Linux/Unix系统使用的远程显示协议,通过在电脑上运行X11程序(称为server),就可以使用ssh客户端远程访问Linux上的图形程序,注意他只是个协议,协议会有实现,而现在Linux系统下最流行的是实现 Xorg 和 XFree86。

还有就是,在本地电脑上显示图形的程序称为server,远程端的程序为client,这和我们通常写socket程序思想相反,server是控制显示器和输入设备(键盘和鼠标)的软件,他可以创建窗口,在窗口中绘图和文字等,当client程序提出需求后,server会完成client程序的需求。

其余就不班门弄斧了,大概就是这样。

而如果开启了X11Forward转发, 就可以在远程显示,开启X11Forward也简单,但是默认情况下ssh服务就是处于开启状态,配置文件在/etc/ssh/ssh_config,找到X11Forward,设置为yes即可。

接下来这个动画,进行演示。

实验方法是,左边Ubuntu安装了google-chrome,但右面的没安装,我们需要在右面通过ssh连接后执行打开左面的google-chrome。

2022-10-31-18-55-45.gif

需要注意的是,ssh命令要加-X参数。

但是你会发现,打开google-chrome需要加入--no-sandbox参数,其他程序不一定,这是google-chrome下的参数,看名字是禁用沙盒之类的安全技术把,不从得知。

也并不一定远程电脑需要进入图形化界面,但需要远程电脑有桌面环境,如下,通过这条命令切换为文本模式,并重启,再次测试依然可以成功。

sudo systemctl set-default multi-user

reboot

如果你办公电脑是Window,也可能做到,但需要安装一个xming软件,可以到下面网址下载。

https://sourceforge.net/projects/xming/