답변:
예, LXC 컨테이너 내에서 완전한 X11 데스크탑 환경을 실행할 수 있습니다.
지금은 Arch Linux 에서이 작업을 수행합니다. 표준 패키지 관리자 설치에서 물건을 제거하려고 시도하지 않았지만 "가벼운"이라고 말하지는 않지만 잘 작동한다는 것을 확인할 수 있습니다.
컨테이너뿐만 아니라 HOST에도 커널 드라이버를 설치해야합니다. 그래픽 드라이버와 같은 것 (nvidia를 사용합니다). container.conf가이를 허용하도록 구성하여 컨테이너 내의 장치 노드를 컨테이너 내부에서 액세스 할 수 있도록해야합니다. 그런 다음 해당 장치 노드가 컨테이너 (예 : 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
X가 display : 10에서 시작하여 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를 설정하여 오디오를 활성화 할 수도 있습니다.