GNU/Linux >> Znalost Linux >  >> Linux

Linux - LXC; nasazení obrazů s nejmenší možnou X11

ano, je možné spustit kompletní desktopové prostředí X11 v kontejneru LXC.

Právě teď to dělám na Arch Linuxu. Neřeknu, že je to "lehké", protože jsem nezašel tak daleko, abych se pokusil odstranit věci ze standardní instalace správce balíčků, ale mohu potvrdit, že to funguje velmi dobře.

Všechny ovladače jádra musíte nainstalovat na HOST i do kontejneru. Takové věci jako ovladač grafiky (používám nvidii). Musíte zpřístupnit uzly zařízení ve vývojáři uvnitř kontejneru tak, že nakonfigurujete soubor container.conf tak, aby to umožňoval. Poté se musíte ujistit, že tyto uzly zařízení jsou vytvořeny uvnitř kontejneru (tj. mknod).

Takže, abych odpověděl na vaši otázku:ANO, funguje to. Pokud mohu ještě pomoci nebo poskytnout další podrobnosti, dejte mi prosím vědět.

--- poskytnuty další informace ---

V mém kontejneru.../etc/inittab se spustí v úrovni běhu 5 a spustí "slim"Slim je nakonfigurován pro použití 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

Na svém aktuálním vt nepoužívám druhý displej X, ale úplně jiný (mezi mnoha z nich mohu přepínat pomocí CTRL+ALT+Fn).

Pokud nepoužíváte slim, můžete použít konstrukci jako je tato ke spuštění X na jiném vt:

 /usr/bin/startx -- :10 vt10

Tím se spustí X na displeji :10 a přepne se na vt10 (CTRL+ALT+F10). Nemusí se shodovat, ale myslím, že je to lepší, pokud ano.

Ke zpřístupnění příslušných zařízení potřebujete konfiguraci kontejneru, jako je tento:

 # 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

A musíte vytvořit zařízení ve svém kontejneru:

 # 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

Také jsem ručně nakonfiguroval vstupní zařízení (protože nemáme 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

Výše uvedené se nachází v souboru /etc/X11/xorg.conf.d/10-input.conf

Nejsem si jistý, jestli něco z toho pomůže, ale hodně štěstí!


Ano, můžete to udělat. Můžete také použít lxc.mount.entry abyste nemuseli spouštět inicializační skript uvnitř kontejneru se všemi mknod commands. Takže konfigurace kontejneru lxc by měla obsahovat něco takového:

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

Ke konfiguraci vstupních zařízení pro X můžete použít evdev , což je zvláště užitečné, pokud nemůžete použít xf86-input-keyboard Řidič. Od přesného počtu event* položky v konfiguračním souboru (např. /usr/share/X11/xorg.conf.d/10-lxc-input.conf ) bude záviset na tom, co je ve vašem kontejneru /dev/input/, můžete jej vygenerovat pomocí skriptu:

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

To by mělo stačit, aby X fungoval:

/usr/bin/startx -- :0 vt07

Můžete také povolit zvuk, buď předáním /dev/snd, nebo nastavením pulseaudio přes tcp nebo socket.


Linux
  1. Zákulisí s linuxovými kontejnery

  2. Nastavte Linux Container s LXC na Ubuntu 16.04

  3. Je možné přerušit vypnutí na Linuxu?

  1. JQ Command v Linuxu s příklady

  2. Linux – Lxc; Nasazení obrázků pomocí nejmenšího možného X11?

  3. Linux – Proč mě Linux nenechá hrát s /dev/dsp?

  1. Nainstalujte Linux pomocí LVM

  2. Jak vytvořit a spustit kontejnery LXC Linux pomocí příkazů LXC

  3. V Linuxu je možné použít .dll