まえがき:
素人のセリフだが、「いつもは使えていたのに」「ある日突然」「何もしていないのに」WSLが起動しなくなったが「いろいろやっていたら」直った。
将来同じことで悩むであろう自分のためにメモを残す。
ちゃんとログを取っていないので記憶に頼って書く。
ひどくてスミマセン。
現象:
Windows 10 Proで、WSL2を使用し、Ubuntu 22.04を使っていた。
ふだんはショートカットをダブルクリックしたらbashのコンソールが起動していた。
しかしある日あるとき、ショートカットをダブルクリックしたら、コンソールが一瞬起動してすぐ消える。
何らかのエラーが出ているが動体視力がなくて見えないようだ。
検索:
「wsl 起動しない」で検索すると
- wslをコマンドラインで起動して修復する
- wslconfigをコマンドラインで起動して修復する
などという記事に当たる。
が、普通にWindowsコマンドプロンプト(cmd.exe)を起動してwsl
、wslconfig
と入力しても「指定されたパスが見つかりません」と表示される。
調査:
物理ファイル「wsl.exe」「wslconfig.exe」がどこにあるか調査する。
いくつか方法はあるだろうが、Everything.exeというフリーウェアで検索すると、それぞれ何箇所かで見つかった。
主要なところとしては
- C:\Program Files\WindowsApps\WSL\wsl.exe
- C:\Windows\System32\wslconfig.exe
などが見つかった。
アクセスできない:
「C:\Program Files\WindowsApps」というフォルダーは、一般ユーザーからもAdministratorからも絶対に見つからないパスである。
一般ユーザーとしてcmd.exeからcd \Program Files\WindowsApps
しても「指定されたパスが見つかりません」と言われる。
管理者権限でcmd.exeを起動:
cmd.exeを管理者権限で起動してみる。
いろいろやり方はあるが、以下のようにしている。
- スタートメニューでcmdを検索する
- コマンドプロンプトのアイコンをデスクトップに右クリックドラッグし、ここにショートカットを作成するを選ぶ
- ショートカットを右クリック=>プロパティを選択
- プロパティのショートカットタブの詳細設定ボタンをクリック
- 管理者として実行をチェックオン
- OKを2回クリック
これでこのショートカットをダブルクリックしたら、cmd.exeが管理者として起動する。
アクセスはできた:
Administratorとしてcmd.exeからcd \Program Files\WindowsApps
すると、cdできる。
さらにcd WSL
とすると、wsl.exeのあるフォルダーにcdできる。
ここで.\wsl.exe
と入力しても「指定されたパスが見つかりません」と言われる。
cd \Windows\System32
として.\wslconfig.exe
と入力してもやはり「指定されたパスが見つかりません」と言われる。
どういうこと?
wsl.exeおよびwslconfig.,exeを起動すると、何らかの設定(レジストリ?)によってインストールされたUbuntuを参照しようとして、そのパスが見つからないのだろうか。
(いまだに分からない)
効果がなかったこと:
以下はいろいろやったけど関係ないと思う。
- コントロールパネル=>プログラムと機能=>Linux用Windowsサブシステムを無効化、再起動、最有効化、再起動
- プログラムの追加と削除でUbuntuを削除=>Windows StoreからUbuntuをインストール
- C:\Program Files\WindowsApps\WSLをシステム環境変数に追加
- C:\Windows\System32をシステム環境変数に追加(もともと入ってた)
どうしても「指定されたパスが見つかりません」が消えない。
たぶんこれが決め手:
- 管理者としてcmd.exeを起動
cd \Program Files\WindowsApps\WSL
-
.\wsl.exe --update
(なんかごちょごちょ言っていた)
これでなぜか一般ユーザーとしても、管理者としても、どこのパスにいてもwsl
と入力するとWSLが起動した。
一般ユーザーが作れない:
最初の1回、一般ユーザーのユーザー名と初期パスワードを求められる。
これは普通の現象。
だが、ここで何を入れても「指定されたパスが見つかりません」と言われる。
Ctrl+Cで中断。
(これもいまだになぜか分からない)
rootとして起動してしまう:
もう1度wslで起動すると、プロンプトが「#」。
さっき一般ユーザーを作成できなかったので?rootとして起動してしまう。
以下で解決した。
-
# adduser ユーザー名
で一般ユーザーを追加する -
# gpasswd -a ユーザー名 sudo
でsudo権限を追加する - /etc/wsl.confをnano(かなんか)で編集して、以下のエントリーを追加する
[user]
default=ユーザー名
以上。
原理はまだよくわからないが、とりあえず使えている。
(この項終わり)