连接到远程服务器
每个客户端都只是 cc_server 之上的渲染器,而数据由它掌控。桌面端可以在自身内部运行一个服务器实例;app.usectrl.dev 上的 Web 应用则不行,因为浏览器标签页无法托管服务器。无论哪种情况,本指南都会让客户端指向一个运行在别处的服务器——一台小机器、一台云 VM,或一台构建服务器。
前置条件
标题为“前置条件”的部分- 一个正在运行的
cc_server。如果你还没有,请参阅运行无界面服务器。 - 要么是服务器生成的三个配对值——服务器 URL(
ws://…/rpc或wss://…/rpc)、设备 ID 和配对密钥——要么是工作区管理员给出的一次性邀请码。兑换邀请码会为你预配用户、记录你的成员资格,并为你生成本客户端的凭据,因此你完全不必接触设备 ID 或密钥。
确认服务器可访问
标题为“确认服务器可访问”的部分本地服务器无需任何额外配置:ws://localhost:9030/rpc 在桌面端和浏览器中都能正常工作,因为浏览器把环回地址视为可信来源。
另一台机器上的服务器则不同。app.usectrl.dev 通过 HTTPS 提供,因此浏览器只会用自己已经信任的证书去建立 wss:// 套接字——而且 cc_server 本身也拒绝在没有 TLS 的情况下绑定非环回地址。请为它提供以下之一:
- 直接提供证书,使用
--tls-cert和--tls-key - 在前面部署一个负责终止 TLS 的反向代理,并以
--insecure启动服务器(代理之后为明文,仅限可信网络) - 由隧道或 VPN 提供证书——Tailscale、cloudflared 或类似方案。设置 → 服务器 → 连接与状态在共享此服务器下提供了内置隧道的启用选项。
服务器端有两项设置很容易被忽略。在代理、NAT 或隧道之后,请把 --public-url 设为客户端实际应连接的地址——它默认取本地绑定地址,因此不设置的话客户端会尝试错误的主机。另外,如果你自行托管 Web 构建的副本,请把它的源加入 --allowed-origins;该选项默认只允许 https://app.usectrl.dev。环回地址和原生客户端始终被允许。
连接桌面应用
标题为“连接桌面应用”的部分全新安装时:
- 启动 Control Center。首次运行界面会询问 Control Center 应如何运行?
- 不要选择在此应用中运行,而是填写连接字段:服务器 URL,以及邀请码,或设备 ID 与配对密钥。
- 点击连接。Control Center 会连接服务器,并进入工作区收件箱。
对于已经在运行自己服务器的桌面端:
- 打开设置 → 服务器 → 连接与状态。
- 点击添加服务器。输入服务器 URL(
wss://host:9030/rpc),以及邀请码,或设备 ID 与配对密钥。URL 字段的后缀按钮会在你的局域网或 tailnet 上发现cc_server实例。 - 点击连接,然后在新服务器所在行点击切换。
切换是实时的:应用会就地围绕新会话重建,无需重启。如果连接失败,你会留在当前服务器上并看到错误。你当前所在服务器的那一行没有切换操作;本地服务器是第一行,标记为在此应用中运行。
切换之后,桌面端不再持有数据库。每个界面都通过 WebSocket 经由远程服务器读写。
连接 Web 客户端
标题为“连接 Web 客户端”的部分Web 构建始终是远程的。
- 打开 app.usectrl.dev,或你自己的 Web 构建副本。
- 输入服务器 URL,以及邀请码,或设备 ID 与配对密钥。
- 客户端会连接服务器,并渲染出与桌面端相同的界面。
如果 URL 中包含配对深度链接,这些字段会预先填好。配对密钥位于 URL 的片段中,浏览器绝不会把它发送给托管页面的服务器,因此静态托管方永远看不到它。
浏览器做不到的事
标题为“浏览器做不到的事”的部分Web 客户端读写的是与桌面端相同的服务器,但有几个功能需要原生窗口或本机自带的设备:
- 没有操作系统通知弹窗、通知声音或常驻横幅栏(应用内通知中心仍然可用)
- 在添加服务器对话框中无法发现局域网或 tailnet 上的服务器
- 没有应用内文章阅读器——新闻流文章会在新标签页中打开
- 无法重新运行会议摘要,也无法取消正在处理的摘要
有两项并非缺失,只是行为不同。会议录制在浏览器中可用,会采集你的麦克风,以及带音轨的屏幕共享。在 IDE 中打开同样可用,但它会请求服务器在_服务器_的显示器上启动编辑器,因此在没有安装任何编辑器的无界面主机上,该按钮会自行隐藏。
故障排除
标题为“故障排除”的部分- 连接超时:服务器必须能从客户端访问。检查绑定地址(
--bind any)、端口是否开放,以及--public-url是否指向客户端实际能连接的地址。在开放互联网上,TLS 是强制性的——除非服务器是在代理之后以--insecure启动的,否则明文的非环回绑定会在启动时被拒绝。 - 浏览器拒绝连接,但原生客户端正常:浏览器的源不在服务器的
--allowed-origins列表中。默认只允许https://app.usectrl.dev(外加环回地址)。 - 配对密钥被拒绝:在服务器上重新运行
cc_server pair以轮换该设备的密钥,然后输入新的密钥。被撤销的设备会发现自己的凭据已不存在,因此失败即关闭;撤销会在几秒内断开活动会话。 - 工作区错误:工作区是 URL 的一部分(
/workspaces/:workspaceId/…),并随每次调用一同传递,因此在一个客户端中切换工作区只会改变你自己的视图。你只能访问自己所属的工作区——其他任何工作区都会被以 “Not a member of this workspace” 拒绝。参见工作区与隔离。