VNC 终端中的 vtkXOpenGLRenderWindow 错误

vtkXOpenGLRenderWindow error in a terminal in VNC

我 运行 我的工作站上有一个 vnc 服务器,并与另一台计算机连接。服务器和客户端都是运行ning Debian Jessie:

$ uname -a
Linux debian-VAIO 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt25-2+deb8u2 (2016-06-25) x86_64 GNU/Linux

为 vnc 服务器安装了 Xfce,xstartup 是:

$ cat ~/.vnc/xstartup
#!/bin/sh
xrdb $HOME/.Xresources
xsetroot -solid grey
export XKL_XMODMAP_DISABLE=1
exec startxfce4

在 ~/.bashrc 中,我添加了以下行:

export LIBGL_ALWAYS_INDIRECT=y
export LD_PRELOAD='/usr/lib/x86_64-linux-gnu/libstdc++.so.6'

目前,当我使用 ssh -X ssh 连接到服务器时,$DISPLAYlocalhost:10.0,vtk 相关命令将启动一个 X window。但是,如果在 ssh 终端中启动 vnc 服务器,登录到 xfce 并在其中打开一个终端,$DISPLAY:1.0 并且 vtk 无法启动 X window,以下消息:

Error: In /home/orobix/Desktop/vmtk-build/VTK/Rendering/OpenGL/vtkXOpenGLRenderWindow.cxx, line 394
vtkXOpenGLRenderWindow (0x2c30f10): Could not find a decent visual

Error: In /home/orobix/Desktop/vmtk-build/VTK/Rendering/OpenGL/vtkXOpenGLRenderWindow.cxx, line 394
vtkXOpenGLRenderWindow (0x2c30f10): Could not find a decent visual

Error: In /home/orobix/Desktop/vmtk-build/VTK/Rendering/OpenGL/vtkXOpenGLRenderWindow.cxx, line 394
vtkXOpenGLRenderWindow (0x2c30f10): Could not find a decent visual

Error: In /home/orobix/Desktop/vmtk-build/VTK/Rendering/OpenGL/vtkXOpenGLRenderWindow.cxx, line 613
vtkXOpenGLRenderWindow (0x2c30f10): GLX not found.  Aborting.

我认为这可能与 vnc 服务器 xstartup 中缺少 X 服务器的配置有关。但我不知道该怎么做。谁能帮我调试一下?如果需要,将提供任何进一步的信息。谢谢!

20160823更新

我接受了VirtualGL + TurboVNC的建议,安装了这两个组件。根据 http://www.virtualgl.org/vgldoc/2_1_1/#hd009001 第 6.1 部分,使用 vglserver_config 完成了一个简单的配置。然后我用 xstartup.turbovnc:

将 TurboVNC 的 vncserver 制作成 运行 xfce
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
OS=`uname -s`
exec startxfce4

在客户端,我使用TurboVNC的vncviewer连接服务器。桌面看起来与默认 vncserver 中的桌面完全不同。然后我尝试了

/opt/VirtualGL/bin/vglrun vmtkimageviewer -ifile image_volume_voi.vti

其中vmtkimageviewer应该打开一个window,但最后它给出了一个错误:

Executing vmtkimageviewer ...
X Error of failed request:  GLXBadContext
  Major opcode of failed request:  156 (GLX)
  Minor opcode of failed request:  6 (X_GLXIsDirect)
  Serial number of failed request:  17
  Current serial number in output stream:  16

不幸的是,我发现使用 ssh -X,我无法像以前那样启动 X window,尽管 $DISPLAY 仍然是 localhost:10.0。输出为:

Executing vmtkimageviewer ...
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  156 (GLX)
  Minor opcode of failed request:  3 (X_GLXCreateContext)
  Value in failed request:  0x0
  Serial number of failed request:  37
  Current serial number in output stream:  38

但我认为我更接近事实,因为它看起来像 VirtualGL 工作(?)。接下来要做什么?

简单明了,Xrdp(Xvnc 或 Xvfb)使用的 X 服务器变体根本不支持 OpenGL / GLX,因此需要 OpenGL 的程序将无法在该配置下运行。

虽然可以回退到 Mesa swrast 或 llvmpipe:http://www.mesa3d.org/llvmpipe.html

终于,我把一切都搞定了。 VirtualGL only is enough for my purpose. Just install and config as the section 6.2 & 6.3 in its user's guide。像往常一样使用默认的 vncservervncviewer,不需要 TurboVNC。当您需要 OpenGL 支持时使用 vglrun。一个修改是我应该删除 .bashrc.

中的 export LIBGL_ALWAYS_INDIRECT=y

它在我的情况下运行流畅。 @datenwolf:再次感谢您!