WSLへの接続時に「VS Code Server for WSL closed unexpectedly」を修正する

intermediate💻 VS Code2026-05-10| Windows 10/11、WSL2(Ubuntu 20.04/22.04/24.04)、VS Code 1.80以降、Remote - WSL拡張機能

Error Message

VS Code Server for WSL closed unexpectedly. Check the WSL terminal for more details.
#wsl#remote-development#vscode-server#windows

エラーの内容

VS Code で「WSL に接続」をクリックするか、WSL フォルダーを開こうとすると、次のエラーが表示されます:

VS Code Server for WSL closed unexpectedly. Check the WSL terminal for more details.

ウィンドウが 10〜30 秒間フリーズした後、接続が切れて何も開きません。Windows のアップデート後、VS Code のアップデート後、または WSL の調子が悪い日に発生しやすい傾向があります。

原因

VS Code は接続時に WSL ディストリビューション内の ~/.vscode-server/ にサーバーバイナリをインストールし、接続のたびにそれを起動します。このプロセスがクラッシュしたり起動を拒否したりすると、このエラーが発生します。主な原因は次のとおりです:

  • 古い VS Code バージョンから残った古いまたは破損したサーバーファイル
  • WSL2 のネットワーク問題 — DNS の障害、サーバーバイナリ取得のためのインターネット接続不可
  • ~/.vscode-server のパーミッション不正
  • Windows 側の VS Code は更新済みだが、古いサーバーバイナリが WSL 内にキャッシュされたまま
  • WSL 自体のクラッシュまたは状態の破損
  • アンチウイルス(主に Windows Defender)によるサーバーバイナリの隔離

手順ごとの修正方法

ステップ 1:残留サーバープロセスを終了する

VS Code を経由せず、スタートメニューで「Ubuntu」(またはお使いのディストリビューション名)を検索して WSL ターミナルを直接開きます。その後、残留しているサーバープロセスを終了します:

pkill -f vscode-server
pkill -f node

残存プロセスがないことを確認します:

ps aux | grep vscode

ステップ 2:VS Code サーバーキャッシュを削除する

このコマンド一つで 80% のケースが解決します。VS Code の更新後、キャッシュされたサーバーバイナリが古くなるため、削除することで次回の再接続時にクリーンなダウンロードが強制されます:

rm -rf ~/.vscode-server

VS Code Insiders を使用している場合は、以下も実行します:

rm -rf ~/.vscode-server-insiders

この後、再接続を試みてください。VS Code が正しいバージョンのサーバーを自動的にダウンロードします。

ステップ 3:WSL からインターネットに接続できるか確認する

初回接続時、VS Code は Microsoft のサーバーからサーバーバイナリをダウンロードします。WSL のネットワークが壊れていると、このステップがサイレントに失敗します。

curl -I https://update.code.visualstudio.com

ハングしたりエラーになる場合は、WSL の DNS が原因です。次のように上書きします:

# 現在の内容を確認
cat /etc/resolv.conf

# 動作するネームサーバーに置き換える
sudo tee /etc/resolv.conf <<EOF
nameserver 8.8.8.8
nameserver 1.1.1.1
EOF

この動作を無効にしない限り、WSL は再起動のたびに resolv.conf を再生成します:

# /etc/wsl.conf に追記
sudo tee -a /etc/wsl.conf <<EOF
[network]
generateResolvConf = false
EOF

ステップ 4:WSL を完全に再起動する

WSL 内からではなく、PowerShell または CMD から実行します:

wsl --shutdown

約 5 秒待ってから、ディストリビューションを再度開きます。完全シャットダウンにより WSL2 の VM 状態が完全にリセットされ、ターミナルを閉じるだけでは解消されないネットワークの不具合、ゾンビプロセス、その他の問題が解決されます。

ステップ 5:ディスク容量とパーミッションを確認する

ディスクが満杯の場合、サーバーのインストールがサイレントに失敗します。まず確認します:

df -h ~
ls -la ~ | grep .vscode

再作成後に ~/.vscode-server のパーミッションが正しくない場合:

chmod 755 ~/.vscode-server
chown -R $USER:$USER ~/.vscode-server

ステップ 6:サーバーログを確認する

WSL に手動で接続し、サーバーの実際の出力を確認します:

ls ~/.vscode-server/
cat ~/.vscode-server/bin/*/server.log 2>/dev/null || echo "No log yet"

さらに効果的な方法として、バイナリを直接実行してエラーを標準出力に表示させます:

~/.vscode-server/bin/*/server.sh --port 0 --host 127.0.0.1

cannot execute binary file が表示される場合、ダウンロードが破損しています。ステップ 2 に戻ってください。

ステップ 7:Windows Defender を確認する

Defender が VS Code Server に必要な Node バイナリを隔離することがあります。Windows セキュリティ → ウイルスと脅威の防止 → 保護の履歴 を開き、\\wsl$\Ubuntu\home\...\vscode-server のようなパスからフラグが立てられたものがないか確認します。見つかった場合は、ファイルを復元してそのフォルダーを除外リストに追加してください。

ステップ 8:Remote WSL 拡張機能を再インストールする

問題が WSL 側ではなく Windows 側にある場合があります。拡張機能パネルを開き、WSLms-vscode-remote.remote-wsl)を見つけ、歯車アイコン →アンインストールをクリックします。VS Code を再起動して、再インストールします。これにより AppData フォルダー内に蓄積された拡張機能の破損状態がクリアされます。

ステップ 9:最終手段 — WSL ディストリビューションをリセットする

最終手段です。事前にデータをバックアップしてください:

# PowerShell で実行
wsl --export Ubuntu C:\backup\ubuntu-backup.tar

# 削除して再インポート
wsl --unregister Ubuntu
wsl --import Ubuntu C:\WSL\Ubuntu C:\backup\ubuntu-backup.tar

修正の確認

  • Windows で VS Code を開く
  • Ctrl+Shift+P を押して Remote-WSL: New Window と入力する
  • 左下隅に WSL: Ubuntu(またはお使いのディストリビューション名)が表示されることを確認する
  • VS Code 内でターミナルを開き(Ctrl+``)、uname -a` を実行する — Windows ではなく Linux の出力が表示されるはず
  • サーバープロセスが動作していることを確認する:ps aux | grep vscode-server

アップデート後の再発を防ぐ

VS Code は Windows 上でサイレントに自動更新されます。古いサーバーバイナリは次回の接続時にクリーンアップされるはずですが、されないこともあります。ログイン時に古いバージョンを自動的に削除するために、次のスニペットを ~/.bashrc に追加してください:

# 最新の 2 バージョンの vscode-server のみ保持する
if [ -d ~/.vscode-server/bin ]; then
  ls -t ~/.vscode-server/bin | tail -n +3 | xargs -I{} rm -rf ~/.vscode-server/bin/{}
fi

また、Windows 側の VS Code も常に最新の状態に保ちましょう:ヘルプ → 更新の確認。Windows クライアントと WSL サーバーバイナリのバージョン不一致は、このクラッシュを確実に引き起こす原因になります。

Related Error Notes