Vncviewer中的OpenGL着色器异常

时间:2014-12-21 22:55:36

标签: opengl opengl-es shader compute-shader

我通过Ubuntu 12.04 64bit应用程序连接远程vncviewer。但是当我运行OpenGL应用程序时,它会显示异常信息:

    Caught exception GLShader::GLShader: GL_ARB_shader_objects not supported while initializing rendering windows

但是,如果我将显示器与远程计算机连接,它可以很好地显示OpenGL应用程序。

是否有任何解决办法使OpenGL应用程序在vncviewer的远程窗口中运行?谢谢!

更新:

在远程Ubuntu 12.04 64bit服务器中,~/.vnc/xstartup文件如下: enter image description here

VNC Viewer系统中的Windows 7 32bit客户端如下:

enter image description here

1 个答案:

答案 0 :(得分:2)

通常在Linux上,VNC服务器是Xorg X11服务器(Xvnc)的专用变体,它使用基于软件的渲染器后端并且没有GPU加速。我猜您使用的是NVidia GPU和NVidia专有驱动程序,或者采用AMD专有驱动程序的AMD GPU,因为否则Mesa softpipe实施就会启动。

如果你真的想要使用GPU,你必须将VNC转换为正在运行的X11会话,并启动x11vnc服务器。

更新

首先,要使GPU工作,X服务器必须运行并且将其输出发送到显示连接器。对不起,目前的驱动程序型号不允许纯粹的屏幕外GPU加速X11服务器;这不是硬件的限制,而只是Xorg X11服务器的实现。这也意味着,无论您将显示器连接到屏幕的人都可以看到您正在做的任何事情。至少我们可以照顾,没有人用鼠标和键盘搞砸。

首先要创建一个由此组成的自定义/etc/X11/xorg.vnc.conf

Section "ServerFlags"
    Option "AllowEmptyInput"   "true"
    Option "AutoAddDevices"    "off"
    Option "DontZap"           "false"
    Option "DontVTSwitch"      "true"
    Option "HandleSpecialKeys" "Never"
EndSection

Section "Device"
    Identifier  "DeviceGPU"
    Driver      "nvidia"
EndSection

接下来,实现一个脚本stat启动您想要在该特定X11会话中运行的所有内容。大多数情况下,这将启动x11vnc服务器然后执行到桌面环境中,例如

#!/bin/sh
x11vnc -display $DISPLAY &
exec startxfce4 # or whatever

我将向您推荐x11vnc的联机帮助页,了解如何配置要使用的身份验证。

最后你应该检查Xorg服务器二进制文件是SUID root; NVidia驱动程序仍未充分利用KMS,并依赖于以完全权限启动的X服务器。

一旦满足这些先决条件,您就可以使用

启动支持VNC的X11会话
xinit $FULL_PATH_TO_YOUR_SESSION_SCRIPT -- $DISPLAY -config xorg.vnc.conf

其中$DISPLAY是免费的X11显示号码。