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でバインドする方法はありますか?
答え1
Waylandを使用してFedora 25を実行していると述べたように、Gnome-Waylandデスクトップを使用しているとします。
Gnome-WaylandはXwaylandを実行してXアプリケーションをサポートします。あなたは共有することができますエクスウェランドXorgを使用する前と同じようにアクセスします。
あなたの例のコマンドが欠けていてXAUTHORITY
言及していませんxhost
。 dockerのXアプリケーションがXwayland(またはすべてのX)にアクセスできるようにするには、次のいずれかの方法が必要です。これらすべてはウェイランドとは何の関係もないので、私の言葉はDockerコンテナでGUIアプリケーションを実行するには?DockerでXアプリケーションを実行する方法について説明します。
簡単に言えば、xhostの2つの解決策は次のとおりです。
- xhostを介してローカルユーザーアクセスを許可し、
xhost +SI:localuser:$(id -un)
docker runオプションを使用して同様のユーザーを作成します。--user=$(id -u):$(id -g)
- 推奨しない: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ディスプレイが単に共有されていると失われる可能性があります)。
答え2
Googleソムリエをお勧めします。これにより、Waylandまたは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)