macos通过ssh连接服务器调用GUI程序


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 个版本。

配置

服务器端

  1. 修改ssh配置文件(/etc/ssh/sshd_config)

添加或取消下面两条代码的注释:

X11Forwarding yes
X11DisplayOffset 10

如图所示:

  1. 安装xauth

在系统中安装xauth(以ubuntu系统为例)

sudo apt install xauth

至此,服务器端配置完成

Macos端

  1. 安装XQuartz
brew install xquartz
  1. 在终端中输入如下命令:
export DISPLAY=:0

Ps: 如果使用XQuartz自带的terminal里使用,无需此命令;如果要在iterm等其他terminal中使用,需要输入此命令。

  1. 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

具体原因暂时未知,特此记录一下。


评论
 上一篇
paper_test paper_test
title onetitle twocontent document.querySelectorAll('.github-emoji') .forEach(el => { if
2021-09-13
下一篇 
ssh免密登陆连接配置 ssh免密登陆连接配置
ssh免密登陆连接配置1. 生成ssh key进入~/.ssh 目录,生成ssh key cd ~/.ssh ssh-keygen #生成默认密钥对 公钥id_rsa.pub 私钥id_rsa # 也可以通过参数进行指定 ssh-keyge
2021-08-11
  目录