WSL2でRvizやGazeboなどを動かす


はじめに

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=0export LIBGL_ALWAYS_INDIRECT= でも良いようだ。(動作することは確認したが正確な仕様は未確認)

Windows上のVcXsrvのXLaunch側

XLaunch起動後の画面遷移を順番に貼っていく。


Native OpenGLのチェックを外す。
Disable access controlにチェックを入れる。

VcXsrvのWindows Defenderファイアウォールの設定


最低限パブリックにチェックを入れること。
恐らくWSL2内とWindowsとの間にはデフォルトゲートウェイが無いので、パブリックネットネットワーク扱いになるのではないかと。

動作確認

$ rviz

おまけ。起動に失敗する場合の症状

試しに export LIBGL_ALWAYS_INDIRECT=1 としてみる。

試しに export DISPLAY= としてみる。

参考

WSL1からWSL2への移行