如何正确编译 ParaView 以进行无头离屏渲染?

问题描述

我在远程服务器上运行 OpenFOAM,并且基本上设法通过 paraview 的 pvserver as described here 将结果可视化。但是在连接时客户端产生

无法访问服务器显示!

在服务器端无法访问显示。远程渲染将被禁用。

这基本上是正确的,因为服务器没有运行 X 服务器。性能当然是次优的,因为没有远程渲染,整个几何体都会被传输(我猜这几乎和直接 ssh 复制文件以纯粹在本地运行一样糟糕)。服务器确实有一个简单的板载 GPU(c2:00.0 VGA 兼容控制器:ASPEED Technology,Inc. ASPEED Graphics Family (rev 41) as per lspci),使用它可以称为计划B 因为在某些时候我可能会切换到没有 GPU 的服务器或完全不同的服务器。因此,我查看了 https://kitware.github.io/paraview-docs/latest/cxx/Offscreen.html,并使用 Arch Linux 通过 its paraview PKGBUILD 获得了 asp checkout paraview 并将以下开关附加到其 build() -> cmake 指令:

        -DVTK_OPENGL_HAS_OSMESA=ON \
        -DVTK_USE_X=OFF \
        -DPARAVIEW_USE_QT=OFF \

编译没有错误(尽管有很多警告,我可能必须检查它们在使用和不使用这些开关时是否不同),但是 pvserver 现在是 SEGFAULT:

$LD_PRELOAD=/usrlib/libGLEW.so pvserver --force-offscreen-rendering
Waiting for client...
Connection URL: cs://xxx:11111
Accepting connection(s): xxx:11111
Client connected.
(  52.668s) [pvserver        ]vtkOpenGLRenderWindow.c:565    ERR| vtkOSOpenGLRenderWindow (0x55f0fa7f4b60): GLEW could not be initialized: Missing GL version

Loguru caught a signal: SIGSEGV
Stack trace:
0       0x7f53ca2c8f80 /usr/bin/../lib/libc.so.6(+0x3cf80) [0x7f53ca2c8f80]
(  52.669s) [pvserver        ]                       :0     FATL| Signal: SIGSEGV
Segmentation fault (core dumped)

LD_PRELOAD 按照建议使用现有的 libGLEW.so,例如here 没有改变,所以现在我卡住了... /usr/lib/libosmesa.so 也存在,libOpenGL.so 也存在,所以我错过了什么?如何正确解决此问题?

解决方法

我正在使用 ArchLinux 并且以下工作完美:

git clone https://gitlab.kitware.com/paraview/paraview.git --recursive
mkdir build
cd build
cmake -GNinja -DVTK_OPENGL_HAS_OSMESA=ON  -DVTK_USE_X=OFF -DPARAVIEW_USE_QT=OFF ../paraview
ninja
./bin/pvserver

然后从实际的 ParaView 连接并在服务器上完美地渲染某些内容。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...