博客/端口与 VNC

亲眼看到 Claude Code 和 Codex 做出来的东西:手机上的端口转发与 VNC

2026-07-23

在手机上跑 Claude Code 或 Codex 这件事早就不难了——SSH 连上,任务放进 tmux跑完收推送。终端始终没解决的是验证:agent 说布局修好了,diff 看着也合理,build 是绿的,但「长得对不对」是另一回事。在电脑上你会扫一眼浏览器或模拟器,而在普通 SSH 客户端里没有东西可扫——你只能选择信或者不信。

ServerCC 里有两个专门用来「看」的工具,都走你已经连着的那条 SSH。端口访问通过 SSH 隧道,把服务器上任意在监听的 HTTP 服务打开在内置浏览器里;VNC 直接给你看那台机器的屏幕。两个加起来,agent 能产出的东西基本都覆盖了。

端口访问:不用部署就能看 dev server

端口访问会列出服务器上所有在监听的 TCP 端口,旁边标着进程名——5173 是 node,8000 是 python。点一下,ServerCC 建立一条 SSH 本地转发,在内置浏览器里打开页面。服务全程不需要能从公网访问:绑在服务器的 localhost 上就行,不用改防火墙,不用配反向代理,也不用开一条用完即弃的 ngrok 隧道。只要手机能 SSH 到那台机器,就能看到那个页面。

这个浏览器是为检查布局设计的:「页面视图」可以在移动版和桌面版之间切换;虽然 App 本身只支持竖屏,这里能临时解锁横屏;agent 改完代码,点刷新就是最新效果。它还跑在一条独立的 SSH 连接上,页面加载再重也不会卡住旁边的终端会话。一个要知道的限制:隧道只走 http://——反正 dev server 本来也是这个协议。

VNC:当结果不是一个网页

很多 agent 的产出根本没有 URL:模拟器里的 iOS App、桌面应用、matplotlib 弹出的图、你想开着 devtools 的浏览器。这些就交给内置 VNC 客户端——连 macOS 屏幕共享(ARD)或任何标准 VNC 服务器,可以走 SSH 隧道、直连,或者 Tailscale。

这是一个真正的远程桌面会话,不是让你眯着眼看的截图流。双指缩放看真实像素,点按就是点击,键盘上方的辅助行补齐了触屏键盘缺的键——Esc、Tab、方向键,以及可锁定的 Ctrl / Shift / Alt / ⌘,快捷键都按得出来。两档画质模式在色深和带宽之间取舍,蜂窝网络下也能用。

例子:iOS 开发,对着模拟器验收

家里的 Mac 在开发一个 iOS App,而你人在外面。Claude Code 刚重做了设置页,汇总里声称一切都对齐了。你在终端里让它「重新编译、装进模拟器、重新启动」,它在 Mac 上跑的其实就是:

xcodebuild -scheme MyApp \
  -destination 'platform=iOS Simulator,name=iPhone 16' build
xcrun simctl install booted path/to/MyApp.app
xcrun simctl launch booted com.example.myapp

然后打开 VNC。Mac 的屏幕出现,模拟器就在正中间。放大导航栏,按真实像素检查间距;像在真机上一样点着走一遍流程;点进搜索框输入几个字,看键盘弹起后布局会不会乱。发现哪一行的 padding 不对,切回终端告诉 Claude 是哪一行,看着它重新编译——再切回 VNC。终端和桌面在同一个 App 里,这个循环一轮快到在超市排队时就能跑完。

例子:Web 开发,什么都不用发布

另一个常见场景:Claude 在写一个 Web UI,dev server 跑在 :5173,绑在开发机的 localhost 上。什么都没部署,也没有一个能发给自己的预发布链接。打开端口访问,列表里已经有 node · 5173,点开,页面就通过隧道渲染在内置浏览器里。

在这里检查移动端断点,天然就是诚实的——你看的是真实手机宽度的视口、真实的触摸目标,不是拖窄的桌面窗口。然后把页面视图切到桌面版、转成横屏,看宽布局。agent 又提交了一个改动?点刷新。整个过程网站始终是私有的:碰过网络的只有那条 SSH 连接。

什么时候用哪个

能在浏览器里渲染的,用端口访问——文字更锐利,滚动是原生的,移动端检查也更真实。其余的一切——模拟器、原生应用、devtools、只存在于屏幕上的东西——用 VNC。细节都在文档里:端口访问VNC 远程桌面。想从零搭起整套工作流,从 Claude Code 手机版指南开始。