Назад | Перейти на главную страницу

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

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

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

Планируется, что первая система Linux будет содержать сервер X-дисплея. Теперь это должно быть довольно просто сделать, в конце концов, но я ищу решения, которые вникают немного глубже, чем «это работает». Однако я осознал и другие проблемы. Я намереваюсь запускать в этой виртуализированной системе приложения с небольшой интенсивностью графики. Для какой машины должна быть выделена видеокарта?

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

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

Подводя итог моему пониманию вашей ситуации: вам нужно воспроизводить 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).