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


19

現在、X11機能を備えたLXCコンテナをセットアップすることは可能ですか?使用可能な最軽量のX11コンテナ(メモリ単位)、ハードウェアアクセラレーションはプラスですが、必須ではありません。

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

回答:


15

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

今のところ、Arch Linuxでこれを行っています。標準のパッケージマネージャーのインストールから削除するまでは行っていないので、「軽い」とは言いませんが、うまく機能することを確認できます。

HOSTとコンテナにカーネルドライバーをインストールする必要があります。グラフィックドライバーなど(nvidiaを使用)。container.confを許可するように設定することにより、コンテナ内でdevのデバイスノードにアクセスできるようにする必要があります。次に、それらのデバイスノードがコンテナ(つまり、mknod)内に作成されていることを確認する必要があります。

だから、あなたの質問に答えるために:はいそれは動作します。さらに支援したり、詳細を提供できる場合は、お知らせください。

---提供される追加情報---

私のコンテナでは... / etc / inittabは実行レベル5で起動し、「スリム」を起動します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

それは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ファイルにあります

どれが役立つかはわかりませんが、幸運を祈ります!


nouveauまたはnouveau + vesaでこれを機能させることはできませんでした。手がかりはありますか?独自のドライバーを使用する必要がありますか?
ロビングリーン

独自のドライバーを使用しています。私は他に何も試していません。ArchLinuxを使用していますか?ホストとコンテナ内にxorg-xserverとnvidiaをインストールしました。次に、コンテナ内にxtermとtwmをインストールしてテストします。私の日常のデスクトップはOpenBoxを中心に構成され、コンテナー内にあります。
12

私はFedoraにいます。どのようにテストしていますか?私が試したのは、画面:1のコンテナ内でXサーバーを実行することでしたが、これは劇的に失敗しました(ホストXが死にました)。
ロビングリーン

ロビン、元の回答をより詳細に更新しました。
12

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を渡すか、tcpまたはソケットを介してpulseaudioをセットアップすることで、オーディオを有効にすることもできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.