課題
WSLgが有効になっていれば、Ubuntuの場合と同様の方法でElixir Desktop動作するのではないか?
Elixir Desktopのサンプルを実行してみました。
ウインドウは表示されて、動きそうなんですが、ウインドウ内にTodoアプリが表示されません。真っ白な表示でした。
解決策
次の環境変数を設定することで、動くようになります。
$ export GDK_BACKEND=x11
Vega-LiteもWSLgで表示できるようになりました。
回避策発見の経緯
WSLgでは、Vega-liteの表示も画面が真っ白で表示されませんでした。
もしかして、Elixir desktopの問題ではなく、wxWebViewの動作がおかしいのでは?
Ubuntuの場合とwx関係のインストールされれているパッケージに違いはない。
wxWebView表示する.cppプログラムを作って動かしてみる
masa@wsl-elixir:~/wx$ ./hello
WaylandCompositor requires eglBindWaylandDisplayWL, eglUnbindWaylandDisplayWL and eglQueryWaylandBuffer.
Nested Wayland compositor could not initialize EGL
このようなエラーが発生し、表示されない。やはり、wxWebViewの問題。
エラーメッセージを検索した結果、issueに回避策を発見
dbusに関するエラーの対応
この対応は実施しなくても動作します。エラー表示をでなくした場合、systemdを有効することで、でなくできます。
WSL2のubuntuのデフォルトでは動作していないです。
バージョンが古いと対応していない。以下のバージョンはOKでした。
> wsl --version
WSL バージョン: 0.70.4.0
カーネル バージョン: 5.15.68.1
WSLg バージョン: 1.0.45
MSRDC バージョン: 1.2.3575
Direct3D バージョン: 1.606.4
DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windowsバージョン: 10.0.22621.675
wsl.confを修正し、wslをshutdownする。
[boot]
systemd=true
参考
https://devblogs.microsoft.com/commandline/systemd-support-is-now-available-in-wsl/
https://x410.dev/cookbook/wsl/sharing-dbus-among-wsl2-consoles/
https://github.com/microsoft/wslg/issues/595