Linux - LXC; розгортання зображень з найдрібнішим можливим X11


19

чи можливо наразі встановити контейнери LXC з можливостями X11? Я з нетерпінням чекаю найлегшого доступного контейнера X11 (для пам'яті), прискорення обладнання плюс, але не суттєво.

Якщо наразі це неможливо або є доступним, чи відомо, яку функціональність потрібно ще впровадити, щоб підтримати її?

Відповіді:


15

так, можна запустити повне середовище робочого столу X11 всередині контейнера LXC.

Зараз я це роблю в Arch Linux. Я не скажу, що це "легенько", оскільки я не пішов так, щоб спробувати викреслити речі зі встановлення стандартного менеджера пакунків, але можу підтвердити, що це працює дуже добре.

Ви повинні встановити будь-які драйвери ядра як на HOST, так і в контейнер. Такі речі, як графічний драйвер (я використовую nvidia). Ви повинні зробити вузли пристроїв у програмі dev доступними всередині контейнера, налаштувавши ваш контейнер.conf, щоб дозволити це. Потім потрібно переконатися, що ці вузли пристрою створені всередині контейнера (тобто mknod).

Отже, щоб відповісти на ваше запитання: ТАК це працює. Якщо я можу допомогти чи надавати більше деталей, будь ласка, повідомте мене про це.

--- додаткова інформація надається ---

У моєму контейнері ... / etc / inittab починається з 5 рівня запуску та запускає "slim" Slim, налаштований на використання 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

Я не використовую другий X-дисплей у своєму поточному vt, але зовсім інший (я можу перемикатися між багатьма з цього, використовуючи CTRL + ALT + Fn).

Якщо ви не використовуєте slim, ви можете використовувати таку конструкцію, щоб запустити X на іншому vt:

 /usr/bin/startx -- :10 vt10

Це запустить X на дисплеї: 10 і поставить його на vt10 (CTRL + ALT + F10). Їм не потрібно відповідати, але я думаю, що це акуратніше, якщо вони є.

Вам потрібна конфігурація контейнера, щоб зробити доступними відповідні пристрої:

 # 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

І вам потрібно зробити пристрої у вашому контейнері:

 # 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

Я також налаштував пристрої введення вручну (оскільки у нас немає 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

Наведене вище у файлі /etc/X11/xorg.conf.d/10-input.conf

Не впевнений, чи допоможе щось із цього, але удачі!


Мені не вдалося змусити це працювати з нуво, або з нуво + візою. Будь-які підказки? Чи потрібно використовувати власний драйвер?
Робін Грін

Я використовую власний драйвер. Я ще нічого не пробував. Ви в ArchLinux? Я встановив xorg-xserver і nvidia на HOST, а також всередині контейнера. Потім я можу встановити, скажімо, xterm і twm всередині контейнера, щоб перевірити його. Мій щоденний робочий стіл налаштований навколо OpenBox і знаходиться всередині контейнера.
starfry

Я на Fedora. Як ви її тестуєте? Я спробував запустити X-сервер всередині контейнера на екрані: 1, який вражав невдало (хост X помер).
Робін Грін

Робін, я оновив оригінальну відповідь більш детально для вас.
starfry

2

Так, ви можете це зробити. Ви також можете використовувати lxc.mount.entryтак, що не потрібно запускати сценарій ініціалізації всередині контейнера з усіма mknodкомандами. Отже, конфігурація контейнера lxc повинна містити щось подібне:

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

Для налаштування пристроїв введення для X можна використовувати evdev , що особливо корисно, якщо ви не можете використовувати xf86-input-keyboardдрайвер. Оскільки точна кількість event*записів у конфігураційному файлі (наприклад /usr/share/X11/xorg.conf.d/10-lxc-input.conf) буде залежати від того, що знаходиться у контейнері / dev / input /, ви можете використовувати сценарій для його створення:

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

Цього має бути достатньо для роботи X:

/usr/bin/startx -- :0 vt07

Ви також можете увімкнути звук, або проходячи / dev / snd, або налаштовуючи pulseaudio через tcp або socket.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.