macOS通过ssh -X登录服务器运行ncview报无法打开显示错误
问题定位
Note: could not open file /home/.ncviewrc for reading是非致命提示,不会导致程序退出,核心报错原因是X11图形转发通道未正常建立。ncview是GUI可视化程序,需要通过SSH把远程服务器的图形界面输出转发到本地macOS桌面才能运行,你用的ssh -X就是用来启用这个转发的,当前转发链路没通才会触发Can't open display错误。
排查解决步骤
本地macOS侧配置排查
- 安装X11服务端:macOS 10.8之后不再内置X11组件,必须手动安装XQuartz,安装完成后必须重启电脑才能让配置生效。
- 配置XQuartz权限:重启后先打开一次XQuartz,进入设置-「安全性」页,勾选「允许从网络客户端连接」,之后完全退出XQuartz再重新打开。
- 验证本地X11状态:打开本地终端执行
echo $DISPLAY,正常会返回类似/private/tmp/com.apple.launchd.随机字符串/org.macosforge.xquartz:0的输出,说明本地X11服务运行正常。如果返回空,就直接用XQuartz自带的终端执行后续SSH连接操作,避开系统自带终端和XQuartz的通信兼容问题。 - 临时关闭本地代理、VPN类工具,这类工具经常会占用或拦截X11转发依赖的本地端口。
SSH连接与服务端配置排查
- 连接时把
-X参数换成-Y,即执行ssh -Y username@asasd.de登录服务器。-Y启用的是受信任X11转发,绝大多数集群默认会限制-X的非受信任转发权限,直接拦截GUI输出。 - 登录服务器后先不要加载任何编译/运行模块,先执行
echo $DISPLAY检查环境变量,正常应该返回localhost:10.0这类格式的值,如果返回空或者是:0,说明X11转发没建立成功。 - 执行
xclock或者xeyes测试转发链路:如果能在本地弹出对应的时钟/眼睛小窗口,说明转发通道正常;如果弹不出,需要找服务器管理员检查sshd服务配置,确认/etc/ssh/sshd_config里以下参数为开启状态:
配置修改后需要重启sshd服务才能生效。X11Forwarding yes X11DisplayOffset 10 X11UseLocalhost yes
模块加载冲突排查
你加载的intel编译链、openmpi类模块有概率会覆写DISPLAY环境变量:
- 先在未加载任何模块的状态下确认X11转发正常、xclock可以弹出,再逐个加载你需要的模块,每加载一个就执行一次
echo $DISPLAY检查变量值。 - 如果加载某一个模块后DISPLAY值被清空或篡改,手动把它改回加载模块前的正常值即可,不影响后续ncview使用。
非致命提示修复
那个无法读取.ncviewrc的提示不影响程序运行,要消掉的话先执行echo $HOME确认自己的家目录路径,在家目录下执行touch .ncviewrc创建空配置文件即可。如果$HOME返回值是/home而非你个人的用户家目录,是服务器用户配置有误,找管理员修正HOME变量就行。
内容的提问来源于stack exchange,提问作者AVP
相关产品推荐
相关产品推荐

