はじめに
VSCodeやWSL(Ubuntu)をインストールしていくと、特に何も考えずにRemote WSLが入ったりpythonが入ったりして環境が便利に整っていくのは本当に助かります。ただ、matplotlibで描画がされないという問題だけはちょっと作業が必要です。
検索するとVcXsrvを入れて対応している方が多い印象を受けましたが、このためにXServerだけを入れるのはつまらない……
というわけで、気になっていたMobaXtermを使ってみることにしました。
環境
- Windows10 Home
- WSL2 / Ubuntu 18.04 LTS
MobaXtermのインストール
MobaXtermのページ からFree版をダウンロードします。
Portable版とInstaller版のどちらを選んでもかまいませんが、私はInstaller版で入れました。
インストール時の選択肢はデフォルトのままでよいと思います。
初回起動時はWindows Firewallでブロックされますので、許可してあげてください。
MobaXtermが起動すると当たり前のようにUser sessionにWSLが表示されていました。
これをダブルクリックするとWSLが立ち上がります。すごい!
DISPLAY環境変数と接続の設定
X11はDISPLAY環境変数を参照してそこに描画情報を送ります。
WSL上でmatplotlibを使って描画すると、このDISPLAY環境変数を参照してMobaXtermで動いているXServerに描画情報を送ります。
毎回DISPLAY環境変数を設定するのも大変なので、3行目に表示されているYour DISPLAY is set to...のIPを参照して、WSLの.bashrc に設定を加えておきます。
設定するIPアドレスは各々違うと思うので、適宜変更してください。
$ echo 'export DISPLAY=192.168.xxx.yyy:0.0' >> ~/.bashrc
$ . ~/.bashrc
また、描画しようとする時にはMobaXtermが「つないで良い?」と聞いてくれます。
毎回聞かれるのが面倒な方はRemote Access Controlを無効にしておきます。
Settings → Configuration → X11 → X11 remote accessを'on demand' から 'full' にします。
他の設定にどんな意味があるか気になる方はMobaXterm Documentationを参照してください。
matplotlibで描画してみる
例はめっちゃシンプルな方がいいでしょうということで。
MobaXtermは起動したままにしておいてください。
import matplotlib.pyplot as plt
plt.plot([0, 1], [0, 2])
plt.show()