WSL2+VcXsrvでGUIアプリケーションを使う


忘れるのでメモ

WSL2をインストールする

VcXsrvをインストールする

VcXsrvを起動する

Multiple windowsを選択して次へ

Start no clientを選択して次へ

Disable access controlを選択して次へ

完了

タスクバーにアイコンが表示されます。終了は、右クリックしてExit...を選択する。

環境変数の設定とGUIの確認

// ホスト側(Windows)のIPアドレスを設定(自身の環境に合わせてください。)
$ export DISPLAY=192.168.1.2:0
// テスト用のアプリをインストール
$ sudo apt install x11-apps
$ xeyes

目玉が表示されれば完了です。

起動時に環境変数を設定する

ホストのIPアドレスがDHCPで動的に割り当てられていると、変わる度に設定するのは面倒です。

/etc/resolv.confやhostnameを設定する情報が見つかりますが動かなかった。

PowerShellからIPアドレスが取れないか試行錯誤する。

PS> Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true | Where-Object -FilterScript { $_.DefaultIPGateway } | Select-Object -ExpandProperty IPAddress | Where-Object -FilterScript { $_ -like "*.*.*.*" }
192.168.1.2

一応、必要なIPアドレスが取れたので、このコマンドを使ってWSL2を起動したら環境変数が設定されるように~/.bashrcへ追記する。

~/.bashrc
export DISPLAY=`powershell.exe -Command '& {(Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true | Where-Object -FilterScript { $_.DefaultIPGateway } | Select-Object -ExpandProperty IPAddress | Where-Object -FilterScript { $_ -like "*.*.*.*" }) + ":0" | Write-Host -NoNewLine }'`

再度WSL2を起動しても正しく設定されるので良しとする。

echo $DISPLAY
192.168.1.2:0