コンテンツにスキップ

WSL2

  • >で始まるコマンドは PowerShell でのコマンドを表す。
  • $で始まるコマンドは Linux でのコマンドを表す。

インストールする

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# WSL2を使う
> wsl --set-default-version 2

# インストールできるディストリビューション一覧を表示する
> wsl --list --online
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl.exe --install <Distro>' を使用してインストールします。

NAME                                   FRIENDLY NAME
Ubuntu                                 Ubuntu
Debian                                 Debian GNU/Linux
kali-linux                             Kali Linux Rolling
Ubuntu-18.04                           Ubuntu 18.04 LTS
Ubuntu-20.04                           Ubuntu 20.04 LTS
Ubuntu-22.04                           Ubuntu 22.04 LTS
OracleLinux_7_9                        Oracle Linux 7.9
OracleLinux_8_7                        Oracle Linux 8.7
OracleLinux_9_1                        Oracle Linux 9.1
openSUSE-Leap-15.5                     openSUSE Leap 15.5
SUSE-Linux-Enterprise-Server-15-SP4    SUSE Linux Enterprise Server 15 SP4
SUSE-Linux-Enterprise-15-SP5           SUSE Linux Enterprise 15 SP5
openSUSE-Tumbleweed                    openSUSE Tumbleweed

# Debianのインストール
> wsl --install -d Ubuntu-24.04

# WSLにインストールしているディストリビューション一覧を確認する
> wsl --list
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu-24.04 (既定値)

# WSLのディストリビューションをアンインストールする
> wsl --unregister Ubuntu-24.04

# インストール済みのディストリビューションと状態を確認する
> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-24.04    Running         2

ディストリビューションを起動するときに0x80370114のエラーが出る

Windows の機能の有効化または無効化から仮想マシン プラットフォームを有効にする。

これで駄目だったらHyper-VとかLinux 用 Windows サブシステムあたりも有効にすればいいかもしれない。

シャットダウンする・起動する

1
2
3
4
5
# シャットダウンする
> wsl --shutdown

# 起動する
> wsl -d {distributionName}

環境をバックアップする

1
> wsl --export Ubuntu-24.04 "C:\path\to\ubuntu.tar"

ホスト名を変更する

/etc/hostnameを変更しても WSL を再起動すると戻ってしまう。

以下のように適用する。

1
2
3
4
5
# wsl.confを作成する
$ sudo touch /etc/wsl.conf
$ sudo nano /etc/wsl.conf
[network]
hostname=Ubuntu2404
1
2
# WSLをシャットダウンさせたあと、再度起動する
> wsl --shutdown

systemctl を使う

1
2
3
4
5
sudo nano /etc/wsl.conf

# 以下を追加する
[boot]
systemd=true
1
> wsl --shutdown

Windows Terminal を設定する

ディストリビューションを複数使用するならcommandline"C:\\Windows\\system32\\wsl.exe -d {ディストリビューション名}"の方が良いかもしれない。

ネットワークドライブを自動マウントさせる

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# ディレクトリを作っておく
$ sudo mkdir /mnt/archives01

# 設定ファイルを編集する。以下を記載する
$ sudo nano /etc/fstab

# UNCONFIGURED FSTAB FOR BASE SYSTEM
//xxx.xxx.xxx.xxx/archives01 /mnt/archives01 drvfs defaults 0 0

# /etc/fstabに記載した設定を反映させる
$ sudo mount -a

git push できなくなったとき

Windows の資格情報マネージャーで git に関係する項目を削除してコマンド プロンプトからwsl --shutdownする。

VSCode+WSL の Git で "Missing or invalid credentials" エラーの対処法 - Qiita

WSL2 接続時にcygpath: not foundexec: cmd: not foundが出る

1
2
/mnt/c/Users/{ユーザー名}/.pyenv/pyenv-win/bin/pyenv: 3: cygpath: not found
/mnt/c/Users/{ユーザー名}/.pyenv/pyenv-win/bin/pyenv: 3: exec: cmd: not found

Windows でのパスと WSL でのパスが衝突するのを回避する方法 #Windows - Qiita

Windows 側の環境変数と競合するかららしい。WSL では Windows 側の環境変数を参照しないように/etc/wsl.confに以下をマージする。

/etc/wsl.conf
1
2
[interop]
appendWindowsPath=false

Windows 側で以下のコマンドを実行し、WSL を再起動する。

1
> wsl.exe --shutdown

ポートフォワーディングする

管理者権限の PowerShell で以下のコマンドを実行する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 3000ポートをxxx.xxx.xxx.xxx:80につなぐ
> netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=3000 connectaddress=xxx.xxx.xxx.xxx connectport=80

# 3000ポートを公開する
> New-NetFireWallRule -DisplayName 'WSL2' -Direction Inbound -Localport 3000 -Action Allow -Protocol TCP
> New-NetFireWallRule -DisplayName 'WSL2' -Direction Outbound -Localport 3000 -Action Allow -Protocol TCP


# 設定を確認する
> netsh interface portproxy show all

# ファイアウォールの設定を削除する
> Remove-NetFireWallRule -DisplayName 'WSL2'

# 設定を削除する
> netsh interface portproxy delete v4tov4 listenport=3000 listenaddress=0.0.0.0