Виртуализированный X-сервер на хост-машине

Итак, я пытаюсь решить довольно странную проблему. Я довольно плохо знаком с виртуализацией (больше всего мне удалось изолировать некоторые приложения с помощью Docker и VirtualBox, что не сложно сделать). Я больше сомневаюсь в том, как работает сервер X Display, по сравнению с фактическим обращением за помощью в виртуализации, хотя это будет оценено.

Я пытаюсь настроить хост-компьютер, который использует сервер X-дисплея, предоставляемый другой виртуализированной системой. Я собираюсь сделать так, чтобы хост-машина виртуализировала две системы Linux.

Первая система Linux планируется разместить на сервере X display. В конце концов, это должно быть довольно просто сделать, но я ищу решения, которые вникнут немного глубже, чем "это работает". Однако я осознал и другие проблемы. Я намерен запускать в этой виртуализированной системе слегка интенсивные графические приложения. Какой машине должна быть выделена видеокарта?

Вторая система не будет такой особенной, но существует довольно странный сетевой конфликт (не ошибка, это то, как я должен это настроить). Там не будет X-сервер или что-нибудь еще.

Мой окончательный вопрос: нужно ли мне использовать реальное оборудование для обоих экземпляров, просто "хост" X-сервера (виртуализированная система) или просто "клиент" X-сервера (хост-компьютер)? Я также хотел бы спросить, как я мог бы добиться этого, хотя это немного выходит за рамки вопроса.

1 ответ

Подводя итог моему пониманию вашей ситуации: вам нужно воспроизводить HD-видео в виртуальной гостевой системе, действующей в качестве клиента, для X-сервера, расположенного в другом виртуализированном госте.

В основном, вы задаетесь вопросом, какому гостю вы должны выделить свой графический процессор, чтобы максимально снизить нагрузку на процессор и получить общее представление о том, как на самом деле будет работать дисплей.

Скорее всего, GPU будет обрабатываться гостем, работающим на X-сервере. Я действительно не вижу способа, как клиент мог бы отправлять видеокадры непосредственно на графическую карту, не зная ничего о содержащем окне, обработанном на стороне сервера.

Для информации вы также можете рассмотреть возможность использования кадрового буфера Linux, который может позволить вам воспроизводить видео прямо из командной строки без X вообще.

Чтобы понять, как это работает, уловка заключается в том, что не существует единого способа воспроизведения видео в среде X, и в зависимости от деталей вашей платформы некоторые могут работать быстрее, некоторые могут отображать сбои с определенными видеофайлами, некоторые - нет. работать на всех.

Я рекомендую вам использовать медиаплеер VLC для продолжения ваших тестов. Он доступен в большинстве репозиториев дистрибутивов Linux и позволяет вам вручную выбрать способ отображения видео (в меню выберите " Инструменты" > " Установки" > " Видео", затем выберите нужный вариант в раскрывающемся виджете " Вывод").

Какой бы способ ни использовался, он всегда будет генерировать большой трафик между X-клиентом (видеоплеером) и X-сервером, поэтому, если оба виртуализированных гостя работают на одном хосте, вы, скорее всего, предпочтете убедиться в отсутствии шифрования. происходит на их обмен. Другими словами, вы, скорее всего, можете не использовать SSH-туннелирование и предпочитать использовать старомодное перенаправление дисплея X:

  • На хосте сервера убедитесь, что X-сервер прослушивает внешний интерфейс (точный шаг настройки зависит от распределения, если изменение файла вручную гарантирует, что он не будет перезаписан какой-либо автоматической настройкой, вам также может понадобиться адаптировать правила брандмауэра) и разрешить входящие X-соединения из гостевой среды с помощью команды xhost:

    $ xhost +<XCLIENT_IP>
    
  • На клиентском хосте экспортируйте $DISPLAY переменная перед запуском VLC:

    $ export DISPLAY=<XSERVER_IP>:0.0
    $ vlc
    

Определенные режимы вывода заставят VLC проходить через стек X, в то время как некоторые другие заставят VLC обойти его и напрямую связаться с базовым видеооборудованием через некоторую библиотеку. В вашей ситуации будет работать только первый. Попытка использовать неправильный тип вывода приведет к тому, что VLC либо не будет отображать видео (при сохранении звука), либо завершится сбоем при открытии файла.

Поэтому лучшими кандидатами будут Xvideo (расширение X, предназначенное для воспроизведения видео, оно заменяет более старый, но все еще доступный выход X11), GLX и OpenGL (оба делают VLC полагаться на API, взаимодействующий с OpenGL и системой отображения X).

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