vscode离线启动失败、remote-ssh连不上、插件不生效、中文界面不切换,根本原因是各环节默认联网(dns/http),需分别通过启动参数、配置禁用遥测与execserver、手动部署server、预下载插件依赖、正确安装语言包并清理缓存进程来解决。

VSCode 启动时提示“无法验证许可证”或卡在初始化界面
这是离线环境下最典型的启动失败现象,本质是 VSCode 启动流程中默认会尝试连接微软服务器校验产品状态(哪怕你用的是免费版)。它不依赖激活码,但会发起 DNS 查询;一旦超时,UI 就会阻塞或降级为只读模式。
关键不是“绕过验证”,而是让校验逻辑快速失败并跳过——VSCode 本身支持这个行为,只需一个启动参数:
- Windows:用命令行启动,加
--disable-gpu --no-sandbox --disable-extensions,其中--disable-extensions能避免扩展触发的额外网络请求 - Linux/macOS:同上,但更关键的是先确保
~/.vscode/argv.json里没残留"telemetry.enableTelemetry": true这类字段(离线时 telemetry 会卡住主进程) - 所有平台:首次启动前,删掉
~/.vscode/telemetry目录(如果存在),否则它可能在后台持续重试上报
Remote-SSH 连不上 Ubuntu 服务器,报错 “Failed to download vscode-server”
这不是连接问题,而是 VSCode 默认启用的 execServer 模式在强制联网下载服务端组件。离线局域网里必须关掉它,并手动部署 server。
- 本地 Windows 上,编辑
%APPDATA%\Code\User\settings.json,加入"remote.SSH.useExecServer": false - Ubuntu 服务器上,创建
~/.vscode-server/data/Machine/settings.json,内容同样为{"remote.SSH.useExecServer":false} - 去有网机器查你本地 VSCode 的 commit-id(帮助 → 关于 → 复制那串 40 位哈希),再用链接
https://update.code.visualstudio.com/commit:<commit-id>/server-linux-x64/stable</commit-id>下载 tar.gz 包,解压到~/.vscode-server/bin/<commit-id>/</commit-id> - 别漏掉权限:运行
chmod -R 755 ~/.vscode-server/bin/<commit-id></commit-id>
插件安装后不生效,Python 补全/调试面板空白
离线环境里,“已安装”不等于“已激活”,更不等于“已就绪”。语言类插件(如 ms-python.python)首次启用时,会静默拉取 pyright 或 debugpy 二进制,没有网络就卡住。
- 必须在有网机器上完整走一遍流程:打开 .py 文件 → 触发一次补全 → 等状态栏不再显示 “Downloading…” → 再打包整个
~/.vscode/extensions/ms-python.python-*/out和~/.vscode/extensions/ms-python.python-*/dist目录过去 - 离线机上,检查
~/.vscode/extensions/ms-python.python-*/package.json里的"engines": {"vscode": "^1.90.0"}是否匹配你本地 VSCode 版本(code --version输出的前两位) - 重启 VSCode 前,先用任务管理器杀掉所有
Code Helper进程,否则旧进程会缓存失败状态
中文界面不切换,右下角始终显示 en
双击 .vsix、拖拽、甚至 code --install-extension 都不能真正注册语言包——VSCode 自 1.70 起已禁用这些路径的自动激活逻辑。
- 唯一可靠方式:Ctrl+Shift+P → 输入
Extensions: Install from VSIX→ 选中ms-ceintl.vscode-language-pack-zh-hans-*.vsix - 安装完不要点启用,直接改配置:在设置里搜
locale,把值设为"zh-cn"(注意是短横线,不是下划线,且必须小写) - 改完必须彻底退出 VSCode:Windows 杀光所有
Code.exe,macOS/Linux 执行pkill -f "Code Helper",再重新打开 - 如果还无效,检查
~/.vscode/argv.json是否含"locale"字段冲突,有就删掉
Developer: Toggle Developer Tools → Console 标签页,看有没有 net::ERR_INTERNET_DISCONNECTED 或 getaddrinfo ENOTFOUND —— 这才是你该动手的地方。











