目次
はじめに
Nodejsでデバイスアクセスしたいと思ったのですが、以前NodejsでWebRTCを触ってみた際にWindows環境からでは苦戦した記憶があり、wsl2で環境作成しておけばよかったと後悔しました。
そういえばWSL2を使用してWindowsでLinuxのGUI環境を作れるとは聞いていたものの実際に構築したことが無いなと思い、作成してみました。
ちなみにWindows11ではWSLgがWSLに追加されていて、今回のようにXserverをインストールしなくてもよいらしい。すごい。
自分の環境
以下の環境になっています。
- OS
- Windows 10 Home
- ディストリビューション
- Ubuntu-20.04
やることまとめ
- WindowsにVcXsrv(Xserver)をインストールし、外部コントロール可能な状態にしておく。
- WSL2ディストリビューションのプログラム実行時のGUI表示先をXserverに設定する。
- 接続テスト
やること
WSL2のアップデート
WSLをインストールしたのがかなり前のため、アップデートと再起動をしておきます。
- 管理者でpowershellを開く
- 以下のコマンドを実行
wsl --update
wsl --shutdown

VcXsrvのインストール
Xサーバーをインストールします。
- 以下のサイトからインストーラをダウンロード

- インストーラを起動し、インストールします。以下は私の設定



- VcXsrvを起動する

- 初回起動時の設定をしていく


Disable access controlにチェックを入れること!
外部からのアクセスを許可しています。WSL2はホストPCと仮想スイッチで接続されている状態です。これも外部アクセス扱いなのでこの設定が必要になります。


パブリックネットワークの許可を必ず入れること!
様々なサイトにも記載がありますが、WSL2はホストPCと仮想スイッチで接続されている状態です。PowerShellでipconfigコマンドを実行すれば確認できますので、一度自分の目で確認しておくことをお勧めします。vEthernet (WSL)という下層の物理層仮想的に接続されていることがわかります。
vEthernetでの通信は全てパブリックネットワーク扱いのようで、ここでパブリックネットワークを許可しておかないとubuntu上で実行したアプリケーションとVcXsrv間で通信ができなくなってしまいます。
万が一間違えた場合は下の画像を参考にファイアウォール経由の通信を許可して下さい。
VcXsrvの項目が1つもしくは2つあると思いますが、項目の左側のチェックが付いている方のプライベート、パブリックの欄にチェックを付けてください。
ダブルクリックしてネットワークの種類を選択の欄もどちらにもチェックを付けてください。
最後にOKを押すのを忘れずに!




Ubuntuのアップデート
とりあえずアップデート
- Ubuntuを開く
- 以下のコマンドを実行
sudo apt update
sudo apt upgrade
Ubuntuでのプログラム実行時のGUI表示先を設定
プログラム実行はWSL2上で、画面表示はWindows上(VcXsrv上)で行われるように設定します。
- 以下のコマンドを実行。テキストエディタであればvimで無くてもいいです。
sudo vim /etc/bash.bashrc
- 一番最後の行に以下の内容を記述。
- ここに記述しておくと起動時に勝手に実行してくれます。今回追加した内容は環境変数の追加コマンドです。
- プログラム実行時のGUI表示先を[<ホスト名/IPアドレス>:<ディスプレイ番号>.<スクリーン番号>で設定しています。IPアドレスを直打ちするのはイケていないので/etc/resolv.confから取得しているみたいですね。
export DISPLAY="`grep nameserver /etc/resolv.conf | sed 's/nameserver //'`:0"

- WSL2を一度閉じて再起動する。
以上で設定は終了です。
x11-appsのインストール
GUIのテストのためにxeyesというアプリケーションをダウンロードして実行してみます。xeyesはx11-appsに含まれています。
- 以下のコマンドを実行
sudo apt install x11-apps -y
- xeyesを実行
xeyes
マウスカーソルを追従する目玉がWindowsの画面に表示されれば成功です。

コメント