更新 2022.10.09
導入保留としていた WSLg preview を Widows 11 が勝手にアップグレード導入し、VcXsrv と競合するようになってしまったため、泣く泣く VcXsrv を外すことにする。
具体的には XLaunch を起動しないようにし、~/.bash_profile の export DISPLAY 設定を外すだけ。
タスクトレイの XLaunch に頼らなくなったことと Linux ⇔ Windows 間でコピペができるようになったのは WSLg の長所だが、初回起動が遅い (2 回目以降は速い)、ウィンドウのデザインや操作感がちょっとダサい、PowerToys の FancyZone 対象外になってしまうのが短所。
前提
導入対象とするマシンは下記の通り。
- Hardware : CPU = i10900, GPU = GeForce RTX 2080Ti, Mem = 32GB, SSD 1 TB + HDD 2TB
- ベース OS : Windows 10 Pro バージョン 20H2 (ビルド 19042.685)
- 仮想 OS : Ubuntu 20.04 LTS on WSL2
- 環境構築メモ 1/4 を実施した状況
GUI 導入
Ubuntu 14.04 より apt-get
, apt-chache
ではなく apt
コマンドの使用が推奨されているため、参考記事に旧コマンドが含まれている場合は注意。
X-Window Server (VcXsrv) のインストールと設定
VcXsrv インストール
VcXsrv のインストールは参考記事 初心者のためのWSL( 2 ) ~GUI設定,デスクトップ環境設定編~ のとおり。記事を参考にするのはインストール作業まで。VcXsrv 初期設定以降は参考にするだけで実行しない。
VcXsrv の初期設定と起動確認
XLaunch (VcXsrv のアイコン) をクリックし、初期設定と起動確認を行う。
既定のとおり。Multiple windows を選択 *1。
既定のとおり。
Disable access control にチェックを入れる。
Save configuration を押し、config.xlaunch
を shell:startup
へ保存する。その後、完了を押す。
タスクトレイに XLaunch のアイコンが表示されれば起動成功。都度、XLaunch 起動・初期設定をするのは面倒であるため、上記の最終ステップでスタートアップメニューに設定を保存している。
Ubuntu の GUI 設定
# パッケージのインストール sudo apt install x11-apps x11-utils x11-xserver-utils dbus-x11 # bash 起動時の設定とその反映 echo 'export DISPLAY=xx.xx.xx.xx:0.0' >> ~/.bash_profile source ~/.bash_profile
上記 3 行目の設定値 xx.xx.xx.xx は X-Windows Server サービスが走っているホスト OS (Windows 10) 側の IP アドレス。その指定方法は2通りある。
X-Window Server 用の通信設定(動的版)
1つはホスト OS の物理イーサネットアダプタの IP アドレスを固定値指定する方法。もう1つは WSL 起動時に動的に決まるイーサネットアダプタ vEthernet (WSL) の IP アドレスを指定する方法。下記のように指定する。この方法は地のゲスト OS
からだけではなく、ゲスト OS 上の Docker コンテナからの接続でも有効であった。
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0
Windows Defender 受信規則設定
ただ、この方法を採るにはある事前準備が必要で、この点をきちんと解説しているサイトは非常に少ない。
WSL2 とホスト OS との通信はパブリック扱いとなるらしく、WSL2 ⇔ ホスト OS 間で行う通信が Windows Defender に塞がれないようセキュリティについて詳細設定する必要がある。既定設定だと Windows Defender に VcXsrv サービスのすべておよび WSL2 から イーサネットアダプタ vEthernet (WSL) への ping echo back が塞がれてしまうため、パブリックプロファイルで許可を与える。 その手順は以下の通り。
- ping echo back を許可するルールの作成方法
- "Windows Defender ファイアーウォール" を開く
- "詳細設定" を押す
- "受信の規則" を右クリックし、"新しい規則" を選択する
- "規則の種類" で "カスタム" を選択し、"次へ" を押す
- "すべてのプログラム" を選択し、"次へ" を押す
- プロトコルの種類で "ICMPv4" を選択し、"カスタマイズ" を押す
- "特定の種類の ICMP" を選択し、"エコー要求" をチェックして "OK" をクリックし、"次へ" を押す
- ローカル IP アドレス (ホスト OS イーサネットアダプタ vEthernet (WSL) 側) で "これらの IP アドレス" を選択し、"追加" を押し、"この IP アドレスまたはサブネット" で "172.0.0.0/8" と入力する *2
- リモート IP アドレス (ゲスト OS 側) で "これらの IP アドレス" を選択し、"追加" を押し、"この IP アドレスまたはサブネット" で "172.0.0.0/8" と入力し、"次へ" を押す
- "接続を許可する" を選択し、"次へ" を押す
- "プライベート" と "パブリック" を選択し、"次へ" を押す
- 受信規則の名前を付け、"完了" を押す
- VxXsrc プロファイルの作成方法
- "アプリに Windows Defender ファイアウォール経由の通信を許可する" を押す
- "VcXsrv windows xserver" を選択し、"プライベート" および "パブリック" をチェックする
- "VcXsrv windows xserver" を選択してチェック(有効化)し、"OK" を押す
- 上述の ping echo back の設定方法のとおり、"詳細設定" から XcXsrv サービスの "受信の規則" における "ローカル IP アドレス" と "リモート IP アドレス" を設定する *3*4
- "プロパティ" > "詳細設定" > "エッジトラバーサル" は "アプリケーションに従う" を選択しておく
デスクトップ環境 (xfce) インストール
Ubuntu デスクトップ環境のインストール手順は以下のとおり。GNOME のインストールをトライしてみたが、参考記事と同様にうまくいかなかったため、軽量の xfce にしてみる。
なお Ubuntu デスクトップ環境はインストールしなくてもよい。VcXsrv が個別アプリごとに Windows 10 デスクトップ上に窓を描画してくれるため、すべての作業を Ubuntu 内で完結させる必要はない。Windows 10 に PowerToys 導入済みの場合は窓の配置を細かく指定できるため、Ubuntu デスクトップ環境に頼らない方がむしろ便利かもしれない。
インストール
次のコマンドを実行する。
sudo apt install xfce4-terminal sudo apt install xfce4-session sudo apt install xfce4 export LIBGL_ALWAYS_INDIRECT=1