返回博客
VNC Client6 min read

VNC 连不上 Mac:黑屏、密码错误、端口不通的排查

VNC 连不上时最容易做错的判断是「换一个客户端试试」。客户端只是链条的一端,另外三端是服务端、网络和认证。按顺序排查,通常五分钟内能定位。

先看这张速查表,再看下面每一层的细节。

现象 最可能的原因 先做这一步
连接被拒绝 屏幕共享没开,或端口不通 目标机确认共享已开,再用 nc -vz 主机 5900 测端口
一直转圈后超时 网络不可达、防火墙丢包 同网段先测通不通,再查跨网路径
提示认证失败 用了登录密码而不是 VNC 密码 共享设置里勾选并重设 VNC 密码
提示「不受支持的认证方式」 客户端与服务端的 RFB 认证不兼容 换客户端,或改用「仅这些用户」的账号认证
连上但黑屏 机器休眠、锁屏,或没有用户登录 打开唤醒以供网络访问,必要时先 SSH 登录
画面花屏、卡顿 色深或编码不匹配,带宽不足 降低色深,换 Tight 或 ZRLE 编码
键鼠不同步 输入法、修饰键映射问题 关掉本地的输入法切换,检查 Cmd/Ctrl 映射

上表是按「你看到什么」查,下面这张是按「按顺序走」排。两种方式可以配合:先用表定位现象,再按顺序确认前面几层都已经排除。

排查三步:确认屏幕共享已打开、端口可达、凭据匹配

第一层:服务端

macOS 的屏幕共享要通过 系统设置 → 通用 → 共享 打开。两个高频坑:

  • 远程管理抢占了服务:屏幕共享和远程管理互斥,开了远程管理,屏幕共享会被关掉,设置项也会变灰
  • 没有用户登录:Mac 重启后停在登录窗口时,VNC 能看到登录界面,但某些客户端在登录前就报错

顺带确认「唤醒以供网络访问」已打开,否则机器休眠后连接必然失败。

第二层:端口与网络

VNC 默认走 TCP 5900,同一台机器的第二块屏从 5901 开始。先测端口,再谈客户端:

# 端口通不通
nc -vz 192.168.1.20 5900
# 顺便看一下服务是否在监听
ssh user@192.168.1.20 "netstat -an | grep 5900"

常见结论:

  • Connection refused:主机可达,但端口没开,回到第一层
  • Operation timed out:包被丢掉,检查防火墙、路由器 AP 隔离、云主机安全组
  • 局域网通、跨网不通:这是路由或 NAT 的问题,不是 VNC 的问题

在 macOS 上放行服务:系统设置 → 网络 → 防火墙 → 选项,确认「屏幕共享」被允许。

第三层:认证

认证失败的原因集中在三处:

  1. 输的是 macOS 登录密码,服务端等的是 VNC 密码
  2. 账号加了「仅这些用户」,但当前账号不在列表里
  3. 客户端版本太新或太旧,和服务端的 RFB 认证方式对不上

第一类最普遍。VNC 密码是在「电脑设置」里单独设的,和登录密码完全独立,改登录密码不会同步它。

第三类在 RealVNC 上有个新变化值得知道:Viewer 从 8.4 版本开始必须登录 RealVNC 账号,连接 TightVNC、TigerVNC、UltraVNC 这类第三方服务端也变成了付费计划的能力。如果你在免费版上连第三方服务端失败,先确认这一点,而不是反复重装。

第四层:连上了,但画面不对

问题 处理
黑屏 确认机器没休眠、有用户登录;远程按一下电源键或先 SSH 登录再连
画面模糊 关掉「缩放以适应窗口」,按 1:1 显示;Mac 对 Mac 用高性能模式
花屏、色块 降低色深(16 位先试),编码改 Tight 或 ZRLE
卡顿 优先查丢包和延迟,VNC 对丢包比带宽敏感
键鼠不跟手 关闭本地输入法热键,检查 Cmd/Ctrl 映射与「发送特殊键」

Mac 对 Mac 时,高性能模式需要被控端是 Apple 芯片、系统在 macOS 14 以上。不满足条件时会退回标准模式,画面质量会差一截,这不是故障。

用日志少猜

打开「控制台」App,搜索 screensharingd,能看到连接建立、认证失败和断开的原因。比在客户端上反复试快得多。

如果服务端连日志都没有记录,说明连接根本没到达,问题一定在网络或端口,不用再折腾认证。

SSH 隧道场景的三个特例

用 ssh -L 5901:localhost:5900 user@host 转发时,额外注意:

  • 客户端要连 localhost:5901,不是 host:5900
  • 隧道断了客户端不会自动重连,表现为「突然卡住」
  • 隧道所在的 SSH 会话不能用 ControlMaster 复用冲突的端口

常见问题

客户端报「连接被拒绝」,但屏幕共享明明是开的?

先确认开的是「屏幕共享」而不是「远程管理」,再看端口是否被防火墙拦掉。两项都正常时,用 nc -vz 从客户端实测一次端口。

密码肯定没错,还是认证失败?

大概率是输成了登录密码。VNC 密码在屏幕共享的「电脑设置」里单独设置,改一次再试。若仍失败,换一个客户端确认是服务端问题还是客户端问题。

连上后只看到登录窗口,进不去桌面?

说明目标 Mac 没有用户登录。输入账号密码即可;如果启用了文件保险箱或需要双重认证,先在本机或 SSH 上解锁一次。

只有公网 IP,怎么连内网 Mac 的 VNC?

不要映射 5900。先 SSH 到跳板机,用 ssh -L 5901:内网机:5900 转出来,再连 localhost:5901。或者用 Tailscale 建一层私有网络。

同样的设置在别的客户端上能用,这个不行?

说明问题在客户端的认证实现或版本,不在服务端。优先检查客户端是否要求登录账号、是否只支持部分 RFB 版本。

继续阅读

DartShell

想要更高效的远程运维体验?

DartShell 在一套 macOS 原生体验里统一了 SSH、RDP、VNC、SFTP 和串口,帮你减少工具切换和重复配置。

Download DartShell