paraview 提示没有 OpenGL 3.2

使用环境:OpenFOAM 5.x,paraview 版本:5.4.0
系统:CentOS 7.7

利用 ssh -X 远程登录,使用 paraview 提示信息:

ERROR: In /home/xyz/OpenFOAM/ThirdParty-5.x/ParaView-5.4.0/VTK/Rendering/OpenGL2/vtkOpenGLRenderWindow.cxx, line 831
vtkXOpenGLRenderWindow (0x2f1d930): GL version 2.1 with the gpu_shader4 extension is not supported by your graphics driver but is required for the new OpenGL rendering backend. Please update your OpenGL driver. If you are using Mesa please make sure you have version 10.6.5 or later and make sure your driver in Mesa supports OpenGL 3.2.

出现的如下画面,点 render view 也没有图形显示。

你好,请问你的问题解决了吗,我最近也遇到了和你相同的问题

出现这个状况的原因是 ssh -X 登录服务器时,使用了不同的端口和协议来传递 X 服务信息。当直接登录服务器时,使用图形时,则是使用的 :10 来显示,而服务器端则没有显示。这时,采用的协议是

OpenGL version 2.1 Mesa 18.0.5 is supported

对于 paraview 5.4.0 需要的 OpenGL 3.2,则没办法满足。根据参考资料 3,远程图形的情况有两种:

  1. 登录服务器,直接命令使用图形程序,采用的是 OpenGL 2.1,此时,所使用的 GPU 资源是本地,而不是服务器的。
  2. 使用服务器的 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 退出。然后,服务器端就会自行退出。

参考资料

  1. http://arrayfire.com/remote-off-screen-rendering-with-opengl/
  2. https://xpra.org/trac/wiki/Usage/OpenGL
  3. http://renderingpipeline.com/2012/05/remote-opengl/
3 个赞

补充:

当服务器使用不同的 ssh 端口时,客户端使用的命令应当是

[local ~]$ xpra attach ssh:<服务器 IP 地址>:<端口>:0

这里的端口后面的 :0 必须 加上,代表在服务器端的 X11 Display number 为 :0 ,否则提示不能连接到服务器,会把端口认为成 X11 Display number。

还可使用另外的格式

[local ~]$ xpra attach ssh/<服务器 IP 地址>:<端口>/0

Ubuntu 下 xpra 安装及使用

安装 xpra

cd /etc/apt/sources.list.d
sudo wget https://xpra.org/repos/xenial/xpra.list
sudo apt-get update && sudo apt-get install xpra -y
sudo apt-get remove python2-xpra
sudo pip3 install --upgrade xpra

VMware 上的虚拟机

如果你使用的是 VMware 上的虚拟机系统,可以在 vmware 的设置上处理下,编辑这个文件 ~/.vmware/preferences


mks.gl.allowBlacklistedDrivers = "TRUE"

可以全局 /etc/vmware/config , 也可以是用户的 ~/.vmware/preferences 或者是每一个单独的 VM 配置 .vmx 文件,在 Windows 下就编辑这个 .vmx 文件。如果这一句没有,就添加它。

参考

  1. http://pyopengl.sourceforge.net/documentation/installation.html
  2. https://possiblelossofprecision.net/?p=2464