こんにちは、MLBお兄さんこと松村です。
WBC の日本チームのロースターが発表されましたね。期待はやはりヌートバー選手。
WSL2 にはディストリビューションのインポートとエクスポートの機能があります。
構成済みディストリビューションの移行や再利用、バックアップするときに便利です。
しかしエクスポート済みのディストリビューションをインポートして利用する際に、rootユーザーで起動するような挙動をします。
# Ubuntu 22.04 をエクスポートする $ wsl -l -v NAME STATE VERSION * Ubuntu-22.04 Stopped 2 $ wsl --shutdown Ubuntu-22.04 $ wsl --export Ubuntu-22.04 /f/wsl/Ubuntu-22.04.tar エクスポートが進行中です。これには数分かかる場合があります。 この操作を正しく終了しました。 # Ubuntu-22.04.tar をインポートする $ wsl --import Ubuntu-22.04-v2 /c/users/yuta/wsl/Ubuntu-22.04-v2 /f/wsl/Ubuntu-22.04.tar --version 2 インポート中です。この処理には数分かかることがあります。 この操作を正しく終了しました。 $ wsl -l -v NAME STATE VERSION * Ubuntu-22.04 Stopped 2 Ubuntu-22.04-v2 Stopped 2 # インポートした Ubuntu-22.04 を起動すると root ユーザーになる $ wsl -d Ubuntu-22.04-v2 Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.79.1-microsoft-standard-WSL2 x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage This message is shown once a day. To disable it please create the /root/.hushlogin file. root@matdesktop:/mnt/c/Users/yuta# root@matdesktop:/mnt/c/Users/yuta# whoami root
ベースとなった Ubuntu-22.04 では yuta
というユーザーを作成しています。
そのためインポートした Ubuntu-22.04-v2 においても yuta
というユーザーで使えるようにしたいと思います。
方法1:Windows Terminal で既定ユーザーを指定する
Windows Terminal にはインポートしたディストリビューションも自動的にプロファイル登録されます。
そのプロファイルの wsl コマンドにユーザーを指定することができます。( --user
オプション)
このように設定することで、Ubuntu-22.04-v2 を指定のユーザーで使用することができます。
C:\WINDOWS\system32\wsl.exe -d Ubuntu-22.04-v2 --user yuta
しかしこの方法の欠点として、WSL2 から VS Code を起動した時のユーザーが root
のままとなってしまいます。
これでは Windows Terminal と VS Code のユーザーが異なり、ファイルパーミッション等に支障が出てしまいます。
(実際に Git ファイルのパーミッションがおかしくなり、コミットすらできなくなってしまいました)
方法2:WSL2 の構成ファイルで既定ユーザーを指定する
WSL2 には構成ファイル wsl.conf
があり、WSL2 で使用するディストリビューションの構成を定義することができます。
wsl.conf の [user]
セクションに既定のユーザーを指定することができます。
インポートしたディストリビューション内で wsl.conf を作成し、ディストリビューションの再起動を行うことで、次回からは指定したユーザーで使用することができます。
$ wsl -d Ubuntu-22.04-v2 root@matdesktop:/mnt/c/Users/yuta# root@matdesktop:/mnt/c/Users/yuta# cat /etc/wsl.conf cat: /etc/wsl.conf: No such file or directory root@matdesktop:/mnt/c/Users/yuta# echo -e "[user]\ndefault=yuta" | sh -c 'cat - > /etc/wsl.conf' root@matdesktop:/mnt/c/Users/yuta# cat /etc/wsl.conf [user] default=yuta root@matdesktop:/mnt/c/Users/yuta# exit logout $ wsl --shutdown Ubuntu-22.04-v2 $ wsl -d Ubuntu-22.04-v2 To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. yuta@matdesktop:/mnt/c/Users/yuta$ yuta@matdesktop:/mnt/c/Users/yuta$ whoami yuta
この方法であれば WSL2 から VS Code を起動した際も、同じユーザーとなります。
オレオレイメージを作成し Devcontainer を活用する日々なので、ユーザーはきちんと揃えておきたいものです。