Linux——LXC;使用尽可能小的 X11 部署映像

Linux——LXC;使用尽可能小的 X11 部署映像

目前可以设置吗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 来启用音频。

相关内容