macOS上使用x11转发运行Linux GUI软件——XQuartz

文章讲述了作者在Mac上因校园网限制无法远程访问Linux电脑,转而利用x11转发和Linux服务器连接,通过XQuartz和SSH在Mac上运行LinuxGUI程序的过程,包括安装XQuartz、配置SSH和使用Remmina等工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原因

这次要在mac上运行Linux GUI程序的原因还是蛮复杂的

我本来在学校有一台电脑吗,然后配置还不错,一直开着机,可以离线下载,开虚拟机用Linux,什么的都蛮方便的,而且很重要的是可以在寒假期间,可以远程到那台电脑上上知网,看看论文打打比赛都蛮方便的。15号回的家,一直用的都挺好的。

但是就很无语,学校校园网需要认证登陆,因为我从发15号到29号已经满了14天了吧,然后就被踢下来了,我的电脑就不能联网了,然后导致了我就不能远程到我的电脑来使用了。

学校早都放假了,老师教职工也都放假了,没有人能帮我联网了,这该怎么办呢,可是急死我了


但是我后来突然想到,虽然我不能远程到我的电脑了,但是学校里还有常年开着的服务器啊,而服务器和我的电脑都在一个内网内,那我岂不是可以先远程到服务器上,然后再使用服务器远程到我的电脑,然后使用RDP远程操作我的电脑登录网络?

虽然说电脑不能联网了,但是他获取的IPv4地址是不会变的,内网资源还是可以访问我的电脑的。

但是有一个很大的问题,只是我们实验室的服务器装的是Linux,然后Linux的GUI实在是不会用,向日葵安装的还是命令行版本,根本就不能远程到我的电脑,这该怎么办呢?

不过我之前使用xshell的时候,每次在xshell打开jupyterlab的时候,都会弹出很多对话框,问要不要使用xmanager转发x11请求?

我当时就很好奇,什么是x11请求呢,后来了解了一下,原来Linux上的GUI都是通过一个叫X Window System实现的,转发x11请求的意思就是可以将GUI界面转发到SSH客户端上,让它不只是SSH的cli界面,而是拥有了GUI界面。

后来搜索了一下,原来x11转发了以后,就像是微软的RDP Remote App一样,就是就像是客户端上原生的App一般,用起来感觉体验还是很不错的,(其实也有点像是Parallel Desktop的融合模式)

然后了解了一下,Linux下虽然没有Microsoft官方的RDP客户端,但是也有很多可以用的第三方RDP客户端,可以帮助我连接到我的PC。

有这些Linux上可用的RDP Cliet:

  • Remmina
  • Gnome-connections

我搜了一下感觉还不错的就是这两个,特别是Remmina,感觉用户界面比较友好,支持的协议也很多。

最重要的是他支持网络级别的身份验证,这个真的很重要,因为我根本不可能在电脑上关闭网络级别的身份验证。

所以我就需要在这台Linux服务器上使用x11转发,让我能够远程到我的电脑进行校园网认真登录。

我的环境

客户端

  • MacBook Air(M1, 2020)
  • macOS Sonoma 14.3(23D56)

服务端

  • Dell PowerEdge C4140
  • Ubuntu 20.04 LTS Desktop With Gnome Desktop

注意!!!
服务器是有Gnome桌面的,没有的话您可能要考虑去安装一个桌面环境。
另外似乎现在的GUI的兼容性对于X Server来说兼容性比较好,使用Wayland作为桌面环境的,应该大概率是不能正常工作的

在macOS下使用x11转发运行Linux GUI App

安装x11客户端

macOS的自带的终端不支持x11请求,所以我们要下载一个软件,叫做XQuartz,直接官网下载就行

XQuartz官网

这软件还挺不错的,支持Intel和Apple Silicon

安装直接一路下一步就行

安装完了还得去注销一下当前用户,记得保存好文件,关掉Apps

配置XQuartz

安装完了这个软件,应该会默认放在启动器里面的系统工具,找不到的可以去找一下或者使用聚焦搜索,打开它

2024-01-30T11:16:18.png

打开这个软件,应该是一个终端,键入Command + ,打开设置,在设置里打开这个选项:Allow connections from network clients,应该是允许互联网上的连接请求吧,我也不懂

2024-01-30T11:19:03.png

打开后就在XQuartz里面使用ssh连接你的服务器主机了

连接服务器主机

使用SSH连接主机,就和一般命令行链接一样,不过记得加一个-X或者-Y的参数,表示允许X11连接转发。

一般情况下是使用-X这个参数就够了,不过,似乎某些高级3D应用程序,比如MayaBlender这种软件会无法正常运行,所以就使用-Y这个参数来放宽安全政策。

你的命令可能是这样的:

ssh -p <portNumber> -X username@serverip

然后输入密码就行。连接上了就应该是和一般连接服务器一样的界面

2024-01-30T11:23:11.png

然后在这里你就可以执行你的应用程序了

你可以执行一些小软件,来看看是否可以正常出现窗口,比如在命令行执行xeyesxclock,哈哈哈,挺好玩的

2024-01-30T11:28:30.png

然后你就可以正常去执行你的GUI应用程序了,比如直接在命令行中键入remmina,就可以看到熟悉的Linux GUI应用程序了!!!!!!!

起飞飞飞飞飞飞


这个体验还是挺不错的,在公网内网穿透下,延迟还是可以接受的,主要是至少已经是一个可用的状态了。

2024-01-30T11:31:37.png

可能出现的问题

我这次完成X11转发还是挺顺利的,但是也可能会有一些意外发生,大家可以注意一下,那些常见错误什么的,比如

SSH配置文件

可能需要检查你的服务端的SSH配置文件查看是否已经打开了X11转发,具体位置在~/.ssh/config或者/etc/ssh/ssh_config里面,看看里面有没有一行ForwardX11 yes允许X11转发

Windows相关的客户端

我的在家的主力机就是这台MacBook Air,所以Windows用的没那么多,不过Windows中应该也是需要类似安装一个软件,我了解到的有Xmanager(付费)XmingVcXsrv Windows X Server什么的。

如果有朋友成功了,可以的话,多交流下哈


我是六六,是个小白,什么也不会,但是希望也能做一个自己看得起的人!

### 如何在 VSCode 中配置和使用图形转发 #### 配置 X11 转发环境 对于 macOS 用户来说,为了使通过 SSH 远程运行的应用程序能够展示 GUI 图形窗口,需要先安装支持 X Window System (X11) 的软件包——XQuartz[^2]。 而对于 Windows 用户,则推荐安装 VcXsrv 来作为 X 服务器解决方案。相比 XMing, VcXsrv 提供更稳定的性能表现特别是在处理复杂 UI 应用时[^3]。 #### 修改 `.ssh/config` 文件以开启 X11 转发功能 确保个人电脑上的 Visual Studio Code 已经正确设置了用于连接目标 Linux 主机的 SSH 配置文件路径,并且该配置包含了如下所示的关键选项: ```bash Host your_remote_host_name_or_ip HostName your.remote.host.name.or.ip.address User your_username_on_the_remote_machine ForwardX11 yes # 开启X11转发 ForwardX11Trusted yes # 设置为可信模式提高兼容性 ``` 上述设置中的 `ForwardX11` 和 `ForwardX11Trusted` 参数是用来激活以及优化 X11 协议的数据传输过程,从而允许远程应用程序创建本地可见的图形化界面[^1]。 #### 更新 Python 环境下的 Matplotlib 后端设置 为了让 matplotlib 正确识别到已建立好的 X 显示链接,在执行绘图脚本之前应该指定合适的渲染引擎(即 backend)。可以在代码开头加入下面这段话来强制选用适合跨平台使用的 'TkAgg' 或者其他非交互式的 backends: ```python import matplotlib matplotlib.use('TkAgg') # 在导入pyplot前定义backend类型 from matplotlib import pyplot as plt plt.plot([1, 2, 3], [4, 5, 6]) plt.show() ``` 这样做可以避免因默认后端不适用于当前工作场景而导致图像无法正常呈现的问题。 完成以上几步之后,当再次尝试从 VSCode 内部启动涉及 GUI 输出的任务时,比如调用 matplotlib 函数绘制图表,就能够在自己的显示器上看到相应的可视化结果了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值