WSL2 のセットアップ手順まとめ

## 記事概要
WSL (Windows Subsystem for Linux) を利用し、Windows 上で Linux を使えるようにするセットアップ手順をまとめた記事です。
本記事で取り扱っている内容は下記の通りです。
- WSL を使えるようにする為の Windows 設定。
- WSL 用作業ディレクトリを任意の場所に変更する設定。
- OS の最小限のセットアップ（OS インストール、パッケージ更新、ユーザ作成）。
- WSL を GUI で操作する為の設定。
- WSL 上で USB デバイスを認識させる為の設定。


### やること
- WSL2 環境構築
  - WSL, Hyper-V 有効化、wsl 更新
- OS のインストール
  - LxRunOffline インストール
  - イメージファイルダウンロード、インストール
- OS のセットアップ
  - パッケージの更新、sudo インストール
  - sudo 権限付きユーザの作成、UID の確認
  - デフォルトユーザの設定、Linux の起動確認
- GUI 環境（＋リモートアクセス）の設定
  - 前提パッケージのインストール、設定ファイル編集
  - RDP による接続確認
- USB デバイス接続用設定
  - Windows 側の設定
  - Linux 側の設定
  - USB デバイスの接続（解除）方法


### 設定時の注意事項
- ～.ps1 のスクリプトは Windows にて **管理者として実行している「PowerShell 端末」** で実行して下さい。
- ～..sh のスクリプトは WSL で実行している **「Linux 端末」** で実行して下さい。
- セットアップ時にダウンロードしたファイルはユーザディレクトリ直下の Downloads 内に保存されているものとして扱います。
  - 別ディレクトリに保存する設定の場合は、 **~\Downloads** を自身が設定しているディレクトリに置き換えて読んで下さい。

### セットアップ確認時の環境
- OS: Windows10 Pro (22H2)
- WSL: WSL2 kernel Ver. 5.10.102.1


## WSL2 環境構築
### WSL, Hyper-V 有効化、wsl 更新
WSL を使用出来るよう Windows の設定を変更および、wsl の更新を行います。
以下のコマンドを実行し、設定およびコマンドの更新を行って下さい。

■setup_wsl2.ps1
```
# WSL2 のセットアップ
## Windows Subsystem for Linux 有効化
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

## Hyper-V 有効化
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

## WSL2 Linux kernel 更新
wsl --update

## いったん再起動する
Restart-Computer

## デフォルトバージョンを WSL2 に変更
wsl --set-default-version 2
```


## OS のインストール
### LxRunOffline インストール
WSL のファイル保存先を変更する為、LxRunOffline を使用出来るようにします。
※ WSL のファイルはデフォルトの場合、下記のディレクトリに保存されます。
- C:\Users\\<user\>\AppData\Local\Docker\wsl\data

下記 URL からダウンロードし、LxRunOffline.exe が動くよう環境変数 PATH を設定して下さい。
- https://github.com/DDoSolitary/LxRunOffline/releases


### イメージファイルダウンロード、インストール
以下のコマンドを実行し、OS インストール用のファイルダウンロードおよびインストールを行って下さい。

■setup_linux_image.ps1
```
## LxRunOffline 用イメージファイルをダウンロード
Invoke-WebRequest -Uri https://lxrunoffline.apphb.com/download/Ubuntu/focal -OutFile ~\Downloads\ubuntu-focal.tar.gz -UseBasicParsing

## インストール（インストール先のディレクトリをここで指定するので -d D:\wsl\... を都合の良いよう変更）
lxrunoffline i -n ubuntu-2004_lxrunoffline -d D:\wsl\ubuntu-2004_lxrunoffline -f ~\Downloads\ubuntu-focal.tar.gz

## デフォルトに設定
wsl --set-default ubuntu-2004_lxrunoffline

## インストールできたかチェック
wsl -l -v

### ubuntu-2004_lxrunoffline VERSION 2 があればOK
### VERSION 1 の場合は下記コマンド実行
# wsl --set-version ubuntu-2004_lxrunoffline 2
```

インストール先のディレクトリ先に WSL のイメージファイル (ext4.vhdx) が存在していればOK!


#### イメージファイルのダウンロード参考 Wiki
本記事では Ubuntu 20.04(focal) のイメージファイルをインストールしていますが、別ディストリビューションやバージョンを使用したい場合は wiki を参照してダウンロード先やファイル名、ボリューム名 etc. を変更して下さい。
- https://github.com/DDoSolitary/LxRunOffline/wiki



## OS のセットアップ
各項目のコマンドを実行して下さい。


### パッケージの更新、sudo インストール
■update_package.sh
```
apt update && upgrade -y
apt install -y sudo
```


### sudo 権限付きユーザの作成、UID の確認
■make_user.sh
```
# sudo権限付きユーザ作成（user_name は任意の名前に置き換えてOK）
adduser user_name
## パスワードのみ設定して他は未設定のままEnterでOK
gpasswd -a user_name sudo

## ユーザの UID を確認
id -u user_name
exit
```

### デフォルトユーザの設定、Linux の起動確認
■set_default_user.ps1
```
# デフォルトユーザの設定（<UID>:Linux 側で確認した UID を設定する。例：...-v 1000）
lxrunoffline su -n ubuntu-2004_lxrunoffline -v <UID>

# 下記コマンドで起動可能かチェック
lxrunoffline r -n ubuntu-2004_lxrunoffline
```

設定後は PowerShell 端末から wsl 起動でOK!



## GUI 環境（＋リモートアクセス）の設定
### 前提パッケージのインストール、設定ファイル編集
以下のコマンドを実行し、GUI 操作出来るようデスクトップ環境の Xfce、デスクトップ環境へリモートアクセス出来るようにする為の xrdp をインストールして下さい。

■setup_gui_env.sh
```
# インストール時間かかる
sudo apt install -y xfce4 xrdp

# xrdp.ini編集
sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak
## 接続時のポート番号設定。3390が都合悪い場合はここを変更して下さい。
sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/max_bpp=32/#max_bpp=32\nmax_bpp=128/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/xserverbpp=24/#xserverbpp=24\nxserverbpp=128/g' /etc/xrdp/xrdp.ini
echo xfce4-session > ~/.xsession
```

### RDPによる接続確認
設定後は WSL (Linux) の端末にて下記コマンドを実行後、Windows 側からリモートデスクトップ接続すればOK。

```
sudo /etc/init.d/xrdp start
```

リモートデスクトップ接続は、コンピュータ: **「localhost:3390」** へ接続して下さい。

接続出来たら、username, password を入力することで GUI 環境が使用できます。


## USB デバイス接続用設定
### Windows 側の設定
下記 URL から usbipd-win のインストーラをダウンロードしてインストールして下さい。
- https://github.com/dorssel/usbipd-win/releases

再起動後、PowerShell にて下記コマンドが実行できればOK!
```
usbipd wsl list
```

### Linux 側の設定
■setup_usbip.sh
```
sudo apt install -y linux-tools-virtual
## linux-tools-****-generic のバージョンは最新の物を確認して書き換えて下さい。
sudo apt install -y linux-tools-5.4.0-77-generic hwdata

sudo visudo
defaults secure_path="/usr/lib/linux-tools/5.4.0-77-generic:..." となるよう追記して下さい。
```
wsl 再起動後、WSL 端末にて下記コマンドが実行できればOK!
```
usbip --help
```

### USB デバイスの接続（解除）方法
- PowerShell にて下記コマンドで接続、解除して下さい。
```
# 接続したい USB デバイスの <BUSID> を確認
usbipd wsl list

# 接続
usbipd wsl attach --busid <BUSID>

# 接続解除
usbipd wsl detach --busid <BUSID>
```

Linux 側で接続出来ているかは **lsusb** コマンドで確認して下さい。


## あとがき
以上で WSL のセットアップの導入的な内容は大丈夫かなと思います。
この後はイメージファイルの最適化について調べておくと良いかもです。


## 参考記事
https://qiita.com/amenoyoya/items/ca9210593395dbfc8531

https://qiita.com/atomyah/items/887a5185ec9a8206c7c4

https://qiita.com/baggio/items/28c13ed8ac09fc7ebdf1