Linux - LXC; triển khai hình ảnh với X11 nhỏ nhất có thể


19

Hiện tại có thể thiết lập các thùng chứa LXC với khả năng X11 không? Tôi đang mong đợi bộ chứa X11 nhẹ nhất (bộ nhớ thông minh), tăng tốc phần cứng là một điểm cộng nhưng không cần thiết.

Nếu hiện tại không thể, hoặc có sẵn, liệu có biết chức năng nào cần được triển khai để hỗ trợ không?

Câu trả lời:


15

có, có thể chạy một môi trường máy tính để bàn X11 hoàn chỉnh bên trong một thùng chứa LXC.

Ngay bây giờ, tôi làm điều này trên Arch Linux. Tôi sẽ không nói nó "nhẹ" vì tôi đã không cố gắng loại bỏ mọi thứ khỏi trình cài đặt trình quản lý gói tiêu chuẩn nhưng tôi có thể xác nhận rằng nó hoạt động rất tốt.

Bạn phải cài đặt bất kỳ trình điều khiển kernel nào trên HOST cũng như trong container. Những thứ như trình điều khiển đồ họa (tôi sử dụng nvidia). Bạn phải làm cho các nút thiết bị trong dev có thể truy cập được bên trong container bằng cách định cấu hình container.conf của bạn để cho phép nó. Sau đó, bạn cần đảm bảo rằng các nút thiết bị đó được tạo bên trong vùng chứa (tức là mknod).

Vì vậy, để trả lời câu hỏi của bạn: CÓ nó hoạt động. Nếu tôi có thể giúp thêm hoặc cung cấp thêm chi tiết xin vui lòng cho tôi biết.

--- thông tin bổ sung được cung cấp ---

Trong thùng chứa của tôi ... / etc / inittab bắt đầu ở cấp 5 và khởi chạy "slim" Slim được định cấu hình để sử dụng 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

Tôi không sử dụng màn hình X thứ hai trên vt hiện tại của mình, nhưng là một màn hình hoàn toàn khác (tôi có thể chuyển đổi giữa nhiều thứ này bằng cách sử dụng CTRL + ALT + Fn).

Nếu bạn không sử dụng slim, bạn có thể sử dụng cấu trúc như thế này để bắt đầu X trên một vt khác:

 /usr/bin/startx -- :10 vt10

Điều đó sẽ bắt đầu X trên màn hình: 10 và đưa nó lên vt10 (CTRL + ALT + F10). Chúng không cần phải khớp nhưng tôi nghĩ nó gọn hơn nếu có.

Bạn cần cấu hình bộ chứa của mình để cung cấp các thiết bị có liên quan, như thế này:

 # 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

Và bạn cần phải làm cho các thiết bị trong thùng chứa của bạn:

 # 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

Tôi cũng đã cấu hình thủ công các thiết bị đầu vào (vì chúng tôi không có udev trong container)

 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

Ở trên có một tập tin /etc/X11/xorg.conf.d/10-input.conf

Không chắc chắn nếu có điều đó sẽ giúp, nhưng chúc may mắn!


Tôi đã không thể làm việc này với nouveau hoặc với nouveau + vesa. Bất kì manh mối nào? Tôi có phải sử dụng trình điều khiển độc quyền?
Robin Green

Tôi đang sử dụng trình điều khiển độc quyền. Tôi chưa thử thứ gì khác. Bạn có trên ArchLinux không? Tôi đã cài đặt xorg-xserver và nvidia trên HOST và cả bên trong container. Sau đó tôi có thể cài đặt, giả sử, xterm và twm bên trong container để kiểm tra nó. Máy tính để bàn hàng ngày của tôi được cấu hình xung quanh OpenBox và nằm trong một thùng chứa.
starfry

Tôi đang ở Fedora. Làm thế nào bạn đang thử nghiệm nó? Những gì tôi đã thử là chạy một máy chủ X bên trong container trên màn hình: 1, nó đã thất bại một cách ngoạn mục (máy chủ X đã chết).
Robin Green

Robin, tôi đã cập nhật câu trả lời ban đầu với nhiều chi tiết hơn cho bạn.
starfry

2

Đúng, bạn có thể làm điều đó. Bạn cũng có thể sử dụng lxc.mount.entryđể không phải chạy tập lệnh khởi tạo bên trong vùng chứa với tất cả các mknodlệnh. Vì vậy, cấu hình của lxc chứa nên chứa một cái gì đó như thế này:

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

Để định cấu hình thiết bị đầu vào cho X, bạn có thể sử dụng evdev, điều này đặc biệt hữu ích nếu bạn không thể sử dụng xf86-input-keyboardtrình điều khiển. Vì số lượng event*mục nhập chính xác trong tệp cấu hình (ví dụ /usr/share/X11/xorg.conf.d/10-lxc-input.conf) sẽ phụ thuộc vào nội dung trong bộ chứa / dev / input / của bạn, nên bạn có thể sử dụng tập lệnh để tạo tập lệnh:

#!/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

Điều này là đủ để X hoạt động:

/usr/bin/startx -- :0 vt07

Bạn cũng có thể bật âm thanh, truyền / dev / snd hoặc thiết lập pulseaudio qua tcp hoặc ổ cắm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.