出现这个状况的原因是 ssh -X 登录服务器时,使用了不同的端口和协议来传递 X 服务信息。当直接登录服务器时,使用图形时,则是使用的 :10
来显示,而服务器端则没有显示。这时,采用的协议是
OpenGL version 2.1 Mesa 18.0.5 is supported
对于 paraview 5.4.0 需要的 OpenGL 3.2,则没办法满足。根据参考资料 3,远程图形的情况有两种:
- 登录服务器,直接命令使用图形程序,采用的是 OpenGL 2.1,此时,所使用的 GPU 资源是本地,而不是服务器的。
- 使用服务器的 GPU,将会有 XSession 运行,此时可采用完整的 OpenGL 能力运行。
同时,一般服务器也不会带显示器,有时,服务器的 GPU 也没有输出接口。当服务器没有显示器时,一般是不能启动 X 服务的,因为找不到显示器。但是,你知道,系统还是可以启动的。
这个问题还是比较复杂,我也遇到过,找过很多资源,没有看到网上有这种特殊情况。因此,以下是我自己的处理过程。
安装 Nvidia 驱动
屏蔽 nouveau 显卡驱动
编辑 /etc/default/grub
,在 GRUB_CMDLINE_LINUX
行加上 nouveau.modeset=0 rd.driver.blacklist=nouveau
,如下
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet nouveau.modeset=0 rd.driver.blacklist=nouveau"
生成启动配置文件
sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
重新启动机器。
安装驱动
到 nvidia.com 下载官方驱动,假设针对你的显卡,下载了 Nvidia.run
则使用
sudo sh Nvidia.run
安装驱动,并自动更新 xorg.conf 文件。
sudo nvidia-xconfig -a --use-display-device=None --virtual=1280x1024
设置启动方式
sudo systemctl set-default multi-user.target # 启动到多用户模式,无图形界面
sudo reboot
安装 xpra,服务器和本地均需安装
[ ~]$ cd /etc/yum.repos.d/
[ yum.repos.d]$ sudo wget https://xpra.org/repos/CentOS/xpra.repo
[ yum.repos.d]$ sudo yum install xpra -y
运行
服务器端运行
[server ~]$ sudo /usr/bin/X :0 & # 启动 X 服务
[server ~]$ of5x
[server ~]$ cd <foam-work-dir>
[server foam-work-dir]$ xpra start :0 --use-display --exit-with-client=yes --start=paraFoam
客户端 (本地) 运行
[local ~]$ xpra attach ssh:<服务器 IP 地址>
然后就可以在本地看到在服务器 GPU 上运行的图形程序了。这时,由于采用了服务器显卡驱动所使用的 OpenGL,因此,解决了 OpenGL 版本的问题。
在本地使用 Ctrl+C
退出。然后,服务器端就会自行退出。