Как запустить несколько приложений, которым нужен x-сервер, на безголовом сервере ubuntu?

У меня есть одна видеокарта на удаленном безголовом сервере Ubuntu. Я установил nvidia-xconfig для создания виртуального дисплея. Мне нужен виртуальный x-сервер, но не xvfb, чтобы запускать игру Unity без головы, но при этом записывать видео рендеринга игры.Xvfb работает нормально, но не использует видеокарту, что делает рендеринг очень медленным.

Это отлично работает с xinit, если я запускаю одну игру.

Запускает игру и воспроизводит геймплей без проблем.

Однако, когда я пытаюсь запустить несколько игр одновременно с разными x-серверами:

xinit ./game1.x86_64 -- :0

xinit ./game2.x86_64 -- :1

Это не отображается должным образом. Одна игра (та, что запустилась первой) не рендерится. (Проверено на записанном видео) Насколько я знаю, это связано с тем, что на одной видеокарте может работать только один x-сервер.

Затем я установил несколько экранов, изменив xorg.conf, и попытался

xinit ./game1.x86_64 -- :0.0

xinit ./game2.x86_64 -- :0.1

Однако, поскольку xinit пытается запустить новый сервер, последний не работает, сообщая, что x-сервер уже работает на X:0.

Если я ищу настройку x-сервера с несколькими мониторами, я могу найти только настройку реального монитора, а мне нужна настройка виртуального монитора.

Есть ли способ запустить несколько приложений, которым нужен экран на безголовом сервере?

Я думаю, что мне нужно знать,

  1. Способ запуска x-сервера с несколькими экранами и указания приложению использовать какой экран ИЛИ

  2. Способ удаленного использования диспетчера окон на консоли

Если есть какие-то лучшие решения, или если я что-то пропустил, это тоже было бы очень полезно.

1 ответ

Я неправильно понял, как работает xinit. Я понял это, запустив xinit без каких-либо клиентов в фоновом режиме (например, tmux).

xinitили же xinit -- :0

а затем указать, какой дисплей использовать. Конечно, несколько мониторов задаются в xorg.conf. Для единства достаточно было просто экспортировать переменную среды отображения.

export DISPLAY=:0.0для игры1

export DISPLAY=:0.1для игры2

В журнале говорится, что Unity распознает оба дисплея, но game1 говорит

:0.0 дисплей — это «дисплей 0 (основной дисплей)»

в то время как игра2 говорит

:0,1 дисплей - это «дисплей 0 (основной дисплей)»

Мое неправильное понимание заключалось в том, что я думал, что xinit используется только с клиентским приложением, хотя xinit может работать без какого-либо клиентского приложения и просто работать в фоновом режиме.

Другие вопросы по тегам