web-dev-qa-db-ja.com

Linux-LXC;可能な限り小さいX11でイメージを展開する

現在、X11機能で LXCコンテナ をセットアップすることは可能ですか?利用可能な最軽量のX11コンテナー(メモリの観点から)、ハードウェアアクセラレーションに加えて、必須ではありませんが楽しみです。

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

19
lurscher

はい、LXCコンテナ内で完全なX11デスクトップ環境を実行することは可能です。

現在、私はArch Linuxでこれを行っています。標準のパッケージマネージャーのインストールから内容を取り除こうとしているわけではないので、「軽い」とは言いませんが、非常にうまく機能していることを確認できます。

カーネルドライバーは、ホストとコンテナーの両方にインストールする必要があります。グラフィックス・ドライバーなど(私はnvidiaを使用しています)。許可するようにcontainer.confを構成して、コンテナー内でdevのデバイスノードにアクセスできるようにする必要があります。次に、それらのデバイスノードがコンテナー内に作成されていることを確認する必要があります(つまり、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

ディスプレイ: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ファイルに入っています

それが役立つかどうかはわかりませんが、頑張ってください!

15
starfry

はい、できます。 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を渡すか、tcpまたはソケット経由でPulseAudioを設定して、オーディオを有効にすることもできます。

2
Mykola Dimura