✍️

WindowsでのWSL設定・Ubuntu導入(自分用メモ)

2025/01/06に公開

WSLの設定・Ubuntu導入までの手順メモ。

WSLの導入

WSLはWindowsに同梱されてるが、もし壊れてもGitHubから落とせる。

.wslconfigとwsl.conf

WSLの挙動を定義するconfファイル。2種類ある。詳細はMSサイト

ファイル 場所 意味
.wslconfig Windows上の
C:\Users\(ユーザ名)\.wslconfig
WSL上の全distroに適用。WSL2のみ
wsl.conf distro上の
/etc/wsl.conf
WSL上の特定のdistroに適用

.wslconfig

WSL全体に影響するパラメータ
配置場所はWindowsのC:\Users\(ユーザ名)\.wslconfig。このファイルはデフォルトで存在しないので、必要なら手作業で作成。記述にエラーがあると無視してデフォルト値でWSLが起動する。Windowsかよ。

.wslconfig
[wsl2]
memory=4GB
processors=2
~~

主なWSLの設定

セクション ラベル: [wsl2]

key value default
kernel path カーネルで提供される受信トレイ カスタムLinuxカーネルのパス
memory size Windows合計メモリの50% WSLに割り当てるメモリの量。最大値でWSL起動時この値が確保されるわけではない
processors 数値 Windows論理プロセッサと同数 WSLに割り当てる論理プロセッサ数
localhostForwarding boolean true localhost:port経由でwin→WSL接続
kernelCommandLine string Blank 追加のカーネルコマンドライン引数
safeMode boolean false WSLをセーフモードで実行
swap size Windowsメモリの25% WSLに追加するスワップ領域、スワップファイルなければ0
swapFile path %USERPROFILE%\
AppData\Local\
Temp\swap.vhdx
スワップ仮想diskへのパス
デフォはMSサイトの説明では←だが実際にはC:\Users\takak\AppData\Local\Temp\なんかごちゃごちゃしたところ\swap.vhdx
通常はwsl --shutdownで削除されるが時々ゴミが残る。場所はTemp内をswap.vhdxで検索するのが早い
pageReporting boolean true WindowsにWSL未使用メモリの再利用を許可
guiApplications boolean true WSLでのGUI(WSLg)サポート
debugConsole boolean false distro開始時dmesgのコンソール出す(win11)
nestedVirtualization boolean true WSLで入れ子VMを許可(win11)
vmIdleTimeout 数値 60000 VMがアイドル状態になってからシャットダウンされるまでのミリ秒(win11)
WSLではsystemdがインスタンスを維持しないのでシェルから抜けたら1分後にdistro自体が落ちる、Windowsみ深い。0にしたら落ちなくなるかと思ったら10秒くらいで落ちる、無制限の設定はできないっぽい?
dnsProxy boolean true networkingMode=NAT時ホストのNATに対してLinuxのDNSサーバーを構成。false時はWindowsからLinuxにDNSサーバミラーリング
networkingMode string NAT mirroredでネットワークモードミラー化(win11/22H2~)
firewall boolean true true時Winファイアウォール+Hyper-V固有規則でフィルタ(win11/22H2~)
dnsTunneling boolean true WSLからWindowsへのDNS要求のプロキシ方法を変更(win11/22H2~)
autoProxy boolean true WSLにWindows HTTPプロキシ情報の使用を強制(win11)
defaultVhdSize size 1TB 仮想HDサイズ
実際の.vhdxを見ると使った分だけ広がるみたい。たぶん最大値

pathは\をエスケープ 例: C:\\Temp\\myCustomKernel
sizeは単位指定 例: 8GB512MB

試験的な設定

色々便利そう。時々チェック。

wsl.conf

配置場所はdistro上の/etc/wsl.conf。デフォルトでは存在しないので必要なら作成する。

wsl.conf
[section-label]
key = value
key = value
~~

systemd サポート・コマンド実行

セクション ラベル: [boot]

key value default 内容
systemd boolean なし trueでsystemdを起動。これを設定しないとsystemdは有効にならない
command string "" WSLインスタンス開始時の実行コマンド(rootで実行される。複数指定不可、その場合はシェルスクリプトを指定。win11)
command = /path/to/script.sh

自動マウントの設定

Win⇔WSL2はパフォーマンス悪いので注意。あまり使いたくない。

セクション ラベル: [automount]

key value default 内容
enabled boolean true trueで固定ドライブ (C:/とか)が/mnt下にマウント。falseでもfstabで個別にマウントできる。これをfalseにするとVS CodeからWSL拡張機能で接続できなくなる
mountFsTab boolean true WSL開始時に処理されるよう/etc/fstab(SMB=Server Message Block共有など他のファイル システムを宣言するもの)を設定
root string /mnt/ Win固定ドライブマウントのエントリポイント
options 以下参照 "" マウントしたWindowsファイルシステムに対するオプションの指定
options = "metadata,uid=1003,gid=1003,umask=077,fmask=11,case=off"~

optionsの詳細

key 内容 default
uid uid WSL既定(初回インス
トール時は1000)
gid gid
umask 全ファイル・ディレクトリに除外するアクセス許可のマスク 022
fmask 全ファイルに除外するアクセス許可のマスク 000
dmask 全ディレクトリに除外するアクセス許可のマスク 000
metadata Windowsファイルシステムへのメタデータの追加 disabled
case ディレクトリの大文字小文字の許可関係 off

ネットワーク設定

セクション ラベル: [network]

key value default 内容
generateHosts boolean true /etc/hosts(IPアドレスに対応するホスト名の静的マップ)を生成
generateResolvConf boolean true /etc/resolv.conf(ホスト名のDNSリスト)を生成
hostname string Windowsホスト名 WSL配布に使用するホスト名

相互運用の設定

セクション ラベル: [interop]

key value default 内容
enabled boolean true WSLでWindowsプロセスの起動をサポート
appendWindowsPath boolean true WSLがWindowsパス要素を$PATHに追加

ユーザー設定

セクション ラベル: [user]

key value default 内容
default string 初回作成時のユーザ名 WSL開始時に使用されるユーザー

WSLアップデート・Ubuntu導入

Powershellから

> wsl --update      #WSL2に更新
> wsl -l --online   #導入できるdistro確認
~~
NAME                            FRIENDLY NAME
Ubuntu                          Ubuntu
Debian                          Debian GNU/Linux
kali-linux                      Kali Linux Rolling
~

> wsl --install ubuntu #Ubuntuを導入
~
Enter new UNIX username:    #ユーザ名
New password:               #pw
Retype new password:        #pw# Ubuntuが起動
$ cat /etc/os-release #OS確認
PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.1 LTS (Noble Numbat)"
~

$ cat /proc/version #カーネル確認
$ #WSL専用品のようです
Linux version 5.15.167.4-microsoft-standard-WSL2 (root@f9c826d3017f) (gcc (GCC) 11.2.0, GNU ld (GNU Binutils) 2.37) #1 SMP Tue Nov 5 00:21:55 UTC 2024
$ exit
> wsl -l --verbose #distro状態確認
  NAME      STATE           VERSION
* Ubuntu    Stopped         2       #Ubuntuが入っているのを確認

これでUbuntuの導入完了。
WSLまわりのコマンド:

> wsl -l --online           #導入可能なdistroのリスト
> wsl -l --verbose          #distroの実行状態を確認
> wsl -u root -d Ubuntu     #rootでログイン
> wsl --terminate Ubuntu    #Ubuntuを終了
> wsl --set-default Ubuntu  #既定distroをUbuntuに(複数distro導入してるとき)
> wsl                       #既定distroに既定ユーザで入る
> wsl --shutdown            #全distroを終了

なおwsl --shutdownしても、例えばVisual Studio Code等からWSLにアタッチしていると勝手にWSLが再起動するもよう。味わい深い。

ちなみにWSL上のファイルはWindowsの

C:\Users\(ユーザ名)\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_~~\LocalState\ext4.vhdx
またえらいところにいる。拡張子.vhdxはHyper-Vの仮想ストレージ。
試しにUbuntuを削除すると

> wsl --uninstall ubuntu


消えない。
もう一度Ubuntuを導入しようとしたら

> wsl --update
要求された操作には管理者特権が必要です。
ダウンロード中: Linux 用 Windows サブシステム 2.3.26
~
> wsl -l --verbose
  NAME      STATE           VERSION
* Ubuntu    Stopped         2        #消えてない

深く考えないことにした。

UbuntuとWSLを完全にアンインストールする方法:

> #Ubuntuをアンインストール
> wsl --uninstall ubuntu #導入済の全distroを落とす
> #残存リソースも削除
> Remove-Item -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss" -Recurse

さらに、C:\Users\(ユーザ名)\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_~~を探してフォルダごと削除。これでウンインスコ完了(のはず)

GitHubで編集を提案

Discussion