概要
WSLのUbuntu 20.04.2 LTSで、GUIとしてVcXsrvを使い、kivyの動作テストを行おうとしたところ、①X serverと接続できない、②OpenGLのバージョンが原因でエラーが生じる、という二つのトラブルが起きたので対策をここに記しておきます。もし参考にされる場合は自己責任で実行のほどよろしくお願いします。
結論
「.bashrc」に以下を追加で記載
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0
unset LIBGL_ALWAYS_INDIRECT
VcXsrv初期設定時、「Extra settings」で以下を実施
- 「Native opengl」のチェックを外す
- 「Additinal parameters for VcXsrv」に「-ac」と記載
詳細
①X serverと接続できない
初めは、「.bashrc」に
export DISPLAY=:0.0
LIBGL_ALWAYS_INDIRECT=1
と末尾に記入し、VcXsrv初期設定をデフォルト設定のまま使用した状態でkivyを稼働しようとしたところ、以下のようなエラーがでました。
エラー①
[INFO ] [Logger ] Record log in /※※※
[INFO ] [Kivy ] v2.0.0
[INFO ] [Kivy ] Installed at "/※※※"
[INFO ] [Python ] v3.8.5 (default, Sep 4 2020, 07:30:14)
[GCC 7.3.0]
[INFO ] [Python ] Interpreter at "/※※※"
[INFO ] [Factory ] 186 symbols loaded
[INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_pil (img_ffpyplayer ignored)
[INFO ] [Text ] Provider: sdl2
[INFO ] [Window ] Provider: sdl2
[INFO ] [Window ] Provider: x11(['window_sdl2'] ignored)
Couldn't connect to X server
調べたところ、DISPLAY変数にはHostのIPアドレスを入力する必要があり、また、VcXsrvにパブリックアクセスの許可が必要となるために、VcXsrvの初期設定時「Additinal parameters for VcXsrv」に「-ac」を加える必要があるとのことでした。
上記を参考にし、「.bashrc」の記載を
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0
LIBGL_ALWAYS_INDIRECT=1
と変更し、VcXsrvの初期設定時「Additinal parameters for VcXsrv」に「-ac」を加えたところ、X serverとは接続できるようになりましたが、第二のエラーが発生し、kivyは立ち上がりませんでした。
②OpenGLのバージョンが原因でエラーが生じる
上記の対応を行いkivyのプログラムを立ち上げようとしたところ、今度は以下のエラーが発生しました。
エラー②
[INFO ] [Logger ] Record log in /※※※
[INFO ] [Kivy ] v2.0.0
[INFO ] [Kivy ] Installed at "/※※※"
[INFO ] [Python ] v3.8.5 (default, Sep 4 2020, 07:30:14)
[GCC 7.3.0]
[INFO ] [Python ] Interpreter at "/※※※"
[INFO ] [Factory ] 186 symbols loaded
[INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_pil (img_ffpyplayer ignored)
[INFO ] [Text ] Provider: sdl2
[INFO ] [Window ] Provider: sdl2 libGL error: No matching fbConfigs or visuals found libGL error: failed to load driver: swrast
[INFO ] [GL ] Using the "OpenGL" graphics system
[INFO ] [GL ] Backend used
[INFO ] [GL ] OpenGL version <b'1.4 (4.6.0 - Build ※※※)'> [INFO ] [GL ] OpenGL vendor <b'Intel'> [INFO ] [GL ] OpenGL renderer <b'Intel(R) UHD Graphics 630'> [INFO ] [GL ] OpenGL parsed version: 1, 4 [CRITICAL] [GL ] Minimum required OpenGL version (2.0) NOT found!
OpenGL version detected: 1.4
Version: b'1.4 (4.6.0 - Build ※※※)'
Vendor: b'Intel'
Renderer: b'Intel(R) UHD Graphics 630'
Try upgrading your graphics drivers and/or your graphics hardware in case of problems.
The application will leave now.
Segmentation fault
OpenGLのバージョンが古いために稼働できないと言われているようなのでWindowsの方のOpenGLのバージョンを調べてみましたが問題ないようだったので、誤って認識されているか、Ubuntu側で別の問題が起きているようです。
このエラーについてはなかなか情報が少なかったのですが色々と検索したところ、こちらとこちらの記事にたどり着き事なきを得ました。
私の英語力と技術力的に内容はあまり理解できていないのですが、「LIBGL_ALWAYS_INDIRECT」変数の無効化、VcXsrv初期設定時「Extra settings」で「Native opengl」のチェックを外すことで解決できるようです。
これまでをまとめると、「.bashrc」の記載を以下とし、
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0
unset LIBGL_ALWAYS_INDIRECT
(「LIBGL_ALWAYS_INDIRECT=1」は削除)
また、VcXsrv初期設定時「Extra settings」で以下を実施することで、kivyプログラム稼働時にGUIが表示されるようになりました。
- 「Native opengl」のチェックを外す
- 「Additinal parameters for VcXsrv」に「-ac」と記載
参考にしたサイト
通常のGUI設定
https://qiita.com/yoshige/items/7a17bb7a3582d72a7e48
「①X serverと接続できない」について
https://github.com/microsoft/WSL/issues/4106
「②OpenGLのバージョンが原因でエラーが生じる」について
https://superuser.com/questions/1487555/how-to-troubleshoot-opengl-on-ubuntu-under-windows-10-wsl