fishが原因でVcXsrvがError: Can't open display:を返す問題への対処法

概要

VcXsrvというのを使ってWSLからGUIを起動するための設定を行っていた。
これは、matplotlibPySimpleGUIなどを使う時に便利だ。
しかし、どれだけやっても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が呼ばれない為だ。
この辺は↓の記事を読むと良い。

blog1.mammb.com