Sửa lỗi "VS Code Server for WSL closed unexpectedly" Khi Kết Nối WSL

intermediate💻 VS Code2026-05-10| Windows 10/11, WSL2 (Ubuntu 20.04/22.04/24.04), VS Code 1.80+, extension Remote - WSL

Error Message

VS Code Server for WSL closed unexpectedly. Check the WSL terminal for more details.
#wsl#phát-triển-từ-xa#vscode-server#windows

Lỗi Này Là Gì

Bạn nhấn "Connect to WSL" trong VS Code — hoặc chỉ mở một thư mục WSL — và nhận được thông báo sau:

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

Cửa sổ treo khoảng 10–30 giây rồi chết. Không có gì mở ra cả. Lỗi này thường xảy ra ngay sau khi cập nhật Windows, cập nhật VS Code, hoặc khi WSL đang "dở chứng".

Nguyên Nhân

Đằng sau hậu trường, VS Code cài một binary server vào trong distro WSL của bạn tại ~/.vscode-server/ và khởi chạy nó mỗi khi bạn kết nối. Khi tiến trình đó crash hoặc từ chối khởi động, bạn sẽ gặp lỗi này. Các nguyên nhân phổ biến nhất:

  • File server cũ hoặc bị hỏng còn sót lại từ phiên bản VS Code trước
  • Sự cố mạng trong WSL2 — DNS bị lỗi, không có internet để tải binary server
  • Sai quyền truy cập thư mục ~/.vscode-server
  • VS Code đã cập nhật trên Windows nhưng binary server cũ vẫn còn được cache trong WSL
  • WSL bị crash hoặc trạng thái bị hỏng
  • Phần mềm diệt virus (thường là Windows Defender) cách ly binary server

Cách Sửa Từng Bước

Bước 1: Tắt Các Tiến Trình Server Cũ

Mở terminal WSL trực tiếp — tìm "Ubuntu" (hoặc tên distro của bạn) trong Start menu. Đừng mở qua VS Code. Sau đó tắt các tiến trình server còn sót lại:

pkill -f vscode-server
pkill -f node

Xác nhận không còn tiến trình nào sót lại:

ps aux | grep vscode

Bước 2: Xóa Cache VS Code Server

Lệnh đơn này giải quyết vấn đề trong 80% trường hợp. Sau khi cập nhật VS Code, binary server được cache sẽ bị cũ — xóa nó đi sẽ buộc hệ thống tải lại bản mới sạch trong lần kết nối tiếp theo:

rm -rf ~/.vscode-server

Với VS Code Insiders, cũng chạy thêm:

rm -rf ~/.vscode-server-insiders

Thử kết nối lại ngay bây giờ. VS Code sẽ tự động tải đúng phiên bản server.

Bước 3: Kiểm Tra WSL Có Kết Nối Được Internet Không

Lần đầu kết nối, VS Code tải binary server từ máy chủ của Microsoft. Nếu mạng WSL bị lỗi, bước này sẽ âm thầm thất bại.

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

Nếu lệnh bị treo hoặc báo lỗi, DNS của WSL là nguyên nhân. Ghi đè lại như sau:

# Xem nội dung hiện tại
cat /etc/resolv.conf

# Thay bằng nameserver hoạt động được
sudo tee /etc/resolv.conf <<EOF
nameserver 8.8.8.8
nameserver 1.1.1.1
EOF

WSL sẽ tự tạo lại resolv.conf mỗi lần khởi động lại, trừ khi bạn tắt tính năng đó:

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

Bước 4: Khởi Động Lại WSL Hoàn Toàn

Chạy lệnh này từ PowerShell hoặc CMD — không phải từ bên trong WSL:

wsl --shutdown

Chờ khoảng 5 giây, rồi mở lại distro của bạn. Việc tắt hoàn toàn sẽ xóa sạch trạng thái VM của WSL2. Điều này giải quyết các sự cố mạng, tiến trình zombie và các vấn đề khác mà việc đóng terminal thông thường không xử lý được.

Bước 5: Kiểm Tra Dung Lượng Đĩa Và Quyền Truy Cập

Đĩa đầy sẽ âm thầm chặn việc cài server. Kiểm tra trước:

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

Nếu ~/.vscode-server có quyền sai sau khi tạo lại:

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

Bước 6: Đọc Log Của Server

Kết nối vào WSL thủ công và xem thông tin server thực sự nói gì:

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

Tốt hơn nữa — chạy trực tiếp binary để lỗi hiển thị thẳng ra stdout:

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

Gặp lỗi cannot execute binary file? File tải về bị hỏng. Quay lại Bước 2.

Bước 7: Kiểm Tra Windows Defender

Defender đôi khi cách ly binary Node mà VS Code Server phụ thuộc vào. Mở Windows Security → Virus & threat protection → Protection history và tìm bất kỳ mục nào bị gắn cờ từ đường dẫn dạng \\wsl$\Ubuntu\home\...\vscode-server. Nếu tìm thấy, hãy khôi phục file và thêm ngoại lệ cho thư mục đó.

Bước 8: Cài Lại Extension Remote WSL

Đôi khi lỗi nằm ở phía Windows chứ không phải trong WSL. Mở panel Extensions, tìm WSL (ms-vscode-remote.remote-wsl), nhấn biểu tượng bánh răng → Uninstall. Khởi động lại VS Code, rồi cài lại. Thao tác này xóa trạng thái extension bị hỏng đang nằm trong thư mục AppData của bạn.

Bước 9: Phương Án Cuối Cùng — Reset Distro WSL

Biện pháp cuối cùng. Hãy sao lưu dữ liệu trước:

# Trong PowerShell
wsl --export Ubuntu C:\backup\ubuntu-backup.tar

# Xóa và nhập lại
wsl --unregister Ubuntu
wsl --import Ubuntu C:\WSL\Ubuntu C:\backup\ubuntu-backup.tar

Xác Nhận Đã Sửa Xong

  • Mở VS Code trên Windows
  • Nhấn Ctrl+Shift+P → gõ Remote-WSL: New Window
  • Góc dưới bên trái phải hiển thị WSL: Ubuntu (hoặc tên distro của bạn)
  • Mở terminal trong VS Code (Ctrl+``) và chạy uname -a` — bạn sẽ thấy output Linux, không phải Windows
  • Xác nhận tiến trình server đang chạy: ps aux | grep vscode-server

Ngăn Lỗi Tái Phát Sau Khi Cập Nhật

VS Code tự cập nhật trên Windows một cách âm thầm. Binary server cũ vẫn còn được cache trong WSL cho đến lần kết nối tiếp theo dọn dẹp — và đôi khi nó không tự làm vậy. Thêm đoạn script sau vào ~/.bashrc để tự động xóa các phiên bản cũ khi đăng nhập:

# Chỉ giữ lại 2 phiên bản vscode-server gần nhất
if [ -d ~/.vscode-server/bin ]; then
  ls -t ~/.vscode-server/bin | tail -n +3 | xargs -I{} rm -rf ~/.vscode-server/bin/{}
fi

Ngoài ra hãy giữ VS Code luôn được cập nhật trên Windows: Help → Check for Updates. Sự không khớp phiên bản giữa client Windows và binary server WSL là nguyên nhân đáng tin cậy dẫn đến đúng lỗi crash này.

Related Error Notes