Làm cách nào tôi có thể chạy một ứng dụng đồ họa trong một container dưới Wayland?


15

Khi tôi sử dụng máy tính để bàn X11, tôi có thể chạy các ứng dụng đồ họa trong các thùng chứa docker bằng cách chia sẻ $DISPLAYbiến và /tmp/X11-unixthư mục. Ví dụ:

docker run -ti -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix some:ubuntu xclock

Bây giờ, tôi đang ở Fedora 25 đang chạy Wayland, vì vậy không có cơ sở hạ tầng X11 để chia sẻ với container. Làm cách nào tôi có thể khởi chạy một ứng dụng đồ họa trong container và để nó hiển thị trên máy tính để bàn của tôi? Có cách nào để buộc trong XWayland?


Không chắc chắn làm thế nào để trả lời câu hỏi của bạn đúng cách (tôi chưa bao giờ làm điều đó trước đây) nhưng trên hệ thống của tôi, ổ cắm tên miền unix được Wayland sử dụng là /run/user/1000/wayland-0dành cho máy tính để bàn cá nhân của tôi.
Bratchley

Câu trả lời:


16

Như bạn nói bạn đang chạy Fedora 25 với Wayland, tôi giả sử bạn đang sử dụng máy tính để bàn Gnome-Wayland.

Gnome-Wayland chạy Xwayland để hỗ trợ các ứng dụng X. Bạn có thể chia sẻ quyền truy cập Xwayland như bạn đã làm trước đây với Xorg.

Lệnh ví dụ của bạn bỏ lỡ XAUTHORITY, và bạn không đề cập đến xhost. Bạn cần một trong những cách này để cho phép các ứng dụng X trong docker truy cập Xwayland (hoặc bất kỳ X) nào. Vì tất cả những điều này không liên quan đến Wayland, tôi tham khảo Làm thế nào bạn có thể chạy các ứng dụng GUI trong container docker? về cách chạy các ứng dụng X trong docker.

Nói ngắn gọn, hai giải pháp với xhost:

  1. Cho phép người dùng cục bộ của bạn truy cập qua xhost: xhost +SI:localuser:$(id -un)và tạo một người dùng tương tự với tùy chọn chạy docker:--user=$(id -u):$(id -g)
  2. Không khuyến khích: Cho phép truy cập root vào X với xhost +SI:localuser:root

Cạm bẫy liên quan : X thường sử dụng bộ nhớ dùng chung (phần mở rộng X MIT-SHM). Docker container bị cô lập và không thể truy cập bộ nhớ chia sẻ. Điều đó có thể dẫn đến kết xuất trục trặc và lỗi truy cập RAM. Bạn có thể tránh điều đó với tùy chọn chạy docker --ipc=host. Điều đó tác động đến sự cô lập container vì nó vô hiệu hóa không gian tên IPC. So sánh: https://github.com/jessfraz/dockerfiles/issues/359


Để chạy các ứng dụng Wayland trong docker mà không có X, bạn cần một nhà soạn nhạc Wayland đang chạy như Gnome-Wayland hoặc Weston. Bạn phải chia sẻ ổ cắm Wayland. Bạn tìm thấy nó trong XDG_RUNTIME_DIRvà tên của nó được lưu trữ trong WAYLAND_DISPLAY. Vì XDG_RUNTIME_DIRchỉ cho phép truy cập cho chủ sở hữu của nó, bạn cần cùng một người dùng trong vùng chứa như trên máy chủ. Thí dụ:

docker run -e XDG_RUNTIME_DIR=/tmp \
           -e WAYLAND_DISPLAY=$WAYLAND_DISPLAY \
           -v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY  \
           --user=$(id -u):$(id -g) \
           imagename waylandapplication

Các ứng dụng QT5 cũng cần -e QT_QPA_PLATFORM=waylandvà phải được bắt đầu vớiimagename dbus-launch waylandapplication


x11docker cho các ứng dụng X và Wayland trong docker là một giải pháp tất cả trong một. Nó cũng quan tâm đến việc bảo vệ cách ly container (bị mất nếu chỉ chia sẻ màn hình X của máy chủ như trong ví dụ của bạn).


Nếu tôi không chắc ứng dụng tôi muốn chạy là X hay Wayland thì sao? Có bất cứ điều gì chung chung tôi có thể vượt qua để nó có thể tự động xác định xem XWayland có cần thiết hay không?
Oxwivi


1
@ShN Có thể chạy Weston với tư cách là khách hàng trong một nhà soạn nhạc Wayland khác. Bên trong ứng dụng khách Weston này, bạn có thể chạy Xwayland với các ứng dụng X. Với x11docker:x11docker --weston-xwayland imagename application
mviereck

1
@Shn Ngoài ra, bạn có thể chạy Xwayland trực tiếp với tư cách là khách hàng của Wayland : Xwayland :20 & sleep 3 && docker run -e DISPLAY=:20 -v /tmp/.X11-unix:/tmp/.X11-unix imagename application. Xwayland sẽ bao gồm toàn bộ màn hình; bạn có thể di chuyển nó xung quanh với <Super> <LeftMouseButton>. Với x11docker : x11docker --xwayland imagename application.
mviereck 27/03/18

1
@ShN Bạn cần một máy chủ X trong mọi trường hợp. Để tránh X trên máy chủ, tôi cung cấp x11docker / xwayland . Nếu xprađược chuyển đến GTK3 + python3 một ngày nào đó, nó sẽ cung cấp thêm các khả năng với các cửa sổ liền mạch. Thiết lập vô hình là có thể với Xvfbtrong container. Để thảo luận chi tiết, bạn có thể mở một vé phát hành trên github .
mviereck

0

Tôi muốn giới thiệu Sommelier của Google. Nó cho phép bạn khởi chạy các ứng dụng Wayland HOẶC X11 và cung cấp các ổ cắm mà các ứng dụng đó đang tìm kiếm để đưa chúng vào máy chủ hiển thị hiện tại. https://chromium.googlesource.com/chromiumos/pl platform2 / + / master / vm_tools / sommelier /

Một cách đơn giản để hoạt động trên mọi hệ thống, không chỉ Crouton / Crostini trên ChromeOS.

https://github.com/dnschneid/crouton/wiki/Sommelier-(A-more-native-alternative-to-xiwi)

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.