はい、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 ディスプレイを使用していませんが、まったく別の 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 ファイルに記述
役に立つかどうかわかりませんが、頑張ってください!
はい、できます。 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 をセットアップして、オーディオを有効にすることもできます。