概要
VcXsrvというのを使ってWSLからGUIを起動するための設定を行っていた。
これは、matplotlibやPySimpleGUIなどを使う時に便利だ。
しかし、どれだけやってもError: Can't open display:と表示されてしまった。
結局、導入していたシェルfishの設定が問題だったことが分かり、解決した。
エラーの糸口
Error: Can't open display:の後には本来、172.17.240.1:0.0のようにディスプレイに接続するポート番号が表示されるはず。
しかし、これが表示されていなかった。
つまり、環境変数$DISPLAYに正常に値が設定されていない可能性が高い。
にも関わらずecho $DISPLAYを実行すると、ちゃんと172.17.240.1:0.0が表示される。
そこで、fishが原因なのではと思い、bashを実行後にecho $DISPLAYすると、何も表示されなかった。
どうもこれがまずそうだ。
解決方法
原因は、bashから見た時の環境変数が変わっていないことだ。
従って、~/.proifleに環境変数設定を書き読み込ませることで解決を図る。
まず、↓のコマンドを実行し、デフォルトのシェルをbashに戻す。
$ chsh -s /bin/bash
つづいて、~/.profileに↓を追記。これで環境変数設定後にfishが自動起動される。
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
exec fish
※状況によっては~/.profileではなく~/.bash_profileに書く必要がある。
これは、~/.bash_profileがある時は~/.profileが呼ばれない為だ。
この辺は↓の記事を読むと良い。