리눅스-LXC; 가능한 가장 작은 X11로 이미지 배포


19

현재 X11 기능으로 LXC 컨테이너 를 설정할 수 있습니까? 가장 가볍고 사용 가능한 X11 컨테이너 (메모리 방식), 하드웨어 가속 기능이 기대되지만 필수는 아닙니다.

현재 가능하지 않거나 쉽게 사용할 수있는 경우이를 지원하기 위해 어떤 기능을 아직 구현해야하는지 알고 있습니까?

답변:


15

예, 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에 있습니다.

도움이 될지 확실하지 않지만 행운을 빕니다!


나는 nouveau 또는 nouveau + vesa 로이 작업을 수행 할 수 없었습니다. 단서가 있습니까? 독점 드라이버를 사용해야합니까?
Robin Green

독점 드라이버를 사용하고 있습니다. 나는 다른 것을 시도하지 않았습니다. 당신은 ArchLinux에 있습니까? HOST 및 컨테이너 내부에 xorg-xserver 및 nvidia를 설치했습니다. 그런 다음 컨테이너 내부에 xterm 및 twm을 설치하여 테스트 할 수 있습니다. 내 일상적인 데스크탑은 OpenBox를 중심으로 구성되며 컨테이너 안에 있습니다.
starfry

저는 페도라에 있습니다. 어떻게 테스트하고 있습니까? 내가 시도한 것은 화면의 컨테이너 내에서 X 서버를 실행하는 것입니다.
Robin Green

로빈, 원래 답변을 더 자세하게 업데이트했습니다.
starfry

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를 설정하여 오디오를 활성화 할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.