OpenDisplay:免费开源方案,把 iPhone/iPad 变成 Mac 的第二块屏幕,替代 Sidecar 和 Duet

免费开源的Sidecar/Duet替代方案——通过USB或WiFi,将你的iPhone或iPad作为Mac的真正第二显示器使用。低延迟H.264,视网膜HiDPI,触摸输入。

https://opendisplay.app


开放显示

把你的备用苹果设备变成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源代码中逆向工程。如果你的硬件还没覆盖,可以从这里开始:

安卓接收器

较老的iOS接收机

Linux 发送器

这些都是粉丝制作的项目,不是官方版本。它们与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 — 推荐)

  1. 安装 + 打开开放显示在iPhone上(它在9000端口监听)。
  2. 在Mac上运行./run.sh(或者直接打开应用)——它与 macOS 内置的通信usbmuxd直接连接,并且通过电缆自动连接。不需要隧道工具。
  3. 格兰特屏幕录制(吃子)和交通便利性(触摸)macOS 每人请求一次。
  4. 把窗口拖到你的新显示器上。完成。

运行(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 下载

输入

  • #4带有压力和倾斜功能的苹果笔
  • #5右键和多点触控手势
  • #6硬件键盘直通
  • #7屏幕修饰键侧边栏

展示与媒体

  • #9分辨率与画质设置
  • #10HEVC编码
  • #12音频转发

经历

  • #11菜单栏应用模式,带自动连接功能
  • #13电池与生命周期意识

探索

  • #14局域网外的远程访问
  • #15其他客户端平台

已完成:预装发布,内置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秘密存在。开启它:

  1. 生成密钥对。Run Sparkle'sgenerate_keys一次(它包含在Sparkle SPM文物包中,以及在tarball发布时bin/generate_keys).它打印了公共密钥和存储私人登录钥匙扣。
  2. 公钥→粘贴到SUPublicEDKey在project.yml(替换REPLACE_WITH_SUPUBLICEDKEY_FROM_generate_keys占位符),然后重新运行xcodegen generate并且承诺。
  3. 私钥→添加为SPARKLE_PRIVATE_KEYGitHub Actions secret(导出为generate_keys -x private_key.pem如有需要)。Appcast介入release.yml在没有这个秘密的时候,可以优雅地进行无运营,所以发布会持续运行,直到你准备好。
  4. 该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 第二显示器。

参与讨论