oui, il est possible d'exécuter un environnement de bureau X11 complet dans un conteneur LXC.
En ce moment, je le fais sur Arch Linux. Je ne dirai pas que c'est "léger" car je ne suis pas allé jusqu'à essayer de supprimer des éléments de l'installation standard du gestionnaire de packages, mais je peux confirmer que cela fonctionne très bien.
Vous devez installer tous les pilotes du noyau sur l'HÔTE ainsi que dans le conteneur. Des choses telles que le pilote graphique (j'utilise nvidia). Vous devez rendre les nœuds de périphérique dans dev accessibles à l'intérieur du conteneur en configurant votre conteneur.conf pour l'autoriser. Vous devez ensuite vous assurer que ces nœuds de périphérique sont créés à l'intérieur du conteneur (c'est-à-dire mknod).
Donc, pour répondre à votre question :OUI ça marche. Si je peux vous aider davantage ou fournir plus de détails, faites-le moi savoir.
--- informations supplémentaires fournies ---
Dans mon conteneur.../etc/inittab démarre au niveau d'exécution 5 et lance "slim"Slim est configuré pour utiliser 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
Je n'utilise pas un deuxième affichage X sur mon vt actuel, mais un complètement différent (je peux basculer entre plusieurs d'entre eux en utilisant CTRL + ALT + Fn).
Si vous n'utilisez pas slim, vous pouvez utiliser une construction comme celle-ci pour démarrer X sur un autre vt :
/usr/bin/startx -- :10 vt10
Cela démarrera X sur l'affichage :10 et le mettra sur vt10 (CTRL + ALT + F10). Ceux-ci n'ont pas besoin de correspondre mais je pense que c'est plus propre s'ils le font.
Vous avez besoin de la configuration de votre conteneur pour rendre les appareils pertinents disponibles, comme ceci :
# 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
Et vous devez créer les appareils dans votre conteneur :
# 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
J'ai également configuré manuellement les périphériques d'entrée (puisque nous n'avons pas d'inconteneur 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
Ce qui précède va dans un fichier /etc/X11/xorg.conf.d/10-input.conf
Je ne sais pas si cela vous aidera, mais bonne chance !
Oui, tu peux faire ça. Vous pouvez également utiliser lxc.mount.entry
afin que vous n'ayez pas à exécuter le script d'initialisation à l'intérieur du conteneur avec tous les mknod
commandes. Ainsi, la configuration du conteneur lxc devrait contenir quelque chose comme ceci :
lxc.cgroup.devices.allow = c 4:7 rwm
lxc.mount.entry = /dev/tty7 dev/tty7 none bind,optional,create=file
lxc.cgroup.devices.allow = c 4:8 rwm
lxc.mount.entry = /dev/tty8 dev/tty8 none bind,optional,create=file
lxc.cgroup.devices.allow = c 10:63 rwm
lxc.mount.entry = /dev/vga_arbiter dev/vga_arbiter none bind,optional,create=file
lxc.cgroup.devices.allow = c 13:* rwm
lxc.mount.entry = /dev/input dev/input none bind,optional,create=dir
lxc.cgroup.devices.allow = c 29:0 rwm
lxc.mount.entry = /dev/fb0 dev/fb0 none bind,optional,create=file
# /dev/dri/card0 AMD Graphics card
lxc.cgroup.devices.allow = c 226:0 rwm
lxc.cgroup.devices.allow = c 226:64 rwm
lxc.cgroup.devices.allow = c 226:128 rwm
lxc.mount.entry = /dev/dri dev/dri none bind,optional,create=dir
#lxc.cgroup.devices.allow = c 195:* rwm # /dev/nvidia Graphics card
#lxc.mount.entry = /dev/nvidia0 dev/nvidia0 none bind,optional,create=file
#lxc.mount.entry = /dev/nvidiactl dev/nvidiactl none bind,optional,create=file
#lxc.cgroup.devices.allow = c 116:* rwm
#lxc.mount.entry = /dev/snd dev/snd none bind,optional,create=dir
Pour configurer les périphériques d'entrée pour X, vous pouvez utiliser evdev
, ce qui est particulièrement utile si vous ne pouvez pas utiliser le xf86-input-keyboard
chauffeur. Depuis le nombre exact de event*
entrées dans le fichier de configuration (par exemple /usr/share/X11/xorg.conf.d/10-lxc-input.conf
) dépendra de ce qui se trouve dans le /dev/input/ de votre conteneur, vous pouvez utiliser un script pour en générer un :
#!/bin/bash
cat >/usr/share/X11/xorg.conf.d/10-lxc-input.conf << _EOF_
Section "ServerFlags"
Option "AutoAddDevices" "False"
EndSection
_EOF_
cd /dev/input
for input in event*
do
cat >> /usr/share/X11/xorg.conf.d/10-lxc-input.conf <<_EOF_
Section "InputDevice"
Identifier "$input"
Option "Device" "/dev/input/$input"
Option "AutoServerLayout" "true"
Driver "evdev"
EndSection
_EOF_
done
Cela devrait être suffisant pour que X fonctionne :
/usr/bin/startx -- :0 vt07
Vous pouvez également activer l'audio, soit en passant /dev/snd, soit en configurant pulseaudio via tcp ou un socket.