自问这个问题已经有一段时间了,所以我想我提到了我们最终使用的解决方案。
劫持本地X屏幕
最后,我只是在服务器的本地X屏幕上运行了远程opengl程序。该计算机运行的是Ubuntu服务器版本,并且默认情况下未运行xserver,因此我必须设置一个xserver才能在启动时运行(我刚刚安装了Ubuntu的ubuntu-desktop程序包,用大锤杀死了一只蚊子),然后使用以下命令以root身份访问X屏幕:“ export DISPLAY =:0.0; xhost + local:”。然后,我可以SSH进入计算机,调用“ export DISPLAY =:0.0”,然后像往常一样运行我的opengl程序。坐在远程计算机上的任何人都会看到一个窗口弹出窗口,并观看我的程序运行,但是我们没有连接监视器,所以这不是问题。
使用某种形式的屏幕外渲染很重要,因为如果一个窗口被另一个窗口遮挡,则直接从屏幕上的颜色缓冲区读取像素可能会导致垃圾数据。由于您看不到X屏幕,因此很难知道是否发生了这种情况。屏幕外渲染(例如,帧缓冲对象(fbo)或pbuffer)不存在此问题。
劫持服务器的本地Xscreen并不是理想的解决方案,因此,在此过程中,我找到了一些替代方案:
虚拟帧缓冲区
Xvfb是一个选项,但是它对我不起作用,因为OpenGL不能从硬件加速中受益,并且不支持帧缓冲对象,而这是CUDA与OpenGL互操作所必需的。但是,这在不接受劫持本地屏幕或用户无法获得xhost特权的情况下可能是一个可行的选择。
虚拟GL
从VirtualGL网站:
VirtualGL是一个开源软件包,它使任何Unix或Linux远程显示软件都能够以完全3D硬件加速运行OpenGL应用程序。
这正是我想要的,并且看起来很有希望,但是我没有时间处理新的库依赖关系,因此我没有对其进行测试。我的猜测是,一旦可以对其进行编译,安装和配置,这就是理想的解决方案。这就是VirtualBox和某些VNC服务器用来支持硬件加速3D的东西。