Sí, es posible ejecutar un entorno de escritorio X11 completo dentro de un contenedor LXC.
En este momento, hago esto en Arch Linux. No diré que es "ligero" ya que no he ido tan lejos como para tratar de eliminar cosas de la instalación estándar del administrador de paquetes, pero puedo confirmar que funciona muy bien.
Debe instalar cualquier controlador de kernel en el HOST, así como en el contenedor. Tales cosas como el controlador de gráficos (uso nvidia). Debe hacer que los nodos del dispositivo en dev estén accesibles dentro del contenedor configurando su container.conf para permitirlo. Luego debe asegurarse de que esos nodos de dispositivo se creen dentro del contenedor (es decir, mknod).
Entonces, para responder a su pregunta: SÍ funciona. Si puedo ayudar más o proporcionar más detalles, hágamelo saber.
--- información adicional proporcionada ---
En mi contenedor ... / etc / inittab comienza en el nivel de ejecución 5 y lanza "Slim" Slim está configurado para usar 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
No estoy usando una segunda pantalla X en mi vt actual, sino una completamente diferente (puedo cambiar entre muchas de estas usando CTRL + ALT + Fn).
Si no está usando slim, puede usar una construcción como esta para iniciar X en otro vt:
/usr/bin/startx -- :10 vt10
Eso iniciará X en la pantalla: 10 y lo pondrá en vt10 (CTRL + ALT + F10). No es necesario que coincidan, pero creo que es más ordenado si lo hacen.
Necesita la configuración de su contenedor para que los dispositivos relevantes estén disponibles, como este:
# 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
Y necesita hacer los dispositivos en su contenedor:
# 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
También configuré manualmente los dispositivos de entrada (ya que no tenemos udev en el contenedor)
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
Lo anterior va en un archivo /etc/X11/xorg.conf.d/10-input.conf
No estoy seguro si algo de eso ayudará, ¡pero buena suerte!
Si tu puedes hacerlo. También puede usarlo
lxc.mount.entry
para no tener que ejecutar el script de inicialización dentro del contenedor con todos losmknod
comandos. Entonces, la configuración del contenedor lxc debería contener algo como esto:Para configurar dispositivos de entrada para X, puede usar
evdev
, lo que es especialmente útil si no puede usar elxf86-input-keyboard
controlador. Dado que el número exacto deevent*
entradas en el archivo de configuración (p/usr/share/X11/xorg.conf.d/10-lxc-input.conf
. Ej. ) Dependerá de lo que haya en su contenedor / dev / input /, puede usar un script para generar uno:Esto debería ser suficiente para que X funcione:
También puede habilitar el audio, ya sea pasando / dev / snd, o configurando pulseaudio a través de tcp o un socket.
fuente