Linux - LXC; การปรับใช้ภาพด้วย X11 ที่น้อยที่สุด


19

เป็นไปได้หรือไม่ที่จะติดตั้งตู้คอนเทนเนอร์ LXCด้วยความสามารถของ X11 ฉันตั้งตารอคอยภาชนะ X11 ที่มีน้ำหนักเบาที่สุด (หน่วยความจำที่ชาญฉลาด) การเร่งความเร็วด้วยฮาร์ดแวร์ a บวก แต่ไม่จำเป็น

หากปัจจุบันยังไม่สามารถใช้งานได้หรือพร้อมใช้งานจะทราบได้หรือไม่ว่าฟังก์ชันใดที่จำเป็นต้องมีในการใช้งานเพื่อรองรับ

คำตอบ:


15

ใช่มันเป็นไปได้ที่จะเรียกใช้สภาพแวดล้อมเดสก์ทอป X11 ที่สมบูรณ์ภายในคอนเทนเนอร์ LXC

ตอนนี้ฉันทำสิ่งนี้บน 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

ฉันไม่ได้ใช้จอแสดงผล X ตัวที่สองบน vt ปัจจุบันของฉัน แต่เป็นจอที่แตกต่างไปจากเดิมอย่างสิ้นเชิง

หากคุณไม่ได้ผอมคุณสามารถใช้โครงสร้างแบบนี้เพื่อเริ่ม X บน vt อื่น:

 /usr/bin/startx -- :10 vt10

ที่จะเริ่ม X บนหน้าจอ: 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

ไม่แน่ใจว่าสิ่งใดจะช่วยได้ แต่ขอให้โชคดี!


ฉันไม่สามารถทำงานกับนูโวได้หรือนูโว + เวซา เบาะแสใด ๆ ฉันต้องใช้ไดรเวอร์ที่เป็นกรรมสิทธิ์หรือไม่?
Robin Green

ฉันใช้ไดรเวอร์ที่เป็นกรรมสิทธิ์ ฉันไม่ได้ลองอย่างอื่น คุณอยู่ใน ArchLinux หรือไม่ ฉันติดตั้ง xorg-xserver และ nvidia บน HOST และภายในคอนเทนเนอร์ ฉันสามารถติดตั้งพูด xterm และ twm ภายในคอนเทนเนอร์เพื่อทดสอบ เดสก์ท็อปประจำวันของฉันถูกกำหนดค่าไว้รอบ OpenBox และอยู่ภายในคอนเทนเนอร์
starfry

ฉันอยู่ที่ Fedora คุณทดสอบมันอย่างไร สิ่งที่ฉันพยายามเรียกใช้คือเซิร์ฟเวอร์ X ภายในคอนเทนเนอร์บนหน้าจอ: 1 ซึ่งล้มเหลวอย่างงดงาม (โฮสต์ X เสียชีวิต)
Robin Green

Robin ฉันได้อัพเดทคำตอบดั้งเดิมพร้อมรายละเอียดเพิ่มเติมสำหรับคุณแล้ว
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 หรือตั้งค่า pulseaudio ผ่าน tcp หรือซ็อกเก็ต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.