Windows 10でLinuxを使う(WSL2)

Windows 10のWindows Subsystem for Linux 2（WSL2）を使うと、Windows 10上で、超お手軽にLinuxで遊ぶことができる。

# How to Install
## 必要条件
* Windows 10 version 2004 以降
* Windows 10 version 1903 and 1909  
  KB4566116を適用することで、1903, 1909でもWSL2が使えるようになった。（2020/8/20）

使用しているWindowsのバージョンは`winver`コマンドで確認できる。

## Windows 10 version 2004以降でKB5004296を適用済みの場合（おすすめ）
コマンドプロンプトを管理者モードで開き、下記のコマンドだけでインストール完了。

```cmd
wsl --install
```
デフォルトではUbuntuが一緒にインストールされる。別のディストリビューションを使いたい場合は、下記のように`-d`オプションを使って指定可能。ディストリビューションを追加インストールする場合もこれでOK。

```cmd
wsl --install -d Debian
```

## Windows 10 version 2004以前 or KB5004296を未適用の場合
### "Windows Subsystem for Linux"の有効化
管理者としてpowershellを開き、以下を実行。

```powershell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
```

### "Virtual Machine Platform"の有効化
管理者としてpowershellを開き、以下を実行。PCを再起動するかどうか問い合わせがあるので、`Y`を入力する。PCが自動的に再起動する。

```powershell
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all
```

### WSL2用Linuxカーネルのインストール
[WSL 2 Linux カーネルの更新](https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel)ページから、WSL2用Linuxカーネルをダウンロードして、インストールする。


### デフォルトをWSL2に設定
Linuxディストリビューションをインストールする際に、デフォルトでWSL2を使うように設定する。
powershellを開き、以下を実行。

```powershell
wsl --set-default-version 2
```
### Linuxディストリビューションをインストール
1. Microsoft Storeを起動し、Ubuntu等のディストリビューションを検索  
Ubuntu以外には、DebianやSLES等何種類かある。
なお、特定の版数のUbuntuを入れたい場合は、版数が入ったもの（Ubuntu 20.04 LTS等）を入れたほうがよい。版数無しUbuntuはインストールする時期によって、版数が変わる模様。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253975/f01b4c7b-a172-5777-1280-45135c6d0f07.png)
2. 「入手」ボタンをクリックして、Ubuntuをインストール
3. インストール完了後、「起動」をクリックしてUbuntu起動！ 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253975/161359c8-967c-59b5-e71f-6581c9810e81.png)
4. 初回起動時にUbuntu用ユーザIDとパスワードを設定して、インストール完了
ここで入力するユーザ名はWindowsのユーザ名とは関係ない。
root権限が必要な場合は、sudoで実行できる。なお、パスワードを忘れた場合は、[パスワードを忘れた場合](https://docs.microsoft.com/ja-jp/windows/wsl/user-support#forgot-your-password)を参照。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253975/c8e5b058-9941-2280-8b29-74f4ba55dda0.png)

# How to use
## スタートメニューから起動
インストールしたLinuxディストリビューションは通常のアプリケーションと同様に、スタートメニューから起動可能。作成したユーザでログインした状態で起動する。

## Windows Terminalからアクセス
[Windows Terminal](https://www.microsoft.com/ja-jp/p/windows-terminal/9n0dx20hk701?activetab=pivot:overviewtab)では、自動でWSL2のプロファイルが登録されるため、簡単にアクセスできるのでお勧め。Microsoft Storeからインストールできるので、気になる方は試してみては。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253975/e7f209d3-8c84-8b7d-df17-7c0d3b172073.png)

# Windows-Linux間のファイル共有
## LinuxからのWindows上のファイルへのアクセス
WindowsのCドライブがLinuxの`/mnt/c`にマウントされている。`/mnt/c`にアクセスすることで、Windows上のファイルにアクセス可能。

## WindowsからLinux上のファイルへのアクセス
`\\wsl$\[ディストリビューション名]`でLinux上のファイルにアクセス可能。Ubuntuを使っている場合は、`\\wsl$\Ubuntu`でアクセスする。

# 時刻ずれ問題
しばらく使っていて気が付いたのだけど、WSL2のUbuntuの時刻が結構な勢いでずれる。どうも、Note PCがスリープから復帰したタイミングで、UbuntuがNote PCと時刻同期できていないみたい。既知の問題のようで、カーネル版数5.10.16.3で修正されている。カーネルのアップデートはWindows Updateで自動的に実施されるが、すぐに試したい場合は下記の手順で更新できる。

1. [Microsoft Updateカタログ](https://www.catalog.update.microsoft.com/Search.aspx?q=wsl)から、`Windows Subsystem for Linux Update - 5.10.16`をダウンロードする。
1. ダウンロードしたcabファイルを展開し、`wsl_update_x64.msi`を取り出す。
1. コマンドプロンプトを管理者権限で開き、下記のコマンドを実行して、WSLを停止

     ```cmd
     wsl --shutdown
     ```
1. `wsl_update_x64.msi`を実行する
1. Ubuntuにログインして、カーネル版数を確認する。

     ```bash
     $ uname -r
     5.10.16.3-microsoft-standard-WSL2
     ```

---
なお、Windows Updateで配信されるのを待つのであれば、下記のようにログイン時に毎回`sudo hwclock -s`を実行することで対処することも可能。

* /etc/sudoersにhwclockコマンドをパスワードなしで実行できるように設定  
`sudo visudo`コマンドを実行して、`/etc/sudoers`ファイルを下記のように編集  
（`hwclock`のパスは`/sbin`かもしれません。）

```
# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
%sudo   ALL=(ALL) NOPASSWD: /usr/sbin/hwclock -s  #この行を追加
```

* ~/.bashrcにhwclockコマンドを追加  
ホームディレクトリにある`.bashrc`ファイルの最後に下記の行を追加

```bash
# sync HW clock
sudo hwclock -s
```
---

# How to Uninstall
インストールしたLinuxディストリビューションは、通常のアプリケーションと同様に`プログラムの追加と削除`からアンインストール可能。

# wslコマンド
個人的にたまに使う、Windowsのコマンドプロンプトから実行できるwslコマンドの一覧。

|オプション|概要|
|---------|-------------------------|
|          | wslの後にLinuxコマンドを書くと、そのコマンドを実行できる。`wsl ls`等 |
|--install | Linuxのインストール（初回実行時はwslの有効化もしてくれる）。デフォルトではUbuntuをインストールするが、`-d`オプションをつけることでディストリビューションを指定可能。|
|--status  | Linuxカーネル版数等を確認可能 |
|--list -v | インストール済みディストリビューションを表示 |
|--list -o | インストール可能ディストリビューションを表示 |
|--update  | Linuxカーネルのアップデート。`--rollback`をつけると以前の版数に戻る。 |

```cmd:Winodws&#x20;10からWSL&#x20;Ubuntuのgrepの実行
C:\>winget uninstall | wsl grep Ubuntu
Ubuntu                                          Canonical.Ubuntu
```

# リンク
* [Windows Subsystem for Linux に関するドキュメント](https://docs.microsoft.com/ja-jp/windows/wsl/)
    * WSL関連のリソース。ここから一通りの情報にアクセスできる。

* [Installation Instructions for WSL 2](https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-install)
    * WSL2のインストール手順。

* [WSL Tips and Tricks](https://craigloewen-msft.github.io/WSLTipsAndTricks/)
    * WSL関連の小技集。MSのWSL開発者のページ。