Code-Server 使用微软 vs Code 扩展商店
目录
最近折腾了一下 code-server 使用微软 VS Code 扩展商店,过程里踩了两个坑,记录一下。
,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 再用一层单引号包起来。
额外说明
我这里实际运行的是用户服务:
code-server.service所以改的是:
~/.config/systemd/user/code-server.service.d/override.conf不是系统级的 [email protected]。
最后
这样配置后,我这边已经可以正常打开页面,也可以使用微软扩展商店。