Code-Server 使用微软 vs Code 扩展商店

目录

code-server 换用微软 VS Code 扩展商店,配置项是 EXTENSIONS_GALLERY 环境变量。systemd --user 的 override 这样写:

[Service]
Environment='EXTENSIONS_GALLERY={"serviceUrl":"https://marketplace.visualstudio.com/_apis/public/gallery","itemUrl":"https://marketplace.visualstudio.com/items","resourceUrlTemplate":"https://%%7Bpublisher%%7D.vscode-unpkg.net/%%7Bpublisher%%7D/%%7Bname%%7D/%%7Bversion%%7D/%%7Bpath%%7D","controlUrl":"","recommendationsUrl":""}'

服务名也是 code-server.service 的话,直接执行:

systemctl --user edit code-server.service

把上面的内容填进去,然后重载并重启:

systemctl --user daemon-reload
systemctl --user restart code-server.service

可以用下面这条确认变量有没有正确注入:

systemctl --user show code-server.service -p Environment

正常情况下应该看到一整段合法 JSON,而不是被拆坏的内容。

我踩到的两个坑

I. % 要写成 %%

resourceUrlTemplate 里有 %7B、%7D 这种 URL 编码。

systemd 的 unit 会把 % 当 specifier 处理,直接写 %7Bpublisher%7D 的话,服务日志会报类似错误:

Failed to resolve specifiers ... ignoring: Invalid slot

所以这里必须把 % 写成 %%。

II. 整个值要再包一层引号

直接这样写:

Environment=EXTENSIONS_GALLERY={"serviceUrl":"..."}

systemd 实际传给进程的值会把 JSON 里的双引号吃掉,最后变成非法 JSON,code-server 直接 500。

所以要这样写:

Environment='EXTENSIONS_GALLERY={"serviceUrl":"..."}'

也就是把整个 KEY=VALUE 再用一层单引号包起来。

额外说明

我跑的是用户服务,改的文件是:

~/.config/systemd/user/code-server.service.d/override.conf

不是系统级的 code-server@.service。

配置完重载重启,页面能正常打开,微软扩展商店也能正常用。

编辑此页

目录