最終更新:2021-05-22
WSL で起動時デフォルト ユーザの変更が必要な理由と手順を解説します。Linux を tar アーカイブから wsl.exe でインポートした場合には wsl.conf を変更します。マイクロソフト ストアからインストールした場合にはコマンドが付属しています。対応レジストリも紹介します。
目次: 一般論として、Linux をインストールした直後の状態では root ユーザのみが存在します。その後に新規の一般ユーザの追加を行います。 この様な状態では運用が出来ませんので、WSL 起動時のデフォルト ユーザを所望のユーザに変更しておく必要が有ります。 Windows PowerShell から
デフォルト ユーザの変更が必要な理由:
WSL で起動時のデフォルト ユーザを root のまま使用してしまうと、Linux から 一般ユーザとしてWindows コマンドを実行した場合でも root 権限で実行され、作成されるファイルの所有者が root となってしまいます。
例えば bash から code .
コマンドで VSCode (Visual Studio Code) を起動し、VSCode 内のマウス操作でビルドを行うと、中間ファイルや実行形式ファイルは全て所有者が root になってしまいます。また、ログ ファイルもユーザ ディレクトリ ~/.vscode
/root/.vscode
自力で tar アーカイブからインポートしてインストールした場合:
wsl.exe --import
コマンドで tar アーカイブ (tarball) からインストールした場合は、
インストールした Linux 上に /etc/wsl.conf
を作成します。
ファイルには次の内容を記載します。username
が起動時のデフォルト ユーザとなります。尚、この方法ではレジストリの変更は行われません。
設定は WSL をシャットダウンして再起動した後に有効になります。WSL のシャットダウンは、PowerShell から次のコマンドで行います。シャットダウンは個別のウィンドウ毎には行えませんので、必ず全ての WSL ウィンドを閉じてからコマンドを実行します。[user]
default=username
wsl --list --verbose
wsl --shutdown
wsl --list --verbose
Microsoft Store からインストールした場合:
Microsoft Store から Microsoft 社が提供している純正のパッケージを使用してインストールした場合には、PowerShell からコマンドで変更します。但し、コマンドはパッケージ毎に変わります。また、コマンドを実行するとレジストリが変更されます。
Distribution | Command |
---|---|
Ubuntu-20.04 | ubuntu20.04 config --default-user username |
Ubuntu | ubuntu config --default-user username |
コマンドは、次のフォルダにインストールされていますので、上述とは別のディストリビューションを Microsoft Store からインストールしている場合には御自身で確認なさってください。
- エクスプローラやコマンドプロンプトの場合
C:\Users\%USERNAME%\AppData\Local\Microsoft\WindowsApps\
- PowerShell の場合
C:\Users\$env:USERNAME\AppData\Local\Microsoft\WindowsApps\
対応するレジストリ:
WSL の各ディストリビューションの状態は、Windows のレジストリに記録されています。
次のレジストリ階層に、各ディストリビューションに自動で割り当てられた番号毎に階層化されて格納されています。
\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\
この階層中から、ディストリビューション名がDistributionName
レジストリと一致する物を探し出します。探し出した階層中の DefaultUid
レジストリが /etc/passwd ファイルの uid となります。通常は uid は十進で 1000 番からが一般ユーザーに割り当てられます。つまり16進では 0x000003e8
からとなります。
【広告】
トラブル発生時の対応:
Linux 側でのトラブルによりデフォルトユーザでの起動が出来なくなってしまった場合、PowerShell から次のコマンドを打つと root でログイン可能です。尚、ディストリビューション名にはリスト表示で得られた名称を正確に記入します。
wsl --list
wsl -d distribution -u root
【広告】