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:
- 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)
- 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_DIR
và tên của nó được lưu trữ trong WAYLAND_DISPLAY
. Vì XDG_RUNTIME_DIR
chỉ 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=wayland
và 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).
/run/user/1000/wayland-0
dành cho máy tính để bàn cá nhân của tôi.