Waylandのコンテナでグラフィカルアプリケーションを実行するには?

Waylandのコンテナでグラフィカルアプリケーションを実行するには?

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

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

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

ベストアンサー1

Waylandを使用してFedora 25を実行していると述べたように、Gnome-Waylandデスクトップを使用しているとします。

Gnome-WaylandはXwaylandを実行してXアプリケーションをサポートします。あなたは共有することができますエクスウェランドXorgを使用する前と同じようにアクセスします。

あなたの例のコマンドが欠けていてXAUTHORITY言及していませんxhost。 dockerのXアプリケーションがXwayland(またはすべてのX)にアクセスできるようにするには、次のいずれかの方法が必要です。これらすべてはウェイランドとは何の関係もないので、私の言葉はDockerコンテナでGUIアプリケーションを実行するには?DockerでXアプリケーションを実行する方法について説明します。

簡単に言えば、xhostの2つの解決策は次のとおりです。

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

関連:Xは通常共有メモリ(X拡張子MIT-SHM)を使用します。 Dockerコンテナは隔離されており、共有メモリにアクセスできません。これにより、レンダリング障害とRAMアクセスエラーが発生する可能性があります。これを防ぐには、docker runオプションを使用できます--ipc=host。これはIPC名前空間を無効にし、コンテナの分離に影響します。比較する:https://github.com/jessfraz/dockerfiles/issues/359


走るウェイランドXなしでDockerでアプリケーションを実行するには、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


x11dockerDockerのXおよびWaylandアプリケーションで動作します。オールインワンソリューションです。また、コンテナを隔離された状態に保つことにも注意を払います(あなたの例のように、ホストXディスプレイが単に共有されていると失われる可能性があります)。

おすすめ記事