WSL1からWSL2への移行

はじめに_

すでに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を管理者権限で起動する。

  1. 「スタート」をクリックする
  2. アプリケーション一覧からWindows PowerShellのアイコンを探す。
  3. 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上で動くように切り替える。なお、以下について注意すること(私は以下で引っかかって切り替えられなかった)

  1. BIOSで仮想化機能を有効にしておく
  2. 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セキュリティ」をクリックする

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

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

開いたウィンドウで以下を実行する

  1. 「設定の変更」をクリックする
  2. 「許可されたアプリおよび機能」に列挙されているアプリ―ケーションの一覧からVcxSrvを探し、「パブリック」にチェックを入れる。
  3. 「OK」を押し、変更を保存する。

先ほど保存したVcxSrvの設定ファイルをダブルクリックし、VcxSrvを起動する。

Ubuntuのターミナル上でxeyesなどを実行し、Xウィンドウが使えることを確かめる。

戻る_