Когда я использовал рабочий стол X11, я мог запускать графические приложения в Docker-контейнерах, разделяя $DISPLAY
переменную и /tmp/X11-unix
каталог. Например:
docker run -ti -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix some:ubuntu xclock
Сейчас я нахожусь на Fedora 25 под управлением Wayland, поэтому нет инфраструктуры X11 для совместного использования с контейнером. Как я могу запустить графическое приложение в контейнере и показать его на моем рабочем столе? Есть ли какой-нибудь способ завязать в XWayland?
/run/user/1000/wayland-0
для моего персонального компьютера.Ответы:
Поскольку вы говорите, что используете Fedora 25 с Wayland, я предполагаю, что вы используете рабочий стол Gnome-Wayland.
Gnome-Wayland запускает Xwayland для поддержки приложений X. Вы можете делиться доступом к Xwayland, как и раньше, с Xorg.
Ваш пример команды отсутствует
XAUTHORITY
, и вы не упоминаетеxhost
. Вам нужен один из этих способов, чтобы разрешить приложениям X в Docker доступ к Xwayland (или любому X). Поскольку все это не связано с Wayland, я имею в виду Как вы можете запускать приложения с графическим интерфейсом в Docker-контейнере? о том, как запускать приложения X в докере.Если коротко, два решения с xhost:
xhost +SI:localuser:$(id -un)
и создайте аналогичного пользователя с опцией запуска Docker :--user=$(id -u):$(id -g)
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
доступ разрешен только его владельцу, вам нужен тот же пользователь в контейнере, что и на хосте. Пример:Приложения QT5 также должны
-e QT_QPA_PLATFORM=wayland
и должны запускаться сimagename dbus-launch waylandapplication
x11docker для приложений X и Wayland в Docker - это все в одном решении. Он также заботится о сохранении изоляции контейнера (которая теряется, если просто использовать общий экран X, как в вашем примере).
источник
x11docker --weston-xwayland imagename application
Xwayland :20 & sleep 3 && docker run -e DISPLAY=:20 -v /tmp/.X11-unix:/tmp/.X11-unix imagename application
. Xwayland покроет весь дисплей; Вы можете перемещать его с помощью <Super> <LeftMouseButton>. С x11docker:x11docker --xwayland imagename application
.xpra
когда- нибудь будет портирован на GTK3 + python3 , это обеспечит дополнительные возможности с бесшовными окнами. Невидимые настройки возможныXvfb
в контейнере. Для подробного обсуждения вы можете открыть тикет на github .Я бы порекомендовал Сомелье от Google. Он позволяет вам запускать приложения Wayland OR X11 и предоставляет сокеты, которые эти приложения ищут, чтобы получить их на текущий сервер дисплея. https://chromium.googlesource.com/chromiumos/platform2/+/master/vm_tools/sommelier/
Простые инструкции должны работать на любой системе, а не только на Crouton / Crostini на ChromeOS.
https://github.com/dnschneid/crouton/wiki/Sommelier-(A-more-native-alternative-to-xiwi)
источник