拓冰建站拓冰建站
首页 / 资讯中心 / 正文

如何为 Cua Fleet 上的 Omarchy 桌面添加基于浏览器的 noVNC 访问?

如何为 Cua Fleet 上的 Omarchy 桌面添加基于浏览器的 noVNC 访问【免费下载链接】cuaScale computer-use 2.0 with open-source drivers, cross-OS fleets, and benchmarks for training, evaluation, and data generation.项目地址: https://gitcode.com/GitHub_Trending/cua/cua在 Cua Fleet 上跑着 Omarchy 桌面的前提下你可能已经通过 Cua Sandbox SDK 的截图和鼠标键盘接口操作它但缺少一个可以实时点击的浏览器显示。这篇文章的目标是把 noVNC 接入这台 Fleet 桌面在 pool 定义里增加一个名为vnc的 Fleet service在 guest 内部安装 noVNC 1.7.0 和 websockify 0.13.0把 guest 自带的 WayVNC 收拢到 loopback 端口最后通过 Fleet 的/api/svc认证代理在浏览器里打开桌面。整条链路是Browser - Fleet /api/svc proxy - websockify :5900 - WayVNC :5902 - Hyprland注意边界Fleet 只把 HTTP 和 WebSocket 端点暴露给浏览器不会把 guest 的原始 VNC TCP 端口暴露到公网。前置条件开始之前需要具备一个可以更新的 Omarchy pool 定义一个处于激活状态、能进入 guest shell 的 Fleet claim一个可以登录 Cua 的浏览器。如果还没有 pool 和 claim先按 Run Omarchy on Fleet 完成创建。该指南要求 Python3.11,3.14、uv、cua-sandbox0.4.3以及可以管理 pool 的 Fleet access token 或 OAuth client credentials并用 amd64 的 KubeVirt containerDisk 镜像public.ecr.aws/k5j5w0x5/cua-omarchy-workspacesha256:dc448dcc986f443980dfb3586f1b91d8699091ad96a74b369016535f0dbb0342创建 pool。在 pool 定义中增加 vnc 服务把 guest 端口5900命名为vnc的 service 加入 pool 定义pool await Pool.apply( image, namePOOL_NAME, replicas1, cpu4, memory_mb6144, services{server: 8000, mcp: 3000, vnc: 5900}, ttl_seconds_after_created21600, )apply pool 之后创建 claim。如果修改服务时已有 sandbox 绑定在 claim 上而它当前的 service 列表里没有vnc就需要创建一个新的 claim。不要额外把端口5902暴露成另一个 Fleet service那是 WayVNC 在 guest 内部使用的原始 RFB 端口只有5900上的 noVNC 桥接需要 Fleet service。在 guest 内安装 noVNC 和 websockify在已 claim 的 Omarchy guest 中打开 shell。下面的脚本从 GitHub 下载 noVNC1.7.0与 websockify0.13.0的发行版和源码包写入全部位于$HOME之下$HOME/.local/share/omarchy-vnc不修改系统目录websockify 装进独立 venvNOVNC_VERSION1.7.0 WEBSOCKIFY_VERSION0.13.0 VNC_ROOT$HOME/.local/share/omarchy-vnc NOVNC_ARCHIVE$VNC_ROOT/noVNC-v${NOVNC_VERSION}.tar.gz WEBSOCKIFY_VENV$VNC_ROOT/websockify-venv install -d $VNC_ROOT curl --fail --location \ https://github.com/novnc/noVNC/archive/refs/tags/v${NOVNC_VERSION}.tar.gz \ --output $NOVNC_ARCHIVE tar --extract --gzip --file $NOVNC_ARCHIVE --directory $VNC_ROOT python3 -m venv $WEBSOCKIFY_VENV $WEBSOCKIFY_VENV/bin/python -m pip install \ websockify${WEBSOCKIFY_VERSION}Omarchy Fleet 镜像会随 Hyprland 图形会话启动 WayVNC。经验证的做法是把 WayVNC 的原始 RFB 监听挪到 loopback 的5902把5900留给面向 Fleet 的桥接。下面这段通过 systemd user override 重启wayvnc.serviceinstall -d $HOME/.config/systemd/user/wayvnc.service.d tee $HOME/.config/systemd/user/wayvnc.service.d/override.conf /dev/null EOF [Service] ExecStart ExecStart/usr/bin/wayvnc 127.0.0.1 5902 EOF systemctl --user daemon-reload systemctl --user restart wayvnc.service把 websockify 挂成用户服务创建 systemd user 服务让 websockify 在5900上托管 noVNC 的静态页面并把 WebSocket 流量桥接到127.0.0.1:5902的 WayVNC 监听install -d $HOME/.config/systemd/user tee $HOME/.config/systemd/user/omarchy-websockify.service /dev/null EOF [Unit] DescriptionnoVNC bridge for the Omarchy graphical session Afterwayvnc.service Requireswayvnc.service PartOfgraphical-session.target ConditionEnvironmentWAYLAND_DISPLAY [Service] Typesimple ExecStart%h/.local/share/omarchy-vnc/websockify-venv/bin/websockify --web%h/.local/share/omarchy-vnc/noVNC-1.7.0 0.0.0.0:5900 127.0.0.1:5902 Restartalways RestartSec3 [Install] WantedBygraphical-session.target EOF systemctl --user daemon-reload systemctl --user enable --now omarchy-websockify.service这个服务随图形会话一起重启并且依赖已有的wayvnc.service先就绪ConditionEnvironmentWAYLAND_DISPLAY保证它只在 Wayland 会话存在时运行。验证 guest 内的两个服务在 guest shell 里检查两个 user 服务的状态并从 guest 内部请求 noVNC 页面systemctl --user is-active wayvnc.service omarchy-websockify.service curl --fail --silent --show-error --output /dev/null \ http://127.0.0.1:5900/vnc.html成功条件是两条is-active检查都输出active且curl请求返回成功。任一项失败时用下面的命令查看最近日志journalctl --user \ --unit wayvnc.service \ --unit omarchy-websockify.service \ --no-pager --lines 100登录浏览器并在 claim 页面打开桌面打开 Cua 认证页面https://cua.ai/auth并登录之后连接 Fleet 服务时保持使用同一个浏览器配置文件。Fleet access token 或 OAuth client ID/secret 只用于认证 Sandbox SDK不会创建浏览器会话未认证的浏览器请求访问/api/svc会被重定向到交互式登录流程。然后打开 Fleet 中该 claim 的详情页面。当绑定的 sandbox 就绪、且 pool 暴露了名为vnc的 service 时页面会出现Desktop面板。等状态变为Connected再点击或向桌面输入内容确认输入能到达 Omarchy。如果面板在 sandbox 启动期间断开了点击Reconnect。直接打开 noVNC URL也可以不走 claim 页面直接打开 noVNC 页面。从 claim 详情页面复制 namespace 和绑定的 sandbox 名称替换 URL 中的占位符https://run.cua.ai/api/svc/NAMESPACE/SANDBOX_NAME-vnc/vnc.html?autoconnect1resizescalereconnect1页面通过同一个认证服务代理连接这个 WebSocket 端点wss://run.cua.ai/api/svc/NAMESPACE/SANDBOX_NAME-vnc/websockify其中NAMESPACE和SANDBOX_NAME分别替换为 claim 详情页面显示的 namespace 和绑定的 sandbox 名称——用 sandbox 名而不是 claim 名-vnc后缀来自 Fleet service 名。连接异常时按现象排查URL 被重定向到登录页在https://cua.ai/auth登录后用同一浏览器配置文件重新打开 noVNC URLSDK 的 OAuth 凭据不能替代这一步。服务 URL 返回 404核对 namespace 与绑定 sandbox 名是否和 claim 详情页一致并确认 pool 暴露了5900端口上的vncservice。页面加载但 noVNC 断开确认两个 user 服务都 active并在 guest 内用ss --listening --tcp --numeric --processes检查5900和5902是否在监听。桌面黑屏或冻结用pgrep -a Hyprland确认 Hyprland 在运行然后重启wayvnc.service和omarchy-websockify.service。原生 VNC 客户端连不上这是预期行为。Fleet 的服务路由承载的是认证过的 HTTPS 和 WebSocket 流量不是公开的原始 VNC TCP socket请使用 claim 的 Desktop 面板或 noVNC 页面。停止浏览器访问不再需要桥接时在 guest 内禁用它的 user servicesystemctl --user disable --now omarchy-websockify.service在下一次 apply pool 模板之前从 pool 的services映射中删除vnc条目VM 不再需要时删除对应的 claim 或 pool。【免费下载链接】cuaScale computer-use 2.0 with open-source drivers, cross-OS fleets, and benchmarks for training, evaluation, and data generation.项目地址: https://gitcode.com/GitHub_Trending/cua/cua创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门