![Linux——LXC;使用尽可能小的 X11 部署映像](https://linux22.com/image/2926/Linux%E2%80%94%E2%80%94LXC%EF%BC%9B%E4%BD%BF%E7%94%A8%E5%B0%BD%E5%8F%AF%E8%83%BD%E5%B0%8F%E7%9A%84%20X11%20%E9%83%A8%E7%BD%B2%E6%98%A0%E5%83%8F.png)
目前可以设置吗LXC集装箱具有 X11 功能?我期待最轻的可用 X11 容器(内存方面),硬件加速是一个优点,但不是必需的。
如果目前不可能或不容易获得,是否知道需要实现哪些功能才能支持它?
答案1
是的,可以在 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 上使用第二个 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 中
不确定这些是否有帮助,但祝你好运!
答案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 来启用音频。