GNU/Linux >> Linux Esercitazione >  >> Linux

Linux-LXC; distribuzione di immagini con X11 il più piccolo possibile

sì, è possibile eseguire un ambiente desktop X11 completo all'interno di un contenitore LXC.

In questo momento, lo faccio su Arch Linux. Non dirò che è "leggero" in quanto non sono arrivato al punto di provare a eliminare le cose dall'installazione standard del gestore di pacchetti, ma posso confermare che funziona molto bene.

Devi installare tutti i driver del kernel sull'HOST e nel contenitore. Cose come il driver grafico (io uso nvidia). Devi rendere i nodi del dispositivo in dev accessibili all'interno del contenitore configurando il tuo container.conf per consentirlo. Devi quindi assicurarti che quei nodi di dispositivo siano creati all'interno del contenitore (ad esempio mknod).

Quindi, per rispondere alla tua domanda:SÌ, funziona. Se posso aiutarti ulteriormente o fornire maggiori dettagli, fammelo sapere.

--- ulteriori informazioni fornite ---

Nel mio contenitore.../etc/inittab si avvia nel livello di esecuzione 5 e avvia "slim"Slim è configurato per utilizzare 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

Non sto usando un secondo display X sul mio vt attuale, ma uno completamente diverso (posso passare da uno all'altro usando CTRL+ALT+Fn).

Se non stai usando slim, puoi usare un costrutto come questo per avviare X su un altro vt:

 /usr/bin/startx -- :10 vt10

Ciò avvierà X sul display :10 e lo metterà su vt10 (CTRL+ALT+F10). Non è necessario che questi corrispondano, ma penso che sia più ordinato se lo fanno.

Hai bisogno della configurazione del tuo contenitore per rendere disponibili i dispositivi pertinenti, in questo modo:

 # 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 devi creare i dispositivi nel tuo contenitore:

 # 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

Ho anche configurato manualmente i dispositivi di input (poiché non abbiamo udev incontainer)

 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

Quanto sopra va in un file /etc/X11/xorg.conf.d/10-input.conf

Non sono sicuro che tutto ciò possa essere d'aiuto, ma buona fortuna!


Si, puoi farlo. Puoi anche usare lxc.mount.entry in modo da non dover eseguire lo script di inizializzazione all'interno del contenitore con tutti i mknod commands.Quindi la configurazione del contenitore lxc dovrebbe contenere qualcosa del genere:

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

Per configurare i dispositivi di input per X, puoi usare evdev , che è particolarmente utile se non puoi usare il xf86-input-keyboard autista. Poiché il numero esatto di event* voci nel file di configurazione (ad es. /usr/share/X11/xorg.conf.d/10-lxc-input.conf ) dipenderà da cosa c'è nel /dev/input/ del tuo contenitore, potresti usare uno script per generarne uno:

#!/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

Questo dovrebbe essere sufficiente per far funzionare X:

/usr/bin/startx -- :0 vt07

Puoi anche abilitare l'audio, passando /dev/snd o impostando pulseaudio tramite tcp o un socket.


Linux
  1. Dietro le quinte con i container Linux

  2. Comando JQ in Linux con esempi

  3. Linux – Lxc; Distribuire immagini con il più piccolo possibile X11?

  4. Come creare e avviare container LXC Linux con i comandi LXC

  5. È possibile interrompere l'arresto su Linux?

Comando wc Linux con esempi

Comando IP Linux con esempi

15 Comando Linux ps con esempi

Configura il contenitore Linux con LXC su CentOS 7 / RHEL 7

Tutorial Docker – Introduzione a Docker in Linux

Trova e imposta bellissimi sfondi per desktop Linux con Fondo