Linux - LXC; menyebarkan gambar dengan X11 sekecil mungkin

19

apakah saat ini memungkinkan untuk mengatur wadah LXC dengan kemampuan X11? Saya menantikan wadah X11 yang tersedia paling ringan (berdasarkan memori), akselerasi perangkat keras plus tetapi tidak penting.

Jika saat ini tidak memungkinkan, atau tersedia, apakah diketahui fungsi apa yang perlu diimplementasikan untuk mendukungnya?

lurscher
sumber

Jawaban:

15

ya dimungkinkan untuk menjalankan lingkungan desktop X11 yang lengkap di dalam wadah LXC.

Sekarang, saya melakukan ini di Arch Linux. Saya tidak akan mengatakan itu "ringan" karena saya belum melangkah jauh untuk mencoba menghapus hal-hal dari menginstal paket manajer standar tetapi saya dapat mengkonfirmasi bahwa itu berfungsi dengan sangat baik.

Anda harus menginstal driver kernel apa pun pada HOST serta dalam wadah. Hal-hal seperti driver grafis (saya menggunakan nvidia). Anda harus membuat node perangkat di dev dapat diakses di dalam wadah dengan mengkonfigurasi container.conf Anda untuk mengizinkannya. Anda kemudian perlu memastikan bahwa simpul-simpul perangkat tersebut dibuat di dalam wadah (mis. Mknod).

Jadi, untuk menjawab pertanyaan Anda: YA memang berhasil. Jika saya dapat membantu lebih jauh atau memberikan rincian lebih lanjut, harap beri tahu saya.

--- informasi tambahan disediakan ---

Dalam wadah saya ... / etc / inittab dimulai di run level 5 dan meluncurkan "slim" Slim dikonfigurasi untuk menggunakan 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

Saya tidak menggunakan tampilan X kedua pada vt saya saat ini, tetapi yang benar-benar berbeda (saya dapat beralih di antara banyak dari ini menggunakan CTRL + ALT + Fn).

Jika Anda tidak menggunakan langsing, Anda bisa menggunakan konstruksi seperti ini untuk memulai X pada vt lain:

 /usr/bin/startx -- :10 vt10

Itu akan mulai X pada layar: 10 dan menaruhnya di vt10 (CTRL + ALT + F10). Ini tidak perlu cocok tetapi saya pikir lebih baik jika mereka melakukannya.

Anda memerlukan konfigurasi wadah Anda untuk membuat perangkat yang relevan tersedia, seperti ini:

 # 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

Dan Anda perlu membuat perangkat di wadah Anda:

 # 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

Saya juga mengkonfigurasi perangkat input secara manual (karena kami tidak memiliki udev dalam wadah)

 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

Di atas terjadi dalam file /etc/X11/xorg.conf.d/10-input.conf

Tidak yakin apakah semua itu akan membantu, tetapi semoga berhasil!

starfry
sumber
Saya tidak bisa menyelesaikan ini dengan nouveau, atau dengan nouveau + vesa. Ada petunjuk? Apakah saya harus menggunakan driver berpemilik?
Robin Green
Saya menggunakan driver berpemilik. Saya belum mencoba yang lain. Apakah Anda di ArchLinux? Saya menginstal xorg-xserver dan nvidia pada HOST dan juga di dalam wadah. Saya kemudian dapat menginstal, katakanlah, xterm dan twm di dalam wadah untuk mengujinya. Desktop sehari-hari saya dikonfigurasi di sekitar OpenBox dan berada di dalam sebuah wadah.
starfry
Saya di Fedora. Bagaimana Anda mengujinya? Apa yang saya coba adalah menjalankan server X di dalam wadah di layar: 1, yang gagal secara spektakuler (host X meninggal).
Robin Green
Robin, saya sudah memperbarui jawaban aslinya dengan lebih detail untuk Anda.
Starfry
2

Ya, Anda bisa melakukannya. Anda juga dapat menggunakan lxc.mount.entrysehingga Anda tidak harus menjalankan skrip inisialisasi di dalam wadah dengan semua mknodperintah. Jadi konfigurasi lxc container harus berisi sesuatu seperti ini:

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

Untuk mengkonfigurasi perangkat input untuk X, Anda dapat menggunakan evdev, yang sangat berguna jika Anda tidak dapat menggunakan xf86-input-keyboarddriver. Karena jumlah event*entri yang tepat dalam file konfigurasi (mis. /usr/share/X11/xorg.conf.d/10-lxc-input.conf) Akan tergantung pada apa yang ada di dalam / dev / input /, Anda dapat menggunakan skrip untuk menghasilkan satu:

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

Ini seharusnya cukup bagi X untuk bekerja:

/usr/bin/startx -- :0 vt07

Anda juga dapat mengaktifkan audio, baik lewat / dev / snd, atau mengatur pulseaudio melalui tcp atau soket.

Mykola Dimura
sumber