X11デスクトップを使用した場合、$DISPLAY
変数と/tmp/X11-unix
ディレクトリを共有することで、Dockerコンテナでグラフィカルアプリケーションを実行できました。例えば:
docker run -ti -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix some:ubuntu xclock
現在、Waylandを実行しているFedora 25を使用しているため、コンテナーと共有するX11インフラストラクチャはありません。コンテナでグラフィカルアプリケーションを起動し、デスクトップに表示するにはどうすればよいですか?XWaylandで結ぶ方法はありますか?
WaylandでFedora25を実行しているとおっしゃっていますが、Gnome-Waylandデスクトップを使用していると思います。
Gnome-WaylandはXwaylandを実行してXアプリケーションをサポートします。Xorgで以前と同じようにXwaylandアクセスを共有できます。
あなたの例のコマンドは失敗XAUTHORITY
します、そしてあなたは言及しませんxhost
。Docker内のXアプリケーションがXwayland(または任意のX)にアクセスできるようにするには、この方法の1つが必要です。これはすべてWaylandとは関係がないので、DockerコンテナでGUIアプリケーションを実行するにはどうすればよいですか?を参照してください。DockerでXアプリケーションを実行する方法について。
要するに、xhostを使用した2つのソリューション:
xhost +SI:localuser:$(id -un)
dockerrunオプションを使用して同様のユーザーを作成します。--user=$(id -u):$(id -g)
xhost +SI:localuser:root
関連する落とし穴: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
dockerのXおよびWaylandアプリケーション用のx11dockerは、オールインワンソリューションです。また、コンテナーの分離を維持することも考慮します(例のように、単にホストXディスプレイを共有すると失われます)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加