Поскольку вы говорите, что используете Fedora 25 с Wayland, я предполагаю, что вы используете рабочий стол Gnome-Wayland.
Gnome-Wayland запускает Xwayland для поддержки приложений X. Вы можете делиться доступом к Xwayland, как и раньше, с Xorg.
Ваш пример команды отсутствует XAUTHORITY
, и вы не упоминаете xhost
. Вам нужен один из этих способов, чтобы разрешить приложениям X в Docker доступ к Xwayland (или любому X). Поскольку все это не связано с Wayland, я имею в виду Как вы можете запускать приложения с графическим интерфейсом в Docker-контейнере? о том, как запускать приложения X в докере.
Если коротко, два решения с xhost:
- Разрешите локальному пользователю доступ через xhost:
xhost +SI:localuser:$(id -un)
и создайте аналогичного пользователя с опцией запуска Docker :--user=$(id -u):$(id -g)
- Не рекомендуется: Разрешить root-доступ к X с
xhost +SI:localuser:root
Связанный подводный камень : X обычно использует разделяемую память (расширение X MIT-SHM
). Контейнеры Docker изолированы и не могут получить доступ к общей памяти. Это может привести к сбоям рендеринга и сбоям доступа к ОЗУ. Вы можете избежать этого с помощью опции запуска Docker --ipc=host
. Это влияет на изоляцию контейнера, поскольку отключает пространство имен IPC. Сравните: https://github.com/jessfraz/dockerfiles/issues/359
Для запуска Wayland- приложений в Docker без X вам нужен работающий Wayland-композитор, такой как Gnome-Wayland или Weston. Вы должны поделиться гнездом Wayland. Вы найдете его, XDG_RUNTIME_DIR
и его имя хранится в WAYLAND_DISPLAY
. Поскольку XDG_RUNTIME_DIR
доступ разрешен только его владельцу, вам нужен тот же пользователь в контейнере, что и на хосте. Пример:
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
Приложения QT5 также должны -e QT_QPA_PLATFORM=wayland
и должны запускаться сimagename dbus-launch waylandapplication
x11docker для приложений X и Wayland в Docker - это все в одном решении. Он также заботится о сохранении изоляции контейнера (которая теряется, если просто использовать общий экран X, как в вашем примере).
/run/user/1000/wayland-0
для моего персонального компьютера.