0

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文件如下: 在此处输入图像描述.

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

在此处输入图像描述

4

1 回答 1

2

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

如果您真的想使用 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 显示编号。

于 2014-12-21T23:03:10.267 回答