지금 설정할 수 있나요?LXC 컨테이너X11 기능이 있습니까? 저는 사용 가능한 가장 가벼운 X11 컨테이너를 찾고 있습니다(메모리 측면에서). 하드웨어 가속은 장점이지만 필수 사항은 아닙니다.
현재 가능하지 않거나 쉽게 사용할 수 없는 경우 이를 지원하려면 어떤 기능을 구현해야 하는지 알고 있습니까?
답변1
예, LXC 컨테이너 내에서 전체 X11 데스크톱 환경을 실행할 수 있습니다.
지금은 Arch Linux에서 이 작업을 수행하고 있습니다. 표준 패키지 관리자 설치에서 항목을 제거하려고 시도하지 않았기 때문에 "가벼움"이라고 말할 수는 없지만 꽤 잘 작동한다는 것을 확인할 수 있습니다.
호스트와 컨테이너에 모든 커널 드라이버를 설치해야 합니다. 예를 들어 그래픽 카드 드라이버(저는 nvidia를 사용합니다)입니다. 컨테이너 내 dev의 장치 노드에 대한 액세스를 허용하려면 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을 사용하여 여러 모니터 간에 전환할 수 있습니다).
slim을 사용하지 않는 경우 다음과 같은 구성을 사용하여 다른 vt에서 X를 시작할 수 있습니다.
/usr/bin/startx -- :10 vt10
그러면 display: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
예, 그렇게 할 수 있습니다. 또한 컨테이너 내부에서 init 스크립트를 실행하기 위해 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를 설정하여 오디오를 활성화할 수도 있습니다.