sim, é possível executar um ambiente de desktop X11 completo dentro de um contêiner LXC.
No momento, faço isso no Arch Linux. Não direi que é "leve", pois não tentei remover as coisas da instalação padrão do gerenciador de pacotes, mas posso confirmar que funciona muito bem.
Você precisa instalar quaisquer drivers de kernel no HOST e no contêiner. Coisas como o driver de gráficos (eu uso nvidia). Você precisa tornar os nós do dispositivo no dev acessíveis dentro do container, configurando o container.conf para permitir isso. Você precisa garantir que esses nós do dispositivo sejam criados dentro do contêiner (isto é, mknod).
Então, para responder à sua pergunta: SIM, ele funciona. Se eu puder ajudar mais ou fornecer mais detalhes, entre em contato.
--- informações adicionais fornecidas ---
No meu contêiner ... / etc / inittab inicia no nível 5 de execução e lança o "slim" Slim está configurado para usar o 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
Eu não estou usando um segundo monitor X no meu vt atual, mas um completamente diferente (posso alternar entre muitos deles usando CTRL + ALT + Fn).
Se você não estiver usando o slim, poderá usar uma construção como esta para iniciar o X em outra vt:
/usr/bin/startx -- :10 vt10
Isso iniciará o X no display: 10 e o colocará no vt10 (CTRL + ALT + F10). Eles não precisam corresponder, mas acho que é melhor se o fizerem.
Você precisa da configuração do contêiner para disponibilizar os dispositivos relevantes, 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
E você precisa criar os dispositivos em seu contêiner:
# 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
Também configurei dispositivos de entrada manualmente (já que não temos udev no contêiner)
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
A descrição acima em um arquivo /etc/X11/xorg.conf.d/10-input.conf
Não tenho certeza se isso ajudará, mas boa sorte!
Sim, você pode fazer isso. Você também pode usar
lxc.mount.entry
para não precisar executar o script de inicialização dentro do contêiner com todos osmknod
comandos. Portanto, a configuração do lxc container deve conter algo como isto:Para configurar dispositivos de entrada para o X, você pode usar
evdev
, o que é especialmente útil se você não puder usar oxf86-input-keyboard
driver. Como o número exato deevent*
entradas no arquivo de configuração (por exemplo/usr/share/X11/xorg.conf.d/10-lxc-input.conf
) dependerá do conteúdo do / dev / input / do contêiner, você pode usar um script para gerar um:Isso deve ser suficiente para o X funcionar:
Você também pode ativar o áudio, passando / dev / snd, ou configurando o pulseaudio via tcp ou um soquete.
fonte