折腾笔记

Mac搭建远程桌面

Mac 高性能外网远程桌面搭建笔记

目标

在外网环境下,高性能远程访问 Mac,获得比传统 VNC 更流畅的体验。

最终方案

  • Sunshine:安装在被控 Mac 上,负责采集画面和编码推流
  • Moonlight:安装在客户端设备上,负责连接和显示远程画面
  • Tailscale:负责内网穿透,让外网也能安全访问 Mac

方案优点

  • 延迟低
  • 画质好
  • 比 VNC / Chrome Remote Desktop 流畅很多
  • 不需要手动做公网端口映射
  • 安全性比直接暴露公网端口高

一、服务端 Mac 配置流程

1. 安装 Sunshine

在 Mac 上下载安装 Sunshine,安装完成后启动。

2. 打开 Sunshine Web 管理界面

浏览器访问:

https://localhost:47990

首次初始化时,也可以直接尝试:

https://localhost:47990/welcome

注意:

  • 必须是 https
  • 不是 http://localhost:47990
  • 浏览器提示证书不安全时,继续访问即可,因为这是本地自签名证书

3. 如果 Web 页面打不开,排查方法

先确认 Sunshine 是否真的启动了:

ps aux | grep -i sunshine
lsof -iTCP:47990 -sTCP:LISTEN

再用 curl 验证 Web UI:

curl -vk https://localhost:47990/
curl -vk https://localhost:47990/welcome

正常情况:

  • / 会跳转到 /welcome
  • /welcome 应该能返回页面

如果 Web UI 异常,可以尝试:

pkill -f Sunshine
rm -rf ~/.config/sunshine

然后删除旧版 Sunshine,重新安装最新版,再重新访问:

https://localhost:47990/welcome

二、Mac 权限设置

1. 开启屏幕录制权限

进入:

系统设置 → 隐私与安全性 → 屏幕与系统音频录制

或旧版本系统中的:

系统设置 → 隐私与安全性 → 屏幕录制

Sunshine 打开。

如果之前没开,开完以后一定要:

  • 完全退出 Sunshine
  • 再重新打开 Sunshine

否则权限可能不会立即生效。

2. 避免显示器休眠

Sunshine 在 macOS 上推流时,需要有一个可用的活动显示器。

如果显示器休眠、合盖、熄屏,可能会报错:

  • Failed to initialize video capture/encoding
  • Unable to find display or encoder during startup
  • Please check that a display is connected and powered on

所以要调整这些设置:

  • 测试时不要让 Mac 自动熄屏
  • 不要合盖
  • 不要让外接显示器断电
  • 尽量保持屏幕点亮

3. 长期远程使用建议

如果以后想让 Mac 长期远程可用,建议:

  • 保持开盖
  • 或接一个外接显示器
  • 或使用 HDMI dummy plug(假显示器)

Sunshine 抓屏依赖可用显示输出,没有活动显示器时容易失败。


三、安装 Tailscale 做外网访问

1. 在 Mac 安装 Tailscale

在被控 Mac 上安装 Tailscale,并登录自己的账号。

2. 在客户端也安装 Tailscale

在需要远程连接的客户端设备上也安装 Tailscale,并登录同一个账号。

3. 获取 Mac 的 Tailscale IP

安装完成后,Mac 会获得一个类似下面的地址:

100.x.x.x

这个地址就是后续 Moonlight 要连接的目标。


四、客户端配置流程

1. 安装 Moonlight

在客户端安装 Moonlight。

支持平台:

  • Mac
  • Windows
  • iPhone / iPad
  • Android

2. 添加主机

在 Moonlight 中添加主机,输入 Mac 的 Tailscale IP,例如:

100.x.x.x

3. 配对

首次连接时,Moonlight 会弹出 PIN 码。

回到 Mac 上的 Sunshine 页面,输入 PIN 完成配对。

配对成功后,就可以正式连接桌面。


五、连接时遇到的典型问题与解决办法

1. Web UI 打不开

现象:

  • http://localhost:47990 打不开
  • 页面空白
  • 一直 not authorized

处理:

  • https://localhost:47990
  • https://localhost:47990/welcome
  • 检查 Sunshine 进程和 47990 端口
  • 必要时删除 ~/.config/sunshine 后重装

2. 配对后连接提示 503

现象:

  • Failed to initialize video capture/encoding
  • Is a display connected and turned on? (Error 503)

原因通常是:

  • Sunshine 没有屏幕录制权限
  • Mac 当前没有活动显示器
  • Mac 合盖或熄屏
  • 显示器进入休眠

处理:

  • 开启 Sunshine 的屏幕录制权限
  • 保持 Mac 屏幕亮着
  • 不合盖
  • 不让显示器休眠
  • 重启 Sunshine 后再试

重启命令:

pkill -f Sunshine
open -a Sunshine

3. Sunshine 日志出现 Fatal 错误

例如:

Fatal: Unable to find display or encoder during startup.
Fatal: Please check that a display is connected and powered on.

这说明 Sunshine 找不到可用显示器或编码器。

处理重点:

  • 检查 Mac 屏幕是不是亮着
  • 检查是不是合盖
  • 检查外接显示器是否通电
  • 检查屏幕录制权限
  • 重启 Sunshine

六、连接成功后的体验

这个方案连接成功后,整体体验很好:

  • 画面流畅
  • 延迟低
  • 远程操作接近本地
  • 适合日常办公、开发,甚至更高性能场景

相比 VNC 方案,提升非常明显。


七、如何断开连接

客户端是 Mac 且全屏时

Moonlight 全屏时顶部工具栏可能隐藏,可以这样退出:

方法 1:退出全屏

Control + Command + F

方法 2:切出应用

Command + Tab

或者:

Control + ↑

打开 Mission Control。

方法 3:直接退出 Moonlight

Command + Q

方法 4:强制退出

Option + Command + Esc

然后强制退出 Moonlight。


八、推荐的最终使用方式

推荐组合

  • 服务端:Mac + Sunshine
  • 网络:Tailscale
  • 客户端:Moonlight

推荐使用习惯

  • Sunshine 保持开启
  • Tailscale 开机自启
  • Mac 不要随意合盖
  • 避免显示器休眠
  • 远程时优先保持一个活动显示器

九、精简版结论

最终结论

Mac 高性能外网远程桌面的最佳实践:

Sunshine + Moonlight + Tailscale

关键注意事项

  1. Sunshine Web UI 一定要用 https://localhost:47990
  2. 必须给 Sunshine 开启屏幕录制权限
  3. Mac 必须有活动显示器,不能合盖熄屏
  4. 外网访问通过 Tailscale,不需要端口映射
  5. 客户端使用 Moonlight,流畅度明显优于 VNC

十、我的实际踩坑记录

1. Sunshine Web UI 打不开

一开始访问的是:

http://localhost:47990

这是错的,正确的是:

https://localhost:47990

后面用 curl 验证发现:

  • / 会 307 跳转到 /welcome
  • Sunshine 进程和端口其实都正常

2. Moonlight 已配对但无法连接

配对成功后,客户端报错大意是:

Failed to initialize video capture/encoding
Is a display connected and turned on? (Error 503)

同时 Sunshine 日志里出现:

Fatal: Unable to find display or encoder during startup.
Fatal: Please check that a display is connected and powered on.

根因是:

  • Sunshine 没拿到可用显示器
  • 或者 Mac 当时处于熄屏 / 合盖 / 无活动显示输出状态
  • 以及屏幕录制权限可能未生效

3. 最后解决的关键点

  • 给 Sunshine 开启 屏幕录制权限
  • 保持 Mac 屏幕点亮
  • 不合盖
  • 避免显示器休眠
  • 必要时重启 Sunshine

十一、可选优化项

1. 让远程更稳定

  • Sunshine 开机启动
  • Tailscale 开机启动
  • Mac 接电源使用
  • 关闭自动睡眠

2. 让无头远程更稳定

如果以后需要合盖或不接显示器远程:

  • 接一个 HDMI dummy plug
  • 或长期连接外接显示器

3. 画质建议

Moonlight 里可以按网络情况调:

  • 1080p / 60fps:最稳
  • 1440p / 60fps:兼顾画质与带宽
  • 更高分辨率:需要更高上传带宽和更稳定网络

标签

#mac #remote-desktop #sunshine #moonlight #tailscale #远程桌面 #效率工具