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


15

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が使用するUNIXドメインソケット/run/user/1000/wayland-0が私のデスクトップ用です。
ブラッチリー16

回答:


16

あなたがWaylandでFedora 25を実行していると言っているように、あなたはGnome-Waylandデスクトップを使用していると思います。

Gnome-WaylandはXwaylandを実行してXアプリケーションをサポートします。Xorgで以前と同じようにXwaylandアクセスを共有できます。

あなたの例のコマンドは見逃していてXAUTHORITY、言及しませんxhost。dockerのXアプリケーションがXwayland(または任意のX)にアクセスできるようにするには、この方法のいずれかが必要です。これはすべてWaylandとは関係ないため、DockerコンテナでGUIアプリケーションを実行するにはどうすればよいですか?ドッカーでXアプリケーションを実行する方法について。

短く言えば、xhostを使用した2つのソリューション:

  1. xhost:xhost +SI:localuser:$(id -un)を介したローカルユーザーアクセスを許可し、docker runオプションで同様のユーザーを作成します。--user=$(id -u):$(id -g)
  2. 推奨されない: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ディスプレイを共有するだけで失われます)。


実行したいアプリがXかWaylandかわからない場合はどうなりますか?XWaylandが必要かどうかを自動的に判断できるように、私が渡すことができる一般的なものはありますか?
オックスウィビ


1
@ShN別のWaylandコンポジターでクライアントとしてWestonを実行することは可能です。このクライアントWeston内では、XアプリケーションでXwaylandを実行できます。x11dockerの場合:x11docker --weston-xwayland imagename application
mviereck

1
@Shnまた、WaylandクライアントとしてXwaylandを直接実行することもできますXwayland :20 & sleep 3 && docker run -e DISPLAY=:20 -v /tmp/.X11-unix:/tmp/.X11-unix imagename application。Xwaylandはディスプレイ全体をカバーします。<Super> <LeftMouseButton>で移動できます。x11dockerの場合:x11docker --xwayland imagename application
mviereck

1
@ShNいずれにしてもXサーバーが必要です。ホストでXを避けるために、x11docker / xwaylandを提供します。場合xpraGTK3 +へのpython3移植されたいくつかの日、それはシームレスウィンドウとのさらなる可能性を提供します。Xvfbインコンテナでは、目に見えないセットアップが可能です。詳細については、githubで問題チケットを開くことができます。
mviereck

0

GoogleのSommelierをお勧めします。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)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.