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ạyuname -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.

