如何在无头 ubuntu 服务器中运行需要 x 服务器的多个应用程序?

问题描述

我在远程无头 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 设置,我只能找到真正的显示器设置,而我需要的是虚拟显示器设置。

有没有办法在无头服务器中启动需要屏幕的多个应用程序?

我想我需要知道的是

  1. 一种启动具有多个屏幕的 x-server 并告诉应用程序使用哪个屏幕或的方法

  2. 一种在控制台上远程使用 Windows 管理器的方法

如果有更好的解决方案,或者我遗漏了什么,那也会很有帮助。

解决方法

我误解了 xinit 的工作原理。 我通过在后台运行 xinit 来解决这个问题(例如 tmux)

xinitxinit -- :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 可以在没有任何客户端应用程序的情况下运行而只是在后台运行。