はじめに
WSL2上のUbuntuからWindows上のXサーバーを利用してRvizやGazeboなどを表示させようとすると、Segmentation Faultなどが発生する場合がある。
この記事はその対策についてのメモである。
前提
WSL2、Ubuntu、ROS、Rviz、Gazebo等のインストールは済んでいるものとする。
検証環境
ソフトウェア
Windows 10 Pro バージョン 20H2 (OS ビルド 19032.804)
WSL2
Ubuntu 18.04.5 LTS (Bionic Beaver)
ROS Melodic (aptでインストールしたもの)
VcXsrv Version 1.20.8.1
ハードウェア
ALIENWARE m15
Core i7
NVIDIA RTX 2080
設定方法
WSL2上のUbuntu側
~/.bashrc
に以下を追記して source ~/.bashrc
する。
export DISPLAY="`grep nameserver /etc/resolv.conf | sed 's/nameserver //'`:0"
export LIBGL_ALWAYS_INDIRECT=0
ここで export LIBGL_ALWAYS_INDIRECT=0
は export LIBGL_ALWAYS_INDIRECT=
でも良いようだ。(動作することは確認したが正確な仕様は未確認)
Windows上のVcXsrvのXLaunch側
XLaunch起動後の画面遷移を順番に貼っていく。
Native OpenGL
のチェックを外す。
Disable access control
にチェックを入れる。
VcXsrvのWindows Defenderファイアウォールの設定
最低限パブリック
にチェックを入れること。
恐らくWSL2内とWindowsとの間にはデフォルトゲートウェイが無いので、パブリックネットネットワーク扱いになるのではないかと。
動作確認
$ rviz
おまけ。起動に失敗する場合の症状
試しに export LIBGL_ALWAYS_INDIRECT=1
としてみる。