Mac 想接第二块屏幕,传统答案是一台真显示器;如果手边只剩一台闲置 iPad 或更早的 iPhone,付费方案是 Duet Display 或 Luna Display(后者还要插硬件加密狗),免费方案是苹果自家的 Sidecar 但它不支持 iPhone 又要求同一 Apple ID。OpenDisplay 把这条路做成免费 + 开源:用 iPhone 或 iPad 当真正的扩展显示器,USB 或 WiFi 都能连,触控、Retina、Apple Pencil 也都一路加上。
OpenDisplay 是什么

OpenDisplay 是德国开发者 Philip Poloczek(peetzweg)一个人做的开源工具,GitHub 仓库 peetzweg/opendisplay,GPL-3.0 协议,当前版本 v1.19.0(2026-09-01,macOS Sender)。项目最早叫 OpenSidecar,因为 Sidecar 是苹果自家功能名,被 App Store 指南 5.2.5 拒绝上架而改名 OpenDisplay,但内部 bundle ID、Bonjour 服务类型这些永久标识还都保留着 opensidecar。
它的定位是 Sidecar、Duet Display、Luna Display 的免费开源替代。一台 Mac 主机可以同时接多台 iPhone/iPad 当多个独立显示器,也可以把一台闲置旧 Mac 当第二屏——它专门给了一款独立的 OpenDisplay Receiver for Mac,最低支持到 macOS 12,意味着 2015 年前后的老 Mac 都能派上用场。
实际用起来:连接方式与画面

安装有两个端:Mac 主机装 Sender,iPhone/iPad/备用 Mac 装 Receiver。系统要求是 Sender 端 macOS 14+,Receiver iOS/iPadOS 16+,Receiver for Mac 12+。
连法有两种:
- USB(推荐,最低延迟):用 Lightning 或 USB-C 数据线直连。Mac 通过系统自带的
usbmuxd守护进程与 iPhone 通信,自动发现,零配置。 - WiFi:iPhone 端通过 Bonjour 自动广播,Mac 端菜单直接选取。
连上之后,Mac 把设备识别成一块真正的扩展显示器,不是镜像——窗口可以拖过去,系统设置里也能把它和主屏排列在一起;当然也提供 Mirror 模式。画面走的是虚拟显示器管线:Mac 用 CGVirtualDisplay(与 BetterDisplay、DeskPad 同款的私有 API)创建一块与设备面板像素一一匹配的虚拟屏,输出是 @2x HiDPI,所以文字、代码、矢量图都保持锐利。横竖屏切换设备时虚拟显示器会以新原生分辨率重建。
Mac 端主界面与权限

主界面分成几块:Devices 列已发现的 iPhone/iPad(WiFi/USB 各自一行),带实时码率(如 0.6 Mbit/s)和 Connect/Disconnect 按钮;Mode 切 Extend/Mirror;Quality 给 Best(native)/ Balanced / Battery Saver 三档;Show app in Dock 决定要不要在 Dock 露出图标;Display layout 打开 macOS 自带的 Displays 设置窗口去做拖拽编排。
权限清单里有几项是静默失败的:
| 端 | 权限 | 用途 | 若缺失表现 |
|---|---|---|---|
| Mac | 屏幕录制 | 采集画面 | 手机端黑屏 |
| Mac | 辅助功能 | 触控/滚动输入 | 点击无反应 |
| Mac | 本地网络 | WiFi 发现 | 菜单里看不到设备 |
| iPhone | 本地网络 | WiFi 发现 | Mac 找不到手机 |
USB 模式不需要本地网络权限。授予后 macOS 顶部会出现紫色屏幕录制指示——这是系统对所有屏幕采集类应用的统一隐私提示,Duet、Luna、OBS、Zoom 都会触发;Sidecar 不触发是因为它在系统内部而非公共 API 实现。
它是怎么做到低延迟的
视频管线是 OpenDisplay 最值得拆开看的部分。Mac 端用 ScreenCaptureKit 采集虚拟显示器画面,送进 VideoToolbox 做 H.264 硬件编码,启用低延迟实时模式(无 B 帧)、TCP_NODELAY、关键帧恢复与帧丢弃背压;接收端 iPhone 上用 AVSampleBufferDisplayLayer 解码渲染。Best (native) 画质档位最高约 18 Mbps 码率,远低于 USB 2.0 的 480 Mbps 带宽,WiFi 也不容易打满。
协议层是自定义的 TCP:长度前缀的 Annex B 帧流,再加 JSON 控制消息(hello、touch、scroll)。完整的协议规范写在仓库的 PROTOCOL.md,跨版本演进规则在 COMPATIBILITY.md。iPhone 端监听 9000 端口,Mac 端做客户端反向连;这种"设备监听、Mac 连接"的次序让同一份代码能同时走 USB(经 usbmuxd)和 WiFi(经 Bonjour)。
输入:触控、滚动与 Apple Pencil
触控这一侧目前已实现点击、拖拽、双指滚动(手感贴近触控板)。Apple Pencil 的压力与倾斜支持已经在 1.15 之后的 App Store 版本里加入,hover 悬停随后补上。右键、多点触控手势、硬件键盘透传、屏幕修饰键侧栏这些还在路线图里。
触控和滚动最终是通过 CGEvent 注入回 macOS 的。所以延迟感受取决于两端:USB + 硬件 H.264 + 帧丢弃背压三者叠在一起,日常打字、拖窗、滑动都跟手;WiFi 模式相比 USB 会多几十毫秒,仍在可接受范围。
和同类工具比,差在哪
| 维度 | OpenDisplay | Apple Sidecar | Duet Display | Luna Display |
|---|---|---|---|---|
| 价格 | 免费、开源 | 免费 | 订阅制 | $$$ + 硬件加密狗 |
| iPhone 作显示器 | ✅ | ❌(仅 iPad) | ✅ | ✅ |
| 不同 Apple ID 可用 | ✅ | ❌(需同一 Apple ID) | ✅ | ✅ |
| USB | ✅ | ✅ | ✅ | ❌ |
| 真实扩展屏 | ✅ | ✅ | ✅ | ✅ |
| 触控输入 | ✅(点击/拖拽/双指滚动) | ✅ | ✅ | ✅ |
| 可审计 | ✅(GPL-3.0 源码) | — | ❌ | ❌ |
真正的差距集中在四件事:免费、跨 Apple ID、能用 iPhone、能审计。Sidecar 卡在 Apple ID 和 iPhone 上;Duet 是订阅;Luna 要买加密狗。OpenDisplay 这四样都补上了,代价是要授权屏幕录制和辅助功能、接受一条点对点 TCP 链路、用一个仍处早期但活跃的 GitHub 项目。
上手前需要知道的三件事
Mac Sender 要 macOS 14+。较老的 Mac 当不了主机;但 OpenDisplay 提供专门的 Receiver for Mac(macOS 12+),可以把老 Mac 反过来当显示器用。
macOS 系统更新可能让它失效。CGVirtualDisplay 是私有 API,每个 macOS 大版本都可能影响其行为;这是所有虚拟显示器方案的共有风险。采集与流管线本身用的都是公共 API,项目的代码规模刻意保持精简(每平台约 4 个 Swift 文件)。
更新渠道分两层。macOS Sender 用 Sparkle(开源框架)从 opendisplay.app/appcast.xml 拉更新并校验 EdDSA 签名。iOS 端最快的版本在 GitHub Releases 与 TestFlight(公开测试 testflight.apple.com/join/3NYaY11c);App Store 上是较保守的版本(当前 1.15.0),主要为了让不开 TestFlight 的人也能装。
这类"用开源/本地优先替代订阅套件"的项目,本站此前在 OpenLogi、Capptivo、FindDiskKiller 上聊过——主题不同,但共同点是把选择权交还给用户,而不是把关键功能锁在订阅墙后面。多显示器布局下的 macOS Dock 管理,可以看看 DockAnchor。
OpenDisplay for Mac 下载
- 官网:https://opendisplay.app/
- GitHub 仓库:https://github.com/peetzweg/opendisplay
- Mac Sender 下载(已签名公证):OpenDisplay.dmg
- 备用 Mac 用 Receiver 下载:OpenDisplayReceiver.dmg
- iOS/iPadOS TestFlight 公开测试:testflight.apple.com/join/3NYaY11c
- App Store 版(较保守):App Store
免费开源(GPL-3.0),macOS 14+(Apple silicon 与 Intel),iOS/iPadOS 16+,可同时接多台设备做真正的扩展屏。
声明:本文来自苹果迷投稿,不代表苹果家园立场,版权归原作者所有,欢迎分享本文,转载请保留出处!