環境
OS:Windows11
オンボードのグラフィックス:Intel UHD Graphics
wsl2のインストール
Windows11でのwsl2インストールは非常に簡単になっていて コマンドプロンプトで
wsl --install
を実行するだけ。あとはユーザ名やパスワードは適宜決める。
Ubuntuにpython3をインストールする
Windows での Python を使用した Web 開発 | Microsoft Learn
sudo apt update && sudo apt upgrade
として更新した後に、
sudo apt upgrade python3
でpythonを更新する
- pipのインストール
sudo apt install python3-pip
と入力してpipをインストールする これによりパッケージの追加ができる
WSL2:UbuntuのPythonで「pip install」する前に知るべきこと - SE_BOKUのまとめノート的ブログ
上によるとpip
コマンドでインストールする際にsudo
を付けてしまうと
標準の管理パッケージapt
との間で問題が起きるらしい
よって通常のpip install
を使う
環境分けたほうが安全なのでvenvもインストール
sudo apt install python3-venv
xserver(VcXsrv)のインストール
wsl2でGUIアプリを表示するために必要 以下の通りに進めていけば問題ない。
VcXsrv(Xサーバー)をWindowsにインストールしLinuxのGUIをリモート操作する設定方法 | りんか ネット
最後のチェックは3つ(4つ)全部入れていい。 特にファイアウォールについてはパブリックとプライベート両方にチェックを入れるようにする
ディスプレイの番号についてはWSL2を使う場合以下のように設定する
WSL で動くアプリの GUI を VcXsrv を使い Windows 10 に表示する | りんか ネット
エクスプローラで直接ファイルを開いて編集してもいいし、sudo vim /etc/bash.bashrc
で
ターミナル上で直接編集してもいい
うまくインストールできているか確認するためにxeyesを使う
sudo apt install x11-apps xeyes
xeyesが起動すれば問題ない
Running WSL GUI Apps on Windows 10 - Microsoft Community Hub
Pybulletのインストール
homeディレクトリに仮想環境を置く場所を作る
mkdir python-projects/Pybullet cd python-projects/Pybullet python3 -m venv .venv # 仮想環境の作成 source .venv/bin/activate # 仮想環境の有効化
仮想環境内でパッケージをインストールする
(.venv) pip3 install pybullet (.venv) pip3 install numpy
(.venv) git clone --depth 1 https://github.com/bulletphysics/bullet3 # サンプルプログラムのダウンロード (.venv) python3 bullet3/examples/pybullet/examples/humanoid_manual_control.py # 実行環境
Pybulletでロボットアームシミュレーションをするまでの手順 - Qiita
WSL2(Ubuntu20.04)+venv+pyBulletで深層強化学習のサンプルプログラムを動かす - Qiita
ウィンドウが出ても真っ黒で描画されない場合
自分の環境ではnvidiaのgpuも入っていたためかウィンドウは出てきても真っ黒のままで描画されなかった。 おそらくOpenGLに関係した問題だろうということで動作確認を行った。
sudo apt install mesa-utils glxgears
本来なら回転するギアが表示されるのだが真っ黒なウィンドウが表示される
WSLのOpenGL errorでハマった話(LIBGL_ALWAYS_INDIRECT=1でなく0) - Qiita
glxgears displays black screen, no gears · Issue #654 · microsoft/wslg · GitHub
そこで以下の設定を追加した
export DISPLAY="`grep nameserver /etc/resolv.conf | sed 's/nameserver //'`:0" # ←ディスプレイ番号の設定 export LIBGL_ALWAYS_INDIRECT=0 #←追加 export MESA_D3D12_DEFAULT_ADAPTER_NAME=nvidia #←追加
bashrcには記述するだけでは反映されないので新しくWSL2を立ち上げるか
source /etc/bash.bashrc
を実行する
きちんと歯車が回っていれば描画については問題ないはず
改めてサンプルプログラムを実行する プログラム起動時のログを見るとGL_RENDERERがNVIDIAになっていることが確認できる
startThreads creating 1 threads. starting thread 0 started thread 0 argc=2 argv[0] = --unused argv[1] = --start_demo_name=Physics Server ExampleBrowserThreadFunc started X11 functions dynamically loaded using dlopen/dlsym OK! X11 functions dynamically loaded using dlopen/dlsym OK! Creating context Created GL 3.3 context Direct GLX rendering context obtained Making context current GL_VENDOR=Microsoft Corporation GL_RENDERER=D3D12 (NVIDIA GeForce MX550) GL_VERSION=4.2 (Core Profile) Mesa 22.2.5-0ubuntu0.1~22.04.3 GL_SHADING_LANGUAGE_VERSION=4.20 pthread_getconcurrency()=0 Version = 4.2 (Core Profile) Mesa 22.2.5-0ubuntu0.1~22.04.3 Vendor = Microsoft Corporation Renderer = D3D12 (NVIDIA GeForce MX550) ・ ・ ・
WSL2上で動作させることができた。
全体的な流れは以下を参考にさせていただきました
WSLのOpenGL errorでハマった話(LIBGL_ALWAYS_INDIRECT=1でなく0) - Qiita
glxgears displays black screen, no gears · Issue #654 · microsoft/wslg · GitHub