Linux - LXCは、可能な限り最小のX11展開イメージを使用します。

Linux - LXCは、可能な限り最小のX11展開イメージを使用します。

今設定できますか?LXCコンテナX11機能はありますか?私は利用可能な最も軽いX11コンテナを探しています(メモリ側から)。ハードウェアアクセラレーションは利点ですが、必須ではありません。

現在利用できない、または簡単に利用できない場合は、サポートするためにどの機能を実装する必要があるかを知っていますか?

答え1

はい、LXCコンテナ内でX11デスクトップ環境全体を実行できます。

今はArch Linuxでこれをやっています。標準パッケージマネージャのインストールからアイテムを削除しようとしなかったため、「軽さ」とは言えませんが、かなりうまく動作することを確認できます。

ホストとコンテナにすべてのカーネルドライバをインストールする必要があります。たとえば、グラフィックカードドライバ(私はnvidiaを使用しています)です。コンテナ内のdevのデバイスノードへのアクセスを許可するには、Container.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

現在のvtで2番目のXモニターを使用する代わりに、まったく異なるモニターを使用します(CTRL + ALT + Fnを使用して複数のモニターを切り替えることができます)。

slimを使用していない場合は、次の設定を使用して別のvtでXを起動できます。

 /usr/bin/startx -- :10 vt10

その後、display:10でXが実行され、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 ファイルにあります。

これが役に立つかどうかはわかりませんが、幸運です!

答え2

はい、そうすることができます。コンテナ内でinitスクリプトを実行するために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用の入力デバイスを設定するには、を使用できますevdevxf86-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を渡すか、tcpまたはソケットを介してpulseaudioを設定してオーディオを有効にすることもできます。

関連情報