macos通过ssh连接服务器调用GUI程序
在Windows上远程连接服务器,如果想调用服务器上的图形化应用,可以使用mobaxterm这样的第三方工具实现,可以开箱即用,不用过多配置;但由于macos上没有类似的集成好的软件,所以需要额外配置一下。
原理
原理是基于 X11 Forwarding 技术 + XQuartz第三方工具来实现的(转载自https://www.macrjy.com/t/3654)。
原生的Linux系统本来就是没有图形化界面的,图形化界面只是Linux系统中的一个应用程序。Linux系统中的图形化界面,都是基于X协议。
X 协议由 X server 和 X client 组成:
- X server 管理主机上与显示相关的硬件设置(如显卡、硬盘、鼠标等),它负责屏幕画面的绘制与显示,以及将输入设置(如键盘、鼠标)的动作告知 X client。
- X client (即 X 应用程序) 则主要负责事件的处理(即程序的逻辑)。
举个例子,如果用户点击了鼠标左键,因为鼠标归 X server 管理,于是 X server 就捕捉到了鼠标点击这个动作,然后它将这个动作告诉 X client,因为 X client 负责程序逻辑,于是 X client 就根据程序预先设定的逻辑(例如画一个圆),告诉 X server 说:“请在鼠标点击的位置,画一个圆”。最后,X server 就响应 X client 的请求,在鼠标点击的位置,绘制并显示出一个圆。
许多时候 X server 和 X client 在同一台主机上,这看起来没什么。但是, X server 和 X client 完全可以运行在不同的机器上,只要彼此通过 X 协议通信即可。于是,我们就可以做一些 “神奇” 的事情,比如像本文开头谈到的,在本地显示 (X server),运行在服务器上的 GUI 程序 (X client)。这样的操作可以通过 SSH X11 Forwarding (转发) 来实现。
X11 中的 X 指的就是 X 协议,11 指的是采用 X 协议的第 11 个版本。
配置
服务器端
- 修改ssh配置文件(/etc/ssh/sshd_config)
添加或取消下面两条代码的注释:
X11Forwarding yes
X11DisplayOffset 10
如图所示:
- 安装xauth
在系统中安装xauth(以ubuntu系统为例)
sudo apt install xauth
至此,服务器端配置完成
Macos端
- 安装XQuartz
brew install xquartz
- 在终端中输入如下命令:
export DISPLAY=:0
Ps: 如果使用XQuartz自带的terminal里使用,无需此命令;如果要在iterm等其他terminal中使用,需要输入此命令。
- ssh连接
使用ssh进行连接前,需要保持XQuartz处于开启状态
ssh -Y user@IP
Ps: 在XQuartz自带的terminal里使用时可以使用-X参数,其他terminal中只能使用-Y参数。
2022年5月24日更新
最近在使用的时候出现了一些奇怪的问题,服务器和本地的配置都没有修改过但是图形界面转发却不工作了。在mac端iterm2上使用eog命令查看服务器上的图片时,出现如下报错:
Invalid MIT-MAGIC-COOKIE-1 keyUnable to init server
经过多次尝试不同的方案,最终在mac端的本地终端上执行如下命令解决:
sudo xhost + user@ip
具体原因暂时未知,特此记录一下。