OpenDisplay:免费开源方案,把 iPhone/iPad 变成 Mac 的第二块屏幕,替代 Sidecar 和 Duet
免费开源的Sidecar/Duet替代方案——通过USB或WiFi,将你的iPhone或iPad作为Mac的真正第二显示器使用。低延迟H.264,视网膜HiDPI,触摸输入。
开放显示
把你的备用苹果设备变成Mac的第二显示器——免费、开源、无需订阅。
iPhone、iPad 和备用 Mac。Apple Sidecar、Duet Display 和 Luna Display 的自托管替代方案:真正的扩展显示(不仅仅是镜像),视网膜清晰,通过 USB 或 WiFi,支持触摸和滚动输入。
OpenDisplay 存在的原因
将iPhone或iPad改造成Mac的外置显示器已经解决了——但现有的每个选项都有其限制:
- 苹果侧车免费,但需要同时安装两个设备同一个Apple ID完全不支持iPhone,只能在支持的硬件对上运行。
- 二重奏展示转为订阅制。
- 月球展示需要硬件加密狗。
OpenDisplay 是缺失的选项:a免费、开源、无账户、无加密狗用你已有的iOS设备作为真正的第二显示器。如果你正准备写自己的显示器——别写!
来这里贡献;难点(虚拟显示创建、低延迟H.264流水线、USB传输、输入注入)已经开始工作了。
特色
- 🖥️真正的显示扩展——macOS将设备视为真正的第二显示器(拖动窗口到它,在系统设置中排列),而非镜像。镜像模式也可用。
- 🔌USB有线以降低延迟——通过MacOS内置的Lightning/USB-C线流媒体传输
usbmuxd;插上去,没有网络,没有WiFi抖动,没有辅助工具。 - 📶WiFi 零配置—— iPhone 通过 Bonjour 进行宣传;在 Mac 上从下拉菜单中选择它。
- 🔍视网膜 / HiDPI——虚拟显示与设备面板逐像素匹配(@2x),因此文本清晰。
- 👆内置触控输入——你的iPhone变成了macOS的触摸屏:点击,从变装到变装, 和两指卷轴感觉就像触控板。(Apple Pencil支持正在计划中。)
- 🔄肖像还是风景——旋转设备,虚拟显示会以原生分辨率重建为垂直显示器。
- ⚡低延迟流水线— 硬件 H.264 编码(VideoToolbox,实时模式,无 B 帧),TCP_NODELAY,帧降背压支持关键帧恢复,解码和渲染通过
AVSampleBufferDisplayLayer. - 💻备用Mac作为显示屏——安装小型OpenDisplay 接收器旧Mac上的macOS 12+应用,以及其他Mac通过WiFi或Thunderbolt/以太网线连接,分辨率为原生Retina。
- 🔒自托管与私有——你的屏幕从未接触过任何人的服务器。两个小应用,一个TCP连接,仅此而已。
比较
| 开放显示 | 苹果侧车 | 二重奏展示 | 月球展示 | |
|---|---|---|---|---|
| 价格 | 免费开源 | 免费 | 订阅 | $$ + 加密狗 |
| iPhone 作为显示屏 | ✅ | ❌ (仅限iPad) | ✅ | ✅ |
| 不同的Apple ID | ✅ | ❌ | ✅ | ✅ |
| 有线(USB) | ✅ | ✅ | ✅ | ❌ |
| 真扩张 | ✅ | ✅ | ✅ | ✅ |
| 触控输入 | ✅ | ✅ | ✅ | ✅ |
| 自托管/可审计 | ✅ | — | ❌ | ❌ |
常见问题
为什么菜单栏里会出现紫色的录制指示器?这是macOS隐私指示器显示的任何捕捉屏幕的应用——Duet、Luna、OBS 和 Zoom 也会触发。Apple Sidecar 不会,因为它是在操作系统内部实现的,而不是在公共的捕获 API 上。
它不能(也不应该)被应用隐藏;这是 macOS 告诉你捕获正在运行的方式。
Mac应用在连接菜单(WiFi)里没有显示我的iPhone。双方都需要本地网络许可,但两者都失败了默默地没有它:查看Mac上的隐私与安全功能→局域网以及在 iPhone 上,确保两者都在同一个 WiFi 网络上,并且 iPhone 应用在前景打开。
USB 模式不受影响。
我需要用什么USB线或版本?你的电缆必须支持数据—— 仅充电的 USB 线不是工作。找一根描述为数据,同步,或者充电与数据传输线缆。
支持数据的USB 2.0线缆即可;USB 3、雷电和视频替代模式无需。OpenDisplay 通过 macOS 内置的 TCP 连接流式传输 H.264usbmuxd而不是作为USB视频设备。
其最高质量预设使用18 Mb/s,远低于USB 2.0的480 Mb/s高速链路速率,因此USB 2.0有足够的带宽支持流传输。USB 1.x不支持或测试。
为了最佳可靠性,使用已知良好的数据/同步线,解锁设备,接受相信这台电脑如果出现,请提示,避免使用不可靠的集线器或适配器。
它支持iPad吗?接收器应用是通用的(iPhone + iPad);iPad使用相同的代码库。iPad专用的指甲油(铅笔、压力)在规划中。
另一台Mac可以作为显示屏吗?是的。安装OpenDisplay 接收器(同一版本中一个独立的小型应用)在备用Mac上。只需要macOS 12 蒙特雷或者更新的,所以2015年以后的Mac符合条件,尽管发送Mac需要macOS 14。
接收器会像手机一样显示在发送Mac上,变成一个真正的扩展Retina显示屏。通过WiFi开箱即用。如果用线缆,可以用雷电线还是USB4线(macOS 创建了一个雷霆桥它们之间的网络),其中以太网有线或适配器,或者——在最近的macOS上,两台Mac——普通的USB-C 数据线(macOS会在其上运行一个小型网络链路;批准允许配件连接每台 Mac 上都有提示,具体会根据插在哪台 Mac 上。发送方会自动将会话移到线缆上,即使中途插着,设备行会显示有线电视.旧款Mac配备Mini DisplayPort形状的Thunderbolt 1或2端口,可使用Thunderbolt 3转2适配器和Thunderbolt 2线。接收端Mac的键盘和鼠标输入为后续操作(#147).
为什么是H.264而不是HEVC/AV1?硬件 H.264 编码/解码速度普遍快速,延迟优异。HEVC 是计划中的选择,以提升每位质量。
我的屏幕内容会被发送到任何地方吗?没有。你的Mac和设备之间只需通过有线或局域网直接连接TCP。没有服务器,没有账户,没有分析数据。
完整细节——包括应用本地存储的内容以及当前的WiFi加密限制——详见隐私页面.
许可证是什么?我可以分叉或商业使用吗? GPL-3.0.自由使用、研究和改编——商业上也一样。如果你分发修改版本,必须保持开源,保持原始署名,这样改进才能回流,而不是通过封闭分支。
(直到 v0.4.x 的版本是 MIT 许可,并且仍然在该条款下可用。)
它会在macOS更新时坏掉吗?可能——CGVirtualDisplay是私有API。所有虚拟显示产品都面临同样的风险。捕获/流式流水线本身只使用公共API。
音频?目前不在范围内。
兼容应用
官方应用在iOS 16.4+上支持Mac发送器和iPhone/iPad接收器。其他人也开发了使用相同协议的客户端,所以你也可以用Android设备或老款iPad作为显示器,或者从Linux驱动。
有线协议具体规定在PROTOCOL.md这样新客户端可以根据规范编写,而不是从Swift源代码中逆向工程。如果你的硬件还没覆盖,可以从这里开始:
安卓接收器
- gprot42/Android-OpenDisplay- 适用于去谷歌化的Pixel手机和平板电脑的GrapheneOS接收器,Android 8.0+
- Josepacelli/OpenDisplay-Android- Android 接收器,Android 8.0+,支持未修改的 Mac 应用
较老的iOS接收机
- cuongpham1/ipad-iphone-second-monitor-ios12-free- iOS 12 客户端,适用于无法运行官方应用的 iPad 和 iPhone
Linux 发送器
- Tixwho/OpenDisplay-Linux- 从Wayland台式机(KDE Plasma、Hyprland)驱动iPhone或iPad。
这些都是粉丝制作的项目,不是官方版本。它们与OpenDisplay无关,也没有我们维护、审核或支持,因此请在它们各自的仓库中报告问题。
在这里列出它们也不代表我们自己的计划:官方OpenDisplay应用可能以后仍可能为这些平台发布。
工作原理
MAC (sender) iPHONE / iPAD (receiver)
CGVirtualDisplay ← macOS believes a monitor is attached
→ ScreenCaptureKit (capture the virtual display)
→ VideoToolbox H.264 (hardware, real-time)
→ TCP [4-byte length][Annex B frame] ═══════→ NWListener :9000
→ AVSampleBufferDisplayLayer
← JSON control messages (hello, touch, scroll) ═══
→ CGEvent injection (click / drag / scroll)
该手机监听,Mac连接—— 这种排序正是使得完全相同的代码在 USB 上工作的原因(通过usbmuxddaemon 内置于 macOS 的每个安装中)以及 WiFi。
手机会显示其原生面板尺寸;Mac 则生成CGVirtualDisplay以正好一半的点数(@2x HiDPI)进行像素流回。
所有穿越套接字的部分——帧、发现、视频格式、每个控制消息——都被指定为PROTOCOL.md.协议如何在不同版本中演进,详见COMPATIBILITY.md.
CGVirtualDisplay是私有 CoreGraphics API(与BetterDisplay和DeskPad使用的版本相同)——这正是该项目无法在App Store上架,而是存在GitHub的原因。
安装
你需要两个应用:一个Mac应用(负责捕获和发送)和一个iOS应用(接收和显示)。使用第二代Mac作为显示器,安装OpenDisplay Receiver而是用它而不是iOS应用。
预编下载(Mac)
抓住OpenDisplay.dmg来自最新发行.该应用使用开发者ID证书签名并由苹果公证,因此在macOS 14+上只需双击即可打开——没有守门员警告。
打开.dmg然后将应用拖到应用程序。
对于Mac来说,这应该是这样是展示,抓住OpenDisplayReceiver.dmg而是来自同一版本。它运行在macOS 12+上,签名和公证方式相同;两个应用都通过Sparkle自我更新。
iPhone 应用
需求iOS / iPadOS 16 或更新版本——包括16.7.x系列,苹果在2017年iPad5、第一代iPad Pro、iPhone 8和iPhone X中也在该线下。如果你的iPad无法更新到16.7以上,它仍然可以作为第二显示器(#72).
- 试飞(推荐):加入公开测试版testflight.apple.com/join/3NYaY11c.
- 源代码构建:在Xcode中打开项目,在签名中选择你的免费Apple ID,点击运行。大约需要~2分钟。
快速入门(来源)
前提条件
brew install xcodegen # project generation
Xcode 15+,以及一个免费或付费的苹果开发者账户(用于将iOS应用侧载到你的设备上)。
建造
git clone https://github.com/peetzweg/opendisplay.git
cd opendisplay
echo "DEVELOPMENT_TEAM=YOURTEAMID" > .env # your Apple team ID, for signing
./generate.sh # runs xcodegen with your .env
xcodebuild -project OpenSidecar.xcodeproj -scheme OpenSidecarMac \
-configuration Debug -derivedDataPath build build
xcodebuild -project OpenSidecar.xcodeproj -scheme OpenSidecariOS \
-configuration Debug -destination 'generic/platform=iOS' \
-derivedDataPath build -allowProvisioningUpdates build
(或者说敞开OpenSidecar.xcodeproj在Xcode中,对每个目标点击“运行”。你的队伍ID显示在developer.apple.com/account在成员类别下,或者直接在Xcode的签名面板中选择你的团队。)
Run(USB — 推荐)
- 安装 + 打开开放显示在iPhone上(它在9000端口监听)。
- 在Mac上运行
./run.sh(或者直接打开应用)——它与 macOS 内置的通信usbmuxd直接连接,并且通过电缆自动连接。不需要隧道工具。 - 格兰特屏幕录制(吃子)和交通便利性(触摸)macOS 每人请求一次。
- 把窗口拖到你的新显示器上。完成。
运行(WiFi)
打开iPhone应用,然后选择“iPhone(WiFi)”在Mac应用的连接菜单里。通过Bonjour自动发现。USB延迟更低;WiFi没有线缆。
权限检查清单
macOS和iOS对该应用有几个要求——大多数首次使用时会提示,但有些默默失败如果被拒绝或未完成。Mac 应用显示实时权限状态面板;iPhone 应用有一个设置界面(摇晃手机,或在空闲时点击设置和帮助)。
| 其中 | 许可 | 需要 | 如果缺失 |
|---|---|---|---|
| 麦克 | 屏幕录制 | 捕捉展示 | 手机屏幕黑了 |
| 麦克 | 交通便利性 | 触摸/滚动输入 | 水龙头没什么用 |
| 麦克 | 本地网络 | WiFi发现 | 连接菜单中没有设备 |
| iPhone | 本地网络 | WiFi发现 | 麦克找不到手机 |
他们都住在下面隐私与安全在系统设置(Mac)/ 设置(iPhone)中。本地网络的按钮只有WiFi模式才需要——USB在没有它们的情况下也能正常使用。
如果提示从未出现,请手动切换条目,或者强制退出并重新打开应用。
获取bug报告日志
两个应用都会本地保存连接事件日志。没有上传任何内容;日志只有在你分享时才会离开设备。
- 麦克:咔嗒日志在应用面板中。Finder 开启时
~/Library/Logs/OpenDisplay被选中。 - iPhone/iPad:摇晃设备(或轻敲)设置与帮助空闲时),然后打开连接日志.分享将文件交给邮件、消息或文件;复制则将文本放到剪贴板上,直接粘贴到某期刊中。
电话记录是WiFi报告中通常缺失的一半:接收器是否曾自我提示,监听器是否重启,解码器是否故障。如果可以的话,两者都附上。
路线图
被追踪为路线图问题——如果你愿意,可以买一本!
连接性与分销
- #16加密WiFi传输带配对码
- iOS 应用 App Store 发布 + 公证 Mac 下载
输入
展示与媒体
经历
探索
已完成:预装发布,内置USB连接(无辅助工具),通过Bonjour支持WiFi,竖屏模式,触摸+两指滚动,性能叠加,支持iPad,同时多设备(#8——每个连接的设备都成为自己的扩展显示器,Mac作为显示器(#17WiFi或Thunderbolt/以太网线)。
自动更新(macOS 应用)
macOS 应用会自动更新闪耀——一个开源框架,不是一个托管服务。更新检查只针对我们自己的基础设施:
- 应用显示:Appcast该信息流托管在登陆页网站上:
https://opendisplay.app/appcast.xml(SUFeedURL在project.yml). - 发布工作流程(
.github/workflows/release.yml,build-mac工作)经营着Sparkle'sgenerate_appcast反对公证人OpenDisplay.dmg,用EdDSA键签名,提交结果于public/appcast.xml,并发送页面部署——因此发布的订阅源指向GitHub发布资产的下载链接。 - Sparkle 在安装前会验证 EdDSA 签名和苹果公证。应用在后台会自动检查(
SUEnableAutomaticChecks)并提供手册“检查更新......”按钮旁边辞职在菜单栏窗口里。
维护者前提条件(自动更新上线前)
自动更新是脚手架虽有但无动力直到签名密钥安装好。私有签名密钥是绝不已承诺——它只作为CI秘密存在。开启它:
- 生成密钥对。Run Sparkle's
generate_keys一次(它包含在Sparkle SPM文物包中,以及在tarball发布时bin/generate_keys).它打印了公共密钥和存储私人登录钥匙扣。 - 公钥→粘贴到
SUPublicEDKey在project.yml(替换REPLACE_WITH_SUPUBLICEDKEY_FROM_generate_keys占位符),然后重新运行xcodegen generate并且承诺。 - 私钥→添加为
SPARKLE_PRIVATE_KEYGitHub Actions secret(导出为generate_keys -x private_key.pem如有需要)。Appcast介入release.yml在没有这个秘密的时候,可以优雅地进行无运营,所以发布会持续运行,直到你准备好。 - 该First Appcast 发布下一个版本两个键都设置好后。确认
https://opendisplay.app/appcast.xml则 结算在真实的签名/公证版本中测试完整更新流程(请检查→下载→验证→重新上线)——这在CI中无法验证。
贡献
欢迎提出问题和公关意见——尤其是上述路线图项目。代码库刻意较小:每个平台有~4个Swift文件,且闪耀(SPM)作为macOS应用唯一的运行时依赖,用于自动更新。
该工作原理上文部分是建筑文档;参见Mac/CGVirtualDisplayPrivate.h用于私有API表面。
发布会自动通过以下方式进行放开——请:用途常规提交(feat:,fix:,docs:, …)并且自动出现带有变更日志的发布PR——合并后会标记发布并附加预构建的工件。
许可
GPL-3.0——版权所有 (c) 2026 Philip Poloczek。
免费使用、研究和调整。如果你分发修改版本,必须保持开源,保持原有的授权——改进会回流给所有人,而不是通过封闭分支。(v0.4.x 之前的版本是 MIT 授权的;这些版本仍可在 MIT 下使用。)
关键词:iPhone 第二显示器 Mac,iPad 外接显示器,免费 Sidecar 替代方案,Duet Display 替代方案,开源屏幕扩展 macOS,使用 iPhone 作为额外屏幕,虚拟显示 Mac,USB 第二显示器。