Windows11でWSL2をインストールした場合はマイクロソフトのこの記事に従って設定を行うとWSL2上でLinuxのGUIアプリが使えるようになります。

ここから下はWindows10で実験した情報です。WSLでGUIを使う方法はいくつかあるようなので一例として見てください。
この記事では Windows の Linux 環境(WSL)でグラフィック機能が使えるように設定します。少し高度な内容になるので必要になったときに設定すれば良いです。
Before
Windows WSL で次のプログラムを実行してみてください。グラフを表示する簡単な Python のプログラムです。
- graph.py
1 2 3 4 5 6 7 8 |
import matplotlib.pyplot as plt number = [1, 2, 3, 4, 5] price = [100, 250, 380, 500, 700] plt.plot(number, price) plt.title("price / number") plt.xlabel("number") plt.ylabel("price") plt.show() |
1 2 |
$ pip3 install matplotlib $ python3 graph.py |
Mac のターミナルでは上記のサンプルプログラムは正常に動いてグラフが表示されたはずです。Mac ではこの記事の設定は不要です。
VcXsrv のインストール
下記の URL にアクセスして VcXsrv Windows X Server をダウンロードしてください。
https://sourceforge.net/projects/vcxsrv/files/vcxsrv/
たくさんファイルがありますが緑色の [Download Latest Version] というボタンをクリックすればダウンロードされます。
ダウンロードしたらそのファイルを実行してインストールします。設定はすべてデフォルトで構いませんので [Next] > [Install] と進んでください。インストールが完了したらデスクトップにこのようなアイコンが2つ出来ているはずです。ひとつは VcXsrv を起動するためのショートカット、もうひとつは VcXsrv を指定した設定内容で起動するためのアイコンです。
WSL(Ubuntu)を起動して設定を続けます。次のコマンドを実行して Ubuntu 上で Xserver をインストールします。
1 |
$ sudo apt install x11-apps x11-utils x11-xserver-utils dbus-x11 |
ホームディレクトリに戻って .bash_profile というファイルがあるかどうか確認してください。隠しファイルなので ” ls -la” とオプションを指定しなければ表示されません。
1 2 |
$ cd ~ $ ls -la .bash_profile |
.bash_profile が既にあれば次の1行を追加してください。ファイルが無ければ新しく作ってください。編集は vi エディタ等を使う必要があります。
- .bash_profile
1 |
export DISPLAY=localhost:0.0 |
1 |
$ xeyes |
1 2 |
$ xeyes Error: Can't open display: localhost:0.0 |
Windows のコントロールパネルを開いて [ネットワークとインターネット] > [ネットワークと共有センター] > [アダプターの設定の変更] に進みます。”vEthernet(WSL)” というネットワーク接続があります。
これは WSL2 が内部的に接続しているネットワークデバイスを Windows 側で認識しているものです。このアイコンをダブルクリックして、さらに [詳細(E)…] を見てください。
ここの “IPv4アドレス” という項目の値を確認して覚えておいてください。後で使います。
WSL に戻って必要なライブラリをインストールします。
1 2 3 |
$ sudo apt update $ sudo apt install libgl1-mesa-dev xorg-dev python3-tk tk-dev $ sudo apt install net-tools |
先ほど編集した .bash_profile をもう一度編集して次のように変更してください。異なる情報があるので2通りの説を書いておきます。
- WSL2用の .bash_profile(1)
1 |
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0 |
- WSL2用の .bash_profile(2)
1 |
export DISPLAY=$(route | grep default | awk '{print $2}'):0 |
次にファイアウォールの設定を行います。WSL 側から “vEthernet(WSL)” へのアクセスを Windows 側のファイアウォールが遮断してしまうのを回避するためです。Windows のコントロールパネルから [システムとセキュリティ] > [Windows Defender ファイアウォール] > [Windows Defender ファイアウォールを介したアプリまたは機能を許可] に進みます。[設定の変更] というボタンを押すと変更できるようになりますので、リストの中から “VcXsrv windows xserver” を探して(2件あれば両方とも)プライベートとパブリックの両方にチェックを入れ、[OK] ボタンで確定します。これで VcXsrv と Windows の間で通信できるようになりました。
ウイルス対策ソフトをインストールしている場合は、そのソフトの使用法に従ってファイヤウォールを設定してください。工大の情報センターが提供している ESET Endpoint Security Advanced をインストールしている場合はこのようにします。
- ESETの設定方法
ESETの [設定] > [ネットワーク] > [ファイヤーウォール] > [設定] [基本] > [フィルタリングモード] を [対話モード] にする。
xeyesを動かすと許可するかどうか判断を求められるので [ルールを作成し、永久に記憶] にチェックして [許可] を押す。
この操作の間に他のトラフィックについて警告が出た場合は [毎回確認] を選択して [許可] を押しておく。最後に、先ほど変更した [フィルタリングモード] をデフォルトの [ルール付き自動モード] に戻しておく。
Windows上でデスクトップの VcXsrv のアイコン(名前は “XLaunch”)をダブルクリックします。手順は次の通りです。
- “Multiple windows” を選択(デフォルトのまま)、[次へ(N)>]
- “Start no client” を選択(デフォルトのまま)、[次へ(N)>]
- “Disable access control” をチェック(全部のチェックボックスにチェックが入る)、[次へ(N)>]
- ここで [Save configuration] を押すと、以上の設定内容を保存できます。デスクトップにアイコンを置いておけば、次回以降同じ設定で起動できます。そして、[完了] を押す。
VcXsrv が起動するとタスクトレイに “X” のアイコンが表示されます。複数起動してしまった場合は、アイコンをダブルクリックして [Exit] ボタンですべて終了し、正しく起動しなおしてください。
失敗したコマンドをもう一度 WSL で実行してみましょう。
1 |
$ xeyes |
目玉のアイコンが出れば成功です。
After
VcXsrv を起動した状態で、冒頭にやったサンプルプログラム graph.py をもう一度やってみましょう。
1 |
$ python3 graph.py |
今度はグラフが表示されたはずです。
コメント