Як я можу запустити графічну програму в контейнері під Wayland?


15

Коли я використовував робочий стіл X11, я міг запускати графічні програми в контейнерах докера, обмінюючись $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?


Не впевнений, як правильно відповісти на ваше запитання (я ніколи раніше цього не робив), але в моїй системі unix доменного сокета, який використовує Wayland, є /run/user/1000/wayland-0для мого особистого робочого столу.
Братчлі

Відповіді:


16

Як ви говорите, ви використовуєте Fedora 25 разом з Wayland, я вважаю, що ви використовуєте робочий стіл Gnome-Wayland.

Gnome-Wayland запускає Xwayland для підтримки X-додатків. Ви можете поділитися доступом до Xwayland, як і раніше, з Xorg.

Ваш приклад команда пропускає XAUTHORITY, і ви не згадуєте xhost. Вам потрібен один із таких способів, щоб дозволити програмам X у докері отримати доступ до Xwayland (або будь-якого X). Оскільки все це не пов’язано з Wayland, я посилаюсь на те, як можна запускати програми GUI у контейнері docker? про те, як запустити X програми в докер.

Що стосується короткого, два рішення з xhost:

  1. Дозвольте вашому локальному користувачеві доступ через xhost: xhost +SI:localuser:$(id -un)та створіть аналогічного користувача з опцією запуску docker:--user=$(id -u):$(id -g)
  2. Відхилено: Дозволити кореневий доступ до X за допомогою xhost +SI:localuser:root

Пов'язаний Pitfall : X зазвичай використовує загальну пам'ять (розширення X MIT-SHM). Контейнери Docker ізольовані та не мають доступу до спільної пам'яті. Це може призвести до помилок візуалізації та відмов оперативної пам'яті. Ви можете уникнути цього за допомогою опції запуску докера --ipc=host. Це впливає на ізоляцію контейнера, оскільки він вимикає простір імен IPC. Порівняйте: https://github.com/jessfraz/dockerfiles/isissue/359


Для запуску додатків Wayland у докері без 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 в докер - це рішення в одному. Він також піклується про збереження ізоляції контейнера (що втрачається, якщо просто ділитися дисплеєм хоста X, як у вашому прикладі).


Що робити, якщо я не впевнений, що програма, яку я хочу запустити, - це X або Wayland? Чи можу я пройти щось загальне, щоб воно могло автоматично визначити, потрібен XWayland чи ні?
Oxwivi


1
@ShN Вестон можна запустити як клієнта в іншому композиторі Wayland. Всередині цього клієнта Weston ви можете запустити Xwayland з додатками X. З x11docker:x11docker --weston-xwayland imagename application
mviereck

1
@Shn Також ви можете запустити Xwayland безпосередньо в якості клієнта Wayland: 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.
mviereck

1
@ShN У будь-якому випадку вам потрібен X-сервер. Щоб уникнути X у хості, я надаю x11docker / xwayland . Якщо якийсь день xpraпереноситься на GTK3 + python3 , це надасть додаткові можливості за допомогою безшовних вікон. XvfbУ контейнері можливі невидимі налаштування . Для детальної дискусії ви можете відкрити випускний квиток на github .
mviereck

0

Я б рекомендував Sommelier від 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)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.