所以,我试图解决一个相当古怪的问题。 我相当新的虚拟化(我pipe理的最多的是隔离与Docker和VirtualBox的一些应用程序,这是不难做的)。 我更怀疑X显示服务器是如何工作的,而实际上是要求帮助虚拟化,尽pipe如此,我们将不胜感激。
我试图build立一个使用不同虚拟系统提供的X显示服务器的主机。 我将要让主机虚拟化两个Linux系统。
第一个Linux系统计划托pipe一个X显示服务器。 现在,这应该是相当简单的做到底,但我正在寻找解决scheme,比“这个作品”深入一点。 但是,我确实意识到其他问题。 我打算在这个虚拟系统上运行稍微graphics化的密集型应用程序。 video卡应该专用于哪台机器?
第二个系统不是特别的,但是有一个相当奇怪的networking冲突(不是一个错误,这是我必须设置的东西)。 将不会有一个X服务器或其他任何东西。
我的最终问题是:我需要为这两个实例使用实际的硬件,只需要X服务器(虚拟系统)的“主机”,还是X服务器(主机)的“客户端”? 我也想问一下,如何才能做到这一点,虽然这有点超出了问题的范围。
总结一下我对您的情况的理解:您需要在作为客户端的虚拟客户系统中播放位于另一个虚拟客户端的X服务器的高清video。
你的问题主要是你应该为哪位客人贡献你的GPU,以便尽可能地降低CPU负载,并概括地说明显示器是如何工作的。
大多数情况是GPU必须由运行X服务器的guest虚拟机来处理。 我确实看不出客户端如何直接将video帧直接发送到显卡,而不知道服务器端处理的包含窗口。
有关信息,您可能还需要考虑使用Linux framebuffer ,它可以让您直接从命令提示符下播放video,而无需X.
为了理解它是如何工作的,这里的诀窍是,在X环境中没有一种方法来播放video,根据你的平台细节,有些可能会更快,有些可能会显示某些video文件的故障,有些可能不会一切工作。
我build议您使用VLC媒体播放器继续您的testing。 它可以在大多数Linux发行版本库中使用,并允许您手动select将用于显示video的方式(从菜单进入工具 > 首选项 > video ,然后在输出下拉小部件中select您的select)。
无论使用什么方式,它总是会在X客户端(video播放器)和X服务器之间产生大量stream量,所以如果两个虚拟客户端在同一主机上运行,您最可能会更喜欢确保没有encryption发生在他们的交stream。 换句话说,你可能会离开SSH隧道,而更喜欢使用老式的X显示redirect:
在服务器主机上,确保X服务器在外部接口上进行侦听(确切的configuration步骤是依赖于分配的,如果手动修改文件确保它不会被某些自动configuration覆盖,则可能还需要修改防火墙规则)并使用xhost命令允许来宾环境的传入X连接:
$ xhost +<XCLIENT_IP>
在客户端主机上,在启动VLC之前导出$DISPLAYvariables:
$ export DISPLAY=<XSERVER_IP>:0.0 $ vlc
某些输出模式将使VLC通过X堆栈,而另一些将使VLC绕过它,并通过一些库直接与底层video硬件联系。 在你的情况下,只有前者会工作。 尝试使用错误的输出types会使VLC在打开文件时显示没有video(仍在播放声音)或崩溃。
因此,最好的候选人将是Xvideo (X扩展专门用于video回放,它取代了旧的,但仍然可用的X11输出), GLX和OpenGL (都使VLC依靠API接口OpenGL和X显示系统)。