概要
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
が呼ばれない為だ。
この辺は↓の記事を読むと良い。