WSL2+XmingでfoamMonitorを実行するときのやり方
どうもWSL2だと表題の組み合わせでXを飛ばすとエラーになるようなので調べてみました。拙著OpenFOAMの歩き方でも残差表示に使っていますが、今後、講習会関係でもひっかかる方がいるかもしれないのでメモを残します。
1.Xmingが立ち上がっていれば終了する。
すでにXmingが立ち上がっている場合はタスクバーから終了してください。
Xmingのアイコンを右クリックしてExitを選択すると確認のウインドウが表示されるので、Exitを押してください。
2.XLaunchを使って設定を変えたXmingを立ち上げる
XLaunchはスタートメニューのXmingフォルダの中にあります。
XLaunchを起動すると設定を変更したXmingを立ち上げられます。最初の「Select display settings」は特に触らずに次に行きます。
「Select how to start Xming」の画面は何もせずに次に行きます。
Specify parameter settingsの画面になるので、ここで「No Acsess Contorol」にチェックを入れておきます。これが重要です。これにチェックを入れないとWSL側でXを飛ばしても画面が表示できません。
最後に今回の設定を保存するか聞かれますので「Save configuration」をクリックしてデスクトップあたりにxlaunchファイルを保存します。
これでWindows側の準備はできました。
以降、Xmingの軌道は先ほど保存したxlaunchファイルをクリックします。
3.WSLを起動してDISPLAY変数を設定する
これまでWSL1だと
export DISPLAY=localhost:0.0
でDISPLAY変数を設定していましたが、こちらの記事を参考にさせていただくと、WSL2からはWSL側でIPアドレスを持つようなので、localhostが使えなくなっています。しかも毎回IPアドレスが異なるようなので、先ほどの参考記事の記述をもとに次のコマンドを代わりに実行します。
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
これで毎回異なるIPアドレスでもDISPLAY変数を設定できます。
4.foamMonitorを実行
これでfoamMonitorを実行すると、残差が表示されています。
foamMonitor -l postProcessing/solverInfo/0/solverInfo.dat
まとめ
WSLのバージョン違いで大きく仕様が変わっていたので、ここにはまる方も多いようです。ややこしいようなら、WSL1に戻すのもありかと思います。WSLgでこの辺り簡単になることを期待しています。