好久不见~
废话不多说,上教程。
在做 数据分析(数据挖掘 或 机器学习)的时候,我们经常需要绘制一些统计相关的图表,这些统计、绘图的程序常常是跑在服务器上的,可是服务器出于性能和效率的考虑,通常都是没有安装图形化界面的,于是这些统计、绘图的程序在服务器上压根儿就跑不起来,或者无法直接显示出来,这就很尴尬了!
Linux 本身是没有图形化界面的,所谓的图形化界面系统只不过中 Linux 下的应用程序。这一点和 Windows 不一样。Windows 从 Windows 95 开始,图形界面就直接在系统内核中实现了,是操作系统不可或缺的一部分。Linux 的图形化界面,底层都是基于 X 协议。
假设我在使用VSCode的remote-ssh,并成功连接上了远程服务器,现在需要在调试代码的时候显示图形化界面。例如Python的opencv或者matplotlib的图形输出。
Mac 现在不提供X11 需要安装Xquartz,在https://www.xquartz.org/下载适合Mac的最新版安装包(其实不是很新了)。
首先,我们编辑服务器端的设置,使其能够X11转发:
编辑/etc/ssh/sshd_config
文件中找到如下两个参数,设置为yes
和10
X11Forwarding yes
X11DisplayOffset 10
更改后需要重启服务, Linux运行如下命令重新启动ssh服务。
service ssh restart
然后,我们编辑Mac上的配置,编辑/private/etc/ssh/ssh_config
文件(可使用vi),设置如下参数为yes
。
ForwardX11 yes
最后,使用安装了remote-ssh插件的VSCode,登录远程服务器,记得要在命令后加-X
选项。
跑一个带有图形输入的代码试试看~
不过,matplotlib输出的模块,上面的保存按钮,还是只能保存在了服务器中,可以使用ssh配合scp传输到本地。
当然,配好了X11的转发,其实我们可以做很多事情,例如在远程登录后终端里输入任意一个linux的GUI软件的命令:
参考: