Linux-LXC; 部署尽可能小的X11映像


19

当前是否可以设置具有X11功能的LXC容器?我期待有最轻巧的X11容器(在内存方面),硬件加速是一个加分,但不是必需的。

如果当前不可能或不容易获得,是否知道还需要实现哪些功能来支持它?

Answers:


15

是的,可以在LXC容器中运行完整的X11桌面环境。

现在,我在Arch Linux上执行此操作。我不会说它是“轻量级的”,因为我还没有尝试从标准软件包管理器安装中删除某些内容,但是我可以确认它确实运行良好。

您必须在HOST以及容器中安装所有内核驱动程序。诸如图形驱动程序之类的东西(我使用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在许多此显示器之间切换)。

如果您不使用苗条,则可以使用类似的构造在另一个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

不确定是否有任何帮助,但是祝您好运!


我无法与nouveau或nouveau + vesa一起使用。有什么线索吗?我必须使用专有驱动程序吗?
罗宾·格林

我正在使用专有驱动程序。我没有尝试过其他任何东西。您在使用ArchLinux吗?我在主机上以及容器内部安装了xorg-xserver和nvidia。然后,我可以在容器内安装xterm和twm进行测试。我的日常桌面是围绕OpenBox配置的,并位于容器内。
starfry 2012年

我在Fedora上。您如何测试?我试过的是在屏幕:1上的容器内运行X服务器,该服务器异常失败(主机X死亡)。
罗宾·格林

罗宾,我为您更新了更多详细的原始答案。
starfry 2012年

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。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.