あなたが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
が私のデスクトップ用です。