0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

リモート/コンテナ上のX11アプリケーションをローカルで動かす方法まとめ

Last updated at Posted at 2024-08-31

やったこと

下記3つのパターンでX11アプリケーションの起動をお試ししたので、その際の手順を備忘録として残しておきます。

  • ローカルのWindowsに立ち上げたDockerコンテナ上でxeyesを実行する
  • リモートのLinux上でxeyesを実行する
  • リモートのLinuxに立ち上げたDockerコンテナ上でxeyesを実行する

Windows側の設定

Windows側のX ServerとしてVcXsrvを使用するので、こちらからVcXsrvをダウンロードしてインストールしておきます。

VcXsrcのインストールが完了したら、「スタート」から「XLaunch」を選択して起動します。
image.png

「Multiple windows」を選択して「次へ」をクリックします。
image.png

「Start no client」を選択して「次へ」をクリックします。
image.png

デフォルトで入れられているチェックはそのままで、「Disable access control」にチェックを入れ(※1)、「Additional parameters for VcXsrv」に-nowglを追加(※2)して「次へ」をクリックします。
image.png

※1
当初「Disable access control」にはチェックを入れてませんでしたが、リモート上でX11アプリケーションを起動した際に下記のようなエラーが発生したため、今回チェックを入れることで対処しました。

Authorization required, but no authorization protocol specified
Error: Can't open display: XXX.XXX.XXX.XXX.:0.0

※2
xeyesをお試しするだけであれば不要ですが、その他のアプリケーションの起動の際に必要となる場合があったため、一応設定しています。

「完了」をクリックすることで、設定した内容でX Serverが起動します。
「Save Configuration」をクリックすれば、今回設定した内容を設定ファイルとして出力することが出来ます。
次回起動したい場合は、ここで出力した設定ファイルをダブルクリックすることで、設定した内容でX Serverを起動することが出来ます。
image.png

X Serverの起動に成功した場合、画面右下にVcXsrvのアイコンが表示されます。
image.png

ローカルのWindowsに立ち上げたDockerコンテナ上でxeyesを実行する

まずはxeyesをインストールしたDockerイメージを作成します。
下記内容でDockerfileを作成し、ビルドしてDockerイメージを作成してください。

Dockerfile
FROM alpine

RUN apk --no-cache add bash xeyes

CMD ["/bin/bash"]

ビルドしたDockerイメージを起動します。
この時、DISPLAY環境変数にローカルのWindowsマシンのIPアドレスを設定します。

コンテナ起動
docker run --rm -it --name=xeyes --hostname=xeyes -e DISPLAY=<ローカルWindowsマシンのIPアドレス>:0.0 <イメージ名>

コンテナを起動し、コンテナ内でxeyesコマンドを実行すると、ローカルのWindowsマシン上でxeyesの画面が開きます。
image.png

リモートのLinux上でxeyesを実行する

まずは下記コマンドで、リモートのLinux上でX11Forwardingが有効化されていることを確認します。

cat /etc/ssh/sshd_config | grep -i X11Forwarding

「X11Forwarding yes」となっていれば有効化されています。
設定が無い、もしくは「X11Forwarding no」となっている場合は、/etc/ssh/sshd_configに「X11Forwarding yes」の設定を追加した後、sshサービスを再起動してください。

次に、DISPLAY環境変数にローカルのWindowsマシンのIPアドレスで設定します。

export DISPLAY=<ローカルWindowsマシンのIPアドレス>:0.0

先ほどと同様にxeyesコマンドを実行すると、ローカルのWindowsマシン上でxeyesの画面が開きます。
image.png

リモートのLinuxに立ち上げたDockerコンテナ上でxeyesを実行する

ローカルのWindowsに立ち上げたDockerコンテナ上でxeyesを実行する で作成したDockerfileを流用して、リモートのLinux上で同様にDockerイメージを作成します。

Dockerイメージを作成したら、下記コマンドでDockerコンテナを起動してください。
--net hostオプションを追加して、ホストとなるリモートLinuxと同一ネットワークを使用するように設定するのがポイントです。

docker run --rm -it --name xeyes --hostname xeyes \
  --net host \
  -e DISPLAY=<ローカルWindowsマシンのIPアドレス>:0.0 \
  <イメージ名>

後はいつものようにxeyesコマンドを実行するれば、ローカルのWindowsマシン上でxeyesの画面が開きます。(※3)
image.png

※3
最初起動した際に、下記のようなエラーが発生しました。

Authorization required, but no authorization protocol specified

このエラーが発生した場合は、Linux上で下記コマンドを実行してみてください。

xhost + local:

参考記事

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?