あなたがWaylandでFedora 25を実行していると言っているように、あなたはGnome-Waylandデスクトップを使用していると思います。
Gnome-WaylandはXwaylandを実行してXアプリケーションをサポートします。Xorgで以前と同じようにXwaylandアクセスを共有できます。
あなたの例のコマンドは見逃していてXAUTHORITY、言及しませんxhost。dockerのXアプリケーションがXwayland(または任意のX)にアクセスできるようにするには、この方法のいずれかが必要です。これはすべてWaylandとは関係ないため、DockerコンテナでGUIアプリケーションを実行するにはどうすればよいですか?ドッカーでXアプリケーションを実行する方法について。
短く言えば、xhostを使用した2つのソリューション:
- xhost:
xhost +SI:localuser:$(id -un)を介したローカルユーザーアクセスを許可し、docker runオプションで同様のユーザーを作成します。--user=$(id -u):$(id -g)
- 推奨されない:Xへのrootアクセスを許可
xhost +SI:localuser:root
関連する落とし穴:Xは通常、共有メモリ(X拡張MIT-SHM)を使用します。Dockerコンテナは分離されており、共有メモリにアクセスできません。これは、レンダリングの不具合やRAMアクセスの失敗につながる可能性があります。docker run optionでこれを回避できます--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
dockerのXおよびWaylandアプリケーション用のx11dockerは、オールインワンソリューションです。また、コンテナの分離を維持することにも注意します(例のようにホストXディスプレイを共有するだけで失われます)。
/run/user/1000/wayland-0が私のデスクトップ用です。