问题描述
我在远程无头 ubuntu 服务器中有一个显卡。 我已经设置 nvidia-xconfig 来制作虚拟显示器。 我需要虚拟 x 服务器,而不是 xvfb,以无头运行统一游戏,但录制游戏渲染视频。 Xvfb 确实工作正常,但它不使用显卡,这使得渲染速度很慢。
如果我运行一个游戏,这在 xinit 中运行良好。
xinit ./game.x86_64
开始游戏并渲染游戏没有任何问题。
但是,当我尝试使用不同的 x 服务器同时启动多个游戏时:
xinit ./game1.x86_64 -- :0
xinit ./game2.x86_64 -- :1
这不能正确呈现。其中一个游戏(最先开始的那个)不渲染。 (根据录制的视频核对)据我所知,这是因为单个显卡只能运行一个x-server。
然后,我通过调整 xorg.conf 来设置多个屏幕并尝试
xinit ./game1.x86_64 -- :0.0
xinit ./game2.x86_64 -- :0.1
然而,由于 xinit 尝试启动一个新服务器,后者不起作用,说明已经有一个 x-server 在 X:0 运行
如果我搜索多显示器 x-server 设置,我只能找到真正的显示器设置,而我需要的是虚拟显示器设置。
有没有办法在无头服务器中启动需要屏幕的多个应用程序?
我想我需要知道的是
如果有更好的解决方案,或者我遗漏了什么,那也会很有帮助。
解决方法
我误解了 xinit 的工作原理。 我通过在后台运行 xinit 来解决这个问题(例如 tmux)
xinit
或 xinit -- :0
然后,指定要使用的显示器。当然,xorg.conf 中设置了多个监视器。 对于 unity,只导出显示环境变量就足够了。
export DISPLAY=:0.0
用于游戏 1
export DISPLAY=:0.1
用于游戏 2
日志说 unity 可以识别两个显示,但 game1 说
:0.0 display is 'display 0 (Primary display)'
而 game2 说
:0.1 display is 'display 0 (Primary display)'
我的误解是我认为 xinit 只与客户端应用程序一起使用,尽管 xinit 可以在没有任何客户端应用程序的情况下运行而只是在后台运行。