web-dev-qa-db-ja.com

ウェイランドのコンテナでグラフィカルアプリケーションを実行するにはどうすればよいですか?

X11デスクトップを使用した場合、$DISPLAY変数と/tmp/X11-unixディレクトリを共有することで、Dockerコンテナーでグラフィカルアプリケーションを実行できました。例えば:

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

現在、ウェイランドを実行しているFedora 25を使用しているため、コンテナーと共有するX11インフラストラクチャはありません。コンテナでグラフィカルアプリケーションを起動してデスクトップに表示するにはどうすればよいですか? XWaylandで結ぶ方法はありますか?

16

WaylandでFedora 25を実行しているとのことですが、Gnome-Waylandデスクトップを使用していると思います。

Gnome-WaylandはXwaylandを実行してXアプリケーションをサポートします。 Xorgと同じようにXwaylandアクセスを共有できます。

コマンド例ではXAUTHORITYが欠落しており、xhostについては言及していません。 dockerのXアプリケーションがXwayland(または任意のX)にアクセスできるようにするには、この方法のいずれかが必要です。これはすべてウェイランドとは関係がないので、DockerでXアプリケーションを実行する方法について DockerコンテナーでGUIアプリケーションを実行するにはどうすればよいですか? を参照します。

簡単に言うと、xhostを使用した2つのソリューション:

  1. Xhostを介したローカルユーザーアクセスを許可:xhost +SI:localuser:$(id -un)およびdocker runオプションを使用して同様のユーザーを作成:--user=$(id -u):$(id -g)
  2. 非推奨:xhost +SI:localuser:rootを使用してXへのrootアクセスを許可する

関連Pitfall:Xは通常、共有メモリを使用します(X拡張MIT-SHM)。 Dockerコンテナは分離されており、共有メモリにアクセスできません。これにより、グリッチがレンダリングされ、RAMアクセスエラーが発生します。dockerrunオプション--ipc=Hostを使用すると、これを回避できます。IPC =名前空間。比較: https://github.com/jessfraz/dockerfiles/issues/359


XなしのdockerでWaylandアプリケーションを実行するには、Gnome-WaylandやWestonなどの実行中のWaylandコンポジターが必要です。 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で開始する必要があります


x11dockerfor X and Wayland applications in docker はオールインワンのソリューションです。また、コンテナーの分離を維持することも重要です(例のように単にホストXディスプレイを共有すると失われます)。

17
mviereck

ソムリエby Googleをおすすめします。 Wayland OR X11アプリを起動し、それらのアプリが現在のディスプレイサーバーにアクセスするためにそれらのアプリが探しているソケットを提供します。 https://chromium.googlesource .com/chromiumos/platform2/+/master/vm_tools/sommelier /

ChromeOSのCrouton/Crostiniだけでなく、どのシステムでも機能する簡単なハウツー。

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

0
dragon788