Windows10のWSLでX11アプリケーションを実行してみた

Windows 10環境のWSL(または、Docker)上でX11アプリケーションを実行してみましたので手順をご紹介します。
2021.06.01

はじめに

データアナリティクス事業本部の藤川です。
Windows 10向けに、WSL2のGUI対応(WSLg)のプレビューが始まりました。どんな拡張になるか楽しみです。

今回は、WSLgのご紹介ではありません。オープンソースのX Serverで、WSL(WSL2でなくても構いません)に接続してみました。
ふと思い出したように、X Window Systemを使ってみたくなりました。Windows 10環境のWSL(または、Docker)上でX11アプリケーションを実行してみましたので手順をご紹介します。

概要

  • Windows 10環境のWSL(または、Docker)上でX11アプリケーションを実行します。
  • X11アプリケーション(X Client)の画面(X Server)をWindows 10上に表示します。
  • X ServerにはオープンソースのVcXsrvを使用します。

作業手順

次の通り、作業を進めます。

  1. WSLにX11をインストールします。
  2. WindowsにVcXsrvをインストールし、設定します。
  3. Windowsのファイヤーウォールを設定変更します。

構築方法(WSL)

X11をインストール

  1. WSL環境にX11をインストールします。
sudo apt install x11-apps

構築方法(Windows)

VcXsrvをインストール

  1. SourceForge.netからVcXsrvをダウンロードします。 vcxsrv-download
  2. ダウンロードしたvcxsrv-64.1.20.9.0.installer.exeファイルを実行します。
  3. Nextボタンをクリックします。 vcxsrv-install-01
  4. Installボタンをクリックします。 vcxsrv-install-02
  5. Closeボタンをクリックします。 vcxsrv-install-03
  6. VcXsrvのインストールが終了します。

VcXsrvを起動

  1. スタートメニューを開きます。
  2. VcXsrvフォルダを開き、XLaunchアイコンをクリックします。 vcxsrv-startup
  3. X Clientの開き方を指定します。ここでは、Multiple windowsを選択してみます。
  4. Display number-1にします。
  5. 次へボタンをクリックします。 vcxsrv-setup-01
  6. X Server起動時にX Clientを開くか指定します。ここでは、Start no clientを選択してみます。
  7. 次へボタンをクリックします。 vcxsrv-setup-02
  8. Extra settingsダイアログが開きます。ここでは、次の通りに設定してみます。
    項目 設定
    Clipboard チェックする
    + Primary Selection チェックする
    Native opengl チェックする
    Disable access control チェックする
    Additional parameters for VcXsrv <空欄>
  9. 次へボタンをクリックします。 vcxsrv-setup-03

  10. 完了ボタンをクリックします。 vcxsrv-setup-04
  11. VcXsrvが起動し、常駐します。タスクトレイを開くと、XLaunchアイコンが表示されます。ここで、<ホスト名>:0.0のコロンより右側がディスプレイ番号です。 vcxsrv-listen
  12. このとき、ウイルス対策ソフトがVcXsrvを検知して、起動する場合があります。ファイヤーウォールを設定変更してください。

ファイヤーウォールを設定変更

  1. Windowsのファイヤーウォール設定を確認してください。インストールされているウイルス対策アプリケーションによって設定画面が異なるため、詳細は割愛します。
  2. 6000 + ディスプレイ番号のポートが開いていることを確認します。6000番ポートが開いていれば問題ありません。(ディスプレイ番号が:1.0の場合は6000-6001)

使用方法

1.WindowsのIPアドレスを確認します。localhost127.0.0.1ではなく、WSL(または、Dockerコンテナ)から見たWindowsのIPアドレスです。
2.WSL(または、Dockerコンテナ)のターミナルで、DISPLAY環境変数に、IPアドレスディスプレイ番号を設定します。

export DISPLAY=192.168.10.11:0.0
echo $DISPLAY

3.WSL(または、Dockerコンテナ)のターミナルで、xeyes等のX11アプリケーションを実行します。

xeyes

4.Windowsのデスクトップ上に、xeyes等のX11アプリケーションが表示されます。 vcxsrv-xeyes 5.タスクトレイXLaunchアイコンにマウスオーバーすると、1 clientと表示されていますことが分かります。

さいごに

WSL2のGUI対応(WSLg)に期待していますが、現状でも、Windows上でX11アプリケーションを表示させることができます。
ポートフォワーディングを設定すれば、EC2上で稼働するX11アプリケーションの画面を、手元にあるWindowsのデスクトップに表示させることが可能です。
その座をVNCに奪われてしまっているようにも思いますが、X Server/Clientは健在です。