WSL1からWSL2への移行
- はじめに
- 参考リンク
- バージョンの確認
- WSL2の有効化
- Linux カーネル更新プログラム パッケージのインストール
- インストール済みのUbuntu 18.04をWSL2で起動する
- WSL2でXウィンドウシステムを使う
- 戻る
はじめに_
すでにWindows Subsystem for Linux Version 1(以下、WSL1)を起動済みとする。
ここではすでにWSL1上で動いているUbuntu 18.04をWindows Subsystem for Linux Version 2(以下、WSL2)で動かすことを目的とします。
参考リンク_
バージョンの確認_
WSL2はWindows 10 バージョン 1903 以降、ビルド 18362 以上でないと動かないとのことなので、まず、バージョンを確認する。
コマンドプロンプト上で「ver」コマンドを実行する。私の環境では以下のようになった。
C:\Users\gotoh>ver Microsoft Windows [Version 10.0.19042.630]
ビルドが19042 > 18362なのでOK。バージョンを確認したい場合は「winver」を実行し確認できる。私の環境ではバージョンは20H2であった。
WSL2の有効化_
Windows PowerShellを管理者権限で起動する。
- 「スタート」をクリックする
- アプリケーション一覧からWindows PowerShellのアイコンを探す。
- Windows PowerShellのアイコン上で右クリックし「管理者として実行する」を選択する

仮想マシンプラットフォームを有効化する。
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
その後、再起動する。
なお、BIOSで仮想化機能を有効化しておく必要がある。
Linux カーネル更新プログラム パッケージのインストール_
以下の手順4に従いLinux カーネル更新プログラム パッケージをダウンロードする
ダウンロードしたファイルをダブルクリックし、実行する。
インストール済みのUbuntu 18.04をWSL2で起動する_
まず、今後インストールするLinuxを標準でWSL2上で動くように設定する。PowerShell上で以下を実行する。
wsl --set-default-version 2
次に現在インストール済みのLinuxがWSL1とWSL2のどちらで動いているかを確認する。PowwerShell上で以下を実行する。以下の私の例ではUbuntu 18.04がインストール済みでWSL1上で動くことがわかる。
wsl --list --verbose NAME STATE VERSION * Ubuntu-18.04 Stopped 1
Ubuntu 18.04をWSL2上で動くように切り替える。なお、以下について注意すること(私は以下で引っかかって切り替えられなかった)
- BIOSで仮想化機能を有効にしておく
- Cドライブに十分な容量がある
wsl --set-version Ubuntu-18.04 2 変換中です。この処理には数分かかることがあります...
確認する。
wsl --list --verbose NAME STATE VERSION * Ubuntu-18.04 Stopped 2
WSL2でXウィンドウシステムを使う_
WSL2では、クライアント側(Linux側)から見えるホスト側(Windows側)のIPアドレスがローカルホスト(localhost, 170.0.0.1)固定ではなく、適宜、変更されるためWSL1とは異なる設定をする必要がある。
Linux側(Ubuntu側)の設定_
Ubuntuを起動する。Ubuntu 18.04のWSL上へのインストールと初期設定:X Windowの起動(Windows側からLinuxソフトウェアを別画面表示する)に従って、Xウィンドウの設定をしている場合は、~/.bash_profileの記述を任意のエディタで変更する。変更内容は以下のとおり。
変更前:export DISPLAY=localhost:0.0 変更後:export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0.0
変更を終えたら、~/.bash_profileを読み込みなおすか、Ubuntuを起動しなおす。以下のように環境変数DISPLAYに「localhost:0.0」ではなく「172.xx.xx.xx:0.0」という値が設定されていればOK。
% source ~/.bash_profile % env | grep DISPLAY DISPLAY=172.18.16.1:0.0
Windows側の設定_
VcxSrvの設定を変更する必要がある。VcxSrvを起動する。デスクトップにあるアイコン「XLaunch」をクリックする。

すると以下のウィンドウが開く。「Multiple windows」を選択し、「次へ」をクリックする。

「Start no client」を選択し、「次へ」をクリックする。

「Additional parameter for VcxSrv」の欄に「-ac」を入力し、「次へ」を押す。

「Set Configure」をクリックし、適当な場所に設定ファイルを保存する。私はデスクトップ上に保存した(保存したファイルをダブルクリックすることで、今回設定したオプション -ac 付きでVcxSrvが起動する)。その後、「完了」を押す。

保存した設定ファイルは以下のようなアイコンで表示される。

続いてVcxSrvのファイアウォール設定を変更する。念のためすでに起動しているVcxSrvを終了しておく。
「スタート」をクリックする

「設定」をクリックする

「更新とセキュリティ」をクリックする

「Windowsセキュリティ」をクリックする

「ファイアウォールとネットワーク保護」をクリックする

「ファイアウォールによるアプリケーションの許可」をクリックする

開いたウィンドウで以下を実行する
- 「設定の変更」をクリックする
- 「許可されたアプリおよび機能」に列挙されているアプリ―ケーションの一覧からVcxSrvを探し、「パブリック」にチェックを入れる。
- 「OK」を押し、変更を保存する。

先ほど保存したVcxSrvの設定ファイルをダブルクリックし、VcxSrvを起動する。
Ubuntuのターミナル上でxeyesなどを実行し、Xウィンドウが使えることを確かめる。