Answers:
是的,可以在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
不确定是否有任何帮助,但是祝您好运!
是的,你可以这么做。您还可以使用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。