Linux - LXC; mümkün olan en küçük X11 ile görüntüler dağıtma


19

X11 özellikli LXC kapları kurmak şu anda mümkün mü? Ben mevcut en hafif X11 kapsayıcı (bellek açısından), donanım hızlandırma artı ama gerekli değildir.

Şu anda mümkün değilse veya halihazırda mevcut değilse, bunu desteklemek için henüz hangi işlevselliğin uygulanması gerektiği biliniyor mu?

Yanıtlar:


15

evet, bir LXC kabının içinde eksiksiz bir X11 masaüstü ortamı çalıştırmak mümkündür.

Şu anda Arch Linux'ta yapıyorum. Ben standart paket yöneticisi yükleme şeyler çıkarmaya çalışırken gitmedi gibi "hafif" demeyeceğim ama çok iyi çalıştığını onaylayabilirsiniz.

HOST ve kapsayıcıya herhangi bir çekirdek sürücüsü yüklemeniz gerekir. Grafik sürücüsü gibi şeyler (nvidia kullanıyorum). Container.conf dosyasını izin verecek şekilde yapılandırarak geliştiricideki aygıt düğümlerini kap içinde erişilebilir hale getirmeniz gerekir. Daha sonra bu aygıt düğümlerinin kap içinde oluşturulduğundan emin olmanız gerekir (örn. Mknod).

Size soruyu cevaplamak için: EVET işe yarıyor. Daha fazla yardımcı olabilir veya daha fazla bilgi verebilirsem lütfen bana bildirin.

--- sağlanan ek bilgiler ---

Benim kapsayıcıda ... / etc / inittab çalışma düzeyi 5'te başlar ve "slim" u başlatır Slim vt09 kullanacak şekilde yapılandırılmıştır:

 # 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

Geçerli vt üzerinde ikinci bir X ekran kullanmıyorum, ama tamamen farklı bir ekran (CTRL + ALT + Fn kullanarak thise birçok arasında geçiş yapabilirsiniz).

İnce kullanmıyorsanız, X'i başka bir vt'de başlatmak için böyle bir yapı kullanabilirsiniz:

 /usr/bin/startx -- :10 vt10

Ekranda X başlar: 10 ve vt10'a (CTRL + ALT + F10) yerleştirilir. Bunların eşleşmesi gerekmiyor ama bence onlar daha temiz.

İlgili aygıtları kullanılabilir duruma getirmek için kapsayıcı yapılandırmanıza ihtiyacınız vardır, örneğin:

 # 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

Ve konteynerdeki cihazları yapmanız gerekir:

 # 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

Ayrıca giriş aygıtlarını el ile yapılandırdım (kapsayıcıda udev olmadığımız için)

 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

Yukarıdakiler /etc/X11/xorg.conf.d/10-input.conf dosyasına gidiyor

Bunlardan herhangi birinin yardımcı olup olmayacağından emin değilim, ama iyi şanslar!


Bu işi nouveau veya nouveau + vesa ile çalıştıramadım. Herhangi bir ipucu var mı? Tescilli sürücüyü kullanmak zorunda mıyım?
Robin Green

Tescilli sürücüyü kullanıyorum. Başka bir şey denemedim. ArchLinux'da mısınız? HOST'a ve ayrıca konteynerin içine xorg-xserver ve nvidia kurdum. Daha sonra test etmek için kabın içine xterm ve twm kurabilirim. Günlük masaüstüm OpenBox etrafında yapılandırılmış ve bir kap içinde bulunuyor.
starfry

Fedora'dayım. Nasıl test ediyorsunuz? Ne denedim ekran üzerinde konteyner içinde bir X sunucusu çalıştırıyordu: 1, hangi muhteşem başarısız oldu (ana X öldü).
Robin Green

Robin, orijinal cevabı senin için daha ayrıntılı olarak güncelledim.
starfry

2

Evet, yapabilirsin. lxc.mount.entryKapsayıcı içindeki başlatma komut dosyasını tüm mknodkomutlarla çalıştırmak zorunda kalmamanız için de kullanabilirsiniz . Bu nedenle, lxc kabının yapılandırması aşağıdaki gibi bir şey içermelidir:

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 için giriş aygıtlarını yapılandırmak için evdev, xf86-input-keyboardsürücüyü kullanamıyorsanız özellikle yararlı olan kullanabilirsiniz . event*Yapılandırma dosyasındaki (ör. /usr/share/X11/xorg.conf.d/10-lxc-input.conf) Tam giriş sayısı, kapsayıcınızın / dev / input / dosyasındaki içeriğe bağlı olacağından, bir komut dosyası oluşturmak için bir komut dosyası kullanabilirsiniz:

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

Bu, X'in çalışması için yeterli olmalıdır:

/usr/bin/startx -- :0 vt07

Ayrıca, / dev / snd ileten veya tcp veya bir soket aracılığıyla pulseaudio ayarlayarak sesi etkinleştirebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.