Как запустить несколько приложений, которым нужен 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-сервера с несколькими мониторами, я могу найти только настройку реального монитора, а мне нужна настройка виртуального монитора.
Есть ли способ запустить несколько приложений, которым нужен экран на безголовом сервере?
Я думаю, что мне нужно знать,
Способ запуска x-сервера с несколькими экранами и указания приложению использовать какой экран ИЛИ
Способ удаленного использования диспетчера окон на консоли
Если есть какие-то лучшие решения, или если я что-то пропустил, это тоже было бы очень полезно.
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 может работать без какого-либо клиентского приложения и просто работать в фоновом режиме.