はじめに
python3にて、matplotlib.pyplotおよびseabornをインポートしようとしたところ、エラー等が出ないうえに、出力も応答しないといった状況が発生しました。
#環境
wsl2
Ubuntu 20.04.2
GUI - VcXsrv
#やったこと
こちらのサイトにおける、VcXsrvの自動起動設定およびWSL上のディスプレイの設定のセクションを参考にしてwsl環境でのディスプレイ設定を行いました。ありがとうございます。
https://qiita.com/ryoi084/items/0dff11134592d0bb895c
VcXsrvのPC起動時の自動起動方法については説明を割愛します。
wsl環境下でのディスプレイ設定を行うにあったって、コマンドプロンプトを起動し、ipconfig
コマンドを実行、イーサネット(wsl)のIPv4アドレスをコピーします。
~/.bashrc
に以下のように加筆していきます。aaa~dddにはipconfig
にてコピーしたIPアドレスが入ります。
export DISPLAY=aaa.bbb.ccc.ddd:0
そして、wslを再起動、ここまでやってみました。
#依然としてトラブルが起こったが解決した
以上のことをやってみましたが、解決できるとき・できないときがありました。
コマンドにてexport DISPLAY=aaa.bbb.ccc.ddd:0
と実行したときに解決できたので、おそらく起動時のDISPLAYのアドレス設定に間違った値が入っているのではないかと考えました。
そこで、wslを再起動し、printenv DISPLAY
でDISPLAYのパスを確認したところ、
8.8.8.8:0
このように表示されました。原因がわかりました。
以前、wslのプロキシ設定の際、DNSサーバーの設定でうまくいかなかったとき、とりあえず/etc/resolv.conf
をgoogleのDNSを用いてnameserver 8.8.8.8
にしておりました。
どういう理由かわかりませんが、この/etc/resolv.conf
を参照してDISPLAYを設定していたため、VcXsrvへのパスが通らなかったと予想されます。
ということで、/etc/resolv.conf
を以下のように直しました。
nameserver aaa.bbb.ccc.ddd
wslを再起動し、再度python3にてmatplotlib.pyplotおよびseabornをインポートしたところ、安定して応答がみられました。
以上で今回のトラブルとその解決方法でした。