да, можно запустить полную среду рабочего стола X11 внутри контейнера LXC.
Прямо сейчас я делаю это на Arch Linux. Я не скажу, что он «легкий», так как я не зашёл так далеко, пытаясь убрать вещи из стандартной установки менеджера пакетов, но я могу подтвердить, что он работает очень хорошо.
Вы должны установить любые драйверы ядра как на хосте, так и в контейнере. Такие вещи, как графический драйвер (я использую nvidia). Вы должны сделать узлы устройства в dev доступными внутри контейнера, сконфигурировав свой container.conf, чтобы разрешить это. Затем вам нужно убедиться, что эти узлы устройства созданы внутри контейнера (т.е. mknod).
Итак, чтобы ответить на ваш вопрос: ДА, это работает. Если я могу помочь в дальнейшем или предоставить более подробную информацию, пожалуйста, дайте мне знать.
--- предоставляется дополнительная информация ---
В моем контейнере ... / etc / inittab запускается на уровне запуска 5 и запускает "slim". Slim настроен на использование vt09:
# Path, X server and arguments (if needed)
# Note: -xauth $authfile is automatically appended
default_path /bin:/usr/bin:/usr/local/bin
default_xserver /usr/bin/X
xserver_arguments -nolisten tcp vt09
Я не использую второй дисплей X на моем текущем vt, но совершенно другой (я могу переключаться между многими из этого, используя CTRL + ALT + Fn).
Если вы не используете slim, вы можете использовать такую конструкцию, чтобы запустить X на другом vt:
/usr/bin/startx -- :10 vt10
На дисплее появится надпись «X»: 10 и поместите его на vt10 (CTRL + ALT + F10). Они не должны соответствовать, но я думаю, что лучше, если они делают.
Вам нужна конфигурация вашего контейнера, чтобы сделать доступными соответствующие устройства, например:
# XOrg Desktop
lxc.cgroup.devices.allow = c 4:10 rwm # /dev/tty10 X Desktop
lxc.cgroup.devices.allow = c 195:* rwm # /dev/nvidia Graphics card
lxc.cgroup.devices.allow = c 13:* rwm # /dev/input/* input devices
И вам нужно сделать устройства в вашем контейнере:
# display vt device
mknod -m 666 /dev/tty10 c 4 10
# NVIDIA graphics card devices
mknod -m 666 /dev/nvidia0 c 195 0
mknod -m 666 /dev/nvidiactl c 195 255
# input devices
mkdir /dev/input # input devices
chmod 755 /dev/input
mknod -m 666 /dev/input/mice c 13 63 # mice
Я также вручную настроил устройства ввода (так как у нас нет udev в контейнере)
Section "ServerFlags"
Option "AutoAddDevices" "False"
EndSection
Section "ServerLayout"
Identifier "Desktop"
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
Option "XkbLayout" "gb"
EndSection
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/input/mice"
Option "ZAxisMapping" "4 5 6 7"
EndSection
Выше приведено в файле /etc/X11/xorg.conf.d/10-input.conf
Не уверен, что все это поможет, но удачи!
Да, вы можете сделать это. Вы также можете использовать его
lxc.mount.entry
так, чтобы вам не нужно было запускать скрипт инициализации внутри контейнера со всемиmknod
командами. Таким образом, конфигурация контейнера lxc должна содержать что-то вроде этого:Для настройки устройств ввода для X вы можете использовать
evdev
, что особенно полезно, если вы не можете использоватьxf86-input-keyboard
драйвер. Поскольку точное количествоevent*
записей в файле конфигурации (например/usr/share/X11/xorg.conf.d/10-lxc-input.conf
) будет зависеть от того, что находится в вашем контейнере / dev / input /, вы можете использовать скрипт для его генерации:Этого должно быть достаточно для работы X:
Вы также можете включить звук, передавая / dev / snd или настраивая pulseaudio через tcp или через сокет.
источник