Repository navigation
Releases: baogutang/nikodesk
Release list
NikoDesk 1.0.11 — 修复 Mac 隐私屏
NikoDesk 1.0.11+22 — 修复 Mac 隐私屏自动关闭 / Mac privacy screen fix
本次更新
- 修复 Mac 隐私屏开启后,在另一个控制会话断开或远控采集尺寸调整时自动关闭、重新露出本机桌面的问题。
- 调整采集尺寸时,保留本机遮罩和输入保护,为当前隐私屏辅助进程重新建立排除遮罩的画面采集。新的采集收到有效画面后再替换旧采集。
- 新增尺寸切换、多屏隔离、采集失败和会话归属变化的回归检查。
- macOS、Windows、Android 的产品版本统一更新到 1.0.11,构建号为 22。
优先更新被控 Mac。控制端可以继续使用 1.0.10,也可一并升级。隐私屏设置、动效、按设备自动开启和系统登录密码退出方式沿用现有操作。
连接前,在被控电脑的“设置 → 会话安全”允许隐私屏,并允许会话使用键鼠。开启后可在控制端调整画面尺寸;其他控制会话退出时,当前会话的隐私屏保持开启。控制端关闭或断开后仍会恢复屏幕。
Changes
- Fix the Mac privacy screen turning off and exposing the local desktop when another controller disconnects or the remote capture size changes.
- Keep the local cover and input protection active while creating a replacement capture that explicitly excludes the current privacy helper. Replace the old capture after the new one produces a valid frame.
- Add regression checks for resizing, monitor isolation, capture failure and changes of session ownership.
- Update macOS, Windows and Android to product version 1.0.11, build 22.
Update the controlled Mac first. Controllers on 1.0.10 remain compatible, or can be upgraded together. Existing styles, automatic activation settings and local system-password exit remain available.
Enable privacy-screen permission on the controlled computer and allow keyboard/mouse input for the session. The current owner's privacy screen stays on across capture-size changes and the departure of other controllers. Turning privacy off or disconnecting the owner still restores the screen.
安装包 / Packages
| Platform | Files | Installation |
|---|---|---|
| macOS ARM64, macOS 12.3+ | DMG / ZIP | 完整 NikoDesk.app;ad-hoc 签名,无 Apple Developer ID 签名与公证。/ Complete app, ad-hoc signed without Developer ID or notarization. |
| Windows x64 | Portable EXE / ZIP | 便携运行,无需安装;当前未签名。/ Portable, no installation; unsigned. |
| Windows x64 unattended setup | Setup-validation EXE / ZIP | 安装器会注册服务;当前未签名。/ Installer registers a service; unsigned. |
| Android ARM64 | APK | 专用 NikoDesk 发行证书,包名 io.nikodesk.android,build 22。/ Dedicated release certificate, controller app, build 22. |
对照 SHA256SUMS 校验下载。更新需手动退出旧版、替换完整应用或安装包、再重新打开。macOS 可能需要重新授予原有系统权限。
Verify downloads against SHA256SUMS. Updates require manually quitting the previous app, replacing the complete application or installing the package, and reopening it. macOS may require its existing permissions to be granted again.
NikoDesk nightly (a9bd053)
Automatic build of main at a9bd053, replaced on every push. Pre-release: for testing, not a stable version.
| File | Platform |
|---|---|
NikoDesk-macos-arm64.dmg |
macOS 12.3+, Apple silicon. Ad-hoc signed (no Apple Developer ID): right-click → Open on first launch. |
NikoDesk-windows-x64.exe |
Windows 10/11 x64 portable client, runs beside RustDesk, no installation. Unsigned: SmartScreen asks once. |
NikoDesk-windows-x64.zip |
The same client as a folder. |
NikoDesk-windows-x64-setup-validation.exe |
Windows installer for unattended access (service, sign-in screen, UAC). Unsigned preview; changes the system, use on a test machine first. |
NikoDesk-android-arm64.apk |
Android 7+ arm64 controller (io.nikodesk.android), signed with the NikoDesk release key. |
Windows and Android packages are still in target-device acceptance. Verify downloads with SHA256SUMS.
NikoDesk 1.0.10+21 — 隐私屏连接与退出 / Privacy screen connection and exit
本次更新
- 连接提醒:连接桌面后,控制端提示开启被控电脑的隐私屏,可以选择“暂不开启”继续使用。
- 按设备自动开启:勾选“以后连接这台电脑自动开启”,或在控制中心开启“连接后自动开启隐私屏”。关闭后改为可跳过的提醒,不再因上次开启状态自动重开。
- 状态与快捷键常驻:被控屏幕显眼地显示“本机已开启隐私屏”与退出快捷键;雪岭、纸光、像素雨夜、自定义图片和黑屏均适用。
- 系统密码退出:在被控 Mac 按 Control + Option + Shift + Esc,Windows 按 Esc,打开本地密码窗口。正确输入当前电脑账户的系统登录密码后才能主动退出。Windows 使用账户密码,不使用 PIN;密码仅在被控电脑内验证,不发送到控制端,也不写入配置或日志。
- Mac 启动修复:隐私采集改为在同一等待预算内完成内容列举与启动,修复短等待提前取消的问题。开启失败时,控制端会显示原因和重试提示。
- 文档与官网:中英文 README、功能介绍和下载入口同步到 1.0.10。Android 发行包名与证书沿用,构建号递增到 21。
使用方式
先在被控电脑打开“设置 → 会话安全 → 允许新连接使用隐私屏”,并允许该会话使用键鼠。两端升级到 1.0.10 后,连接时可开启隐私屏,也可在“控制中心 → 隐私屏”选择三款动效预设或导入 PNG/JPG/WebP 图片,调整亮度、动效强度与时钟。样式在被控端确认成功后按设备保存。
本地退出需验证系统登录密码;错误密码、空密码、取消或验证不可用均不会主动退出。控制端关闭隐私屏、断开连接或租约失效仍会恢复屏幕。旧版被控端保留其原有退出行为,控制端按实际能力展示说明。
Mac 原生遮罩要求 macOS 12.3 或以上。Android 为控制端,不提供手机被控能力。
Changes
- Show an optional privacy reminder after connecting to a desktop. Not now lets you keep working.
- Remember Turn on automatically for this computer per device, also available in Control center. Turning it off uses the optional reminder instead of reopening privacy from the previous toggle state.
- Keep the controlled screen's privacy status and exit shortcut visible across Snow Ridge, Paper Light, Pixel Rain, custom pictures and the black-screen choice.
- Require the current computer account's system login password for local exit. Press Control + Option + Shift + Esc on Mac or Esc on Windows to open the local prompt. Windows uses the account password rather than its PIN. Verification stays on the controlled computer; the password is never sent to the controller or stored in configuration or logs.
- Let Mac privacy capture discover content and start within one total wait budget, fixing premature cancellation from the shorter waits. Failed activation now shows the controller a reason and retry guidance.
- Update both README languages, website features and downloads to 1.0.10. Keep the Android application ID and release certificate, with build number 21.
Enable privacy-screen permission on the controlled computer and allow keyboard/mouse input for the session. With both ends on 1.0.10, use the connection reminder or Control center → Privacy screen. Choose an animated preset or import a PNG/JPG/WebP picture; adjust brightness, motion intensity and the clock. The device's style is saved after the controlled computer confirms it was applied.
Wrong or empty passwords, cancellation and unavailable verification keep privacy on. Turning it off from the controller, disconnecting or losing the lease still restores the screen. Older endpoints retain their version's exit behavior, with capability-aware explanations. The Mac overlay requires macOS 12.3+. Android is a controller app.
安装包 / Packages
| Platform | Files | Installation |
|---|---|---|
| macOS ARM64, macOS 12.3+ | DMG / ZIP | 完整 NikoDesk.app;ad-hoc 签名,无 Apple Developer ID 签名与公证。/ Complete app, ad-hoc signed without Developer ID or notarization. |
| Windows x64 | Portable EXE / ZIP | 便携运行,无需安装;当前未签名。/ Portable, no installation; unsigned. |
| Windows x64 unattended setup | Setup-validation EXE / ZIP | 安装器会注册服务;当前未签名。/ Installer registers a service; unsigned. |
| Android ARM64 | APK | 专用 NikoDesk 发行证书签名,包名 io.nikodesk.android,build 21。/ Dedicated release certificate, controller app, build 21. |
对照 SHA256SUMS 校验下载。更新仍需手动安装:退出旧版,替换完整应用,再重新打开。macOS 可能需要重新授予原有系统权限。
Verify downloads against SHA256SUMS. Updates require manual installation: quit the previous app, replace the complete application and reopen it. macOS may require its permissions to be granted again.
NikoDesk 1.0.10 — 隐私屏连接与退出
NikoDesk 1.0.10+21 — 隐私屏连接与退出 / Privacy screen connection and exit
本次更新
- 连接提醒:连接桌面后,控制端提示开启被控电脑的隐私屏,可以选择“暂不开启”继续使用。
- 按设备自动开启:勾选“以后连接这台电脑自动开启”,或在控制中心开启“连接后自动开启隐私屏”。关闭后改为可跳过的提醒,不再因上次开启状态自动重开。
- 状态与快捷键常驻:被控屏幕显眼地显示“本机已开启隐私屏”与退出快捷键;雪岭、纸光、像素雨夜、自定义图片和黑屏均适用。
- 系统密码退出:在被控 Mac 按 Control + Option + Shift + Esc,Windows 按 Esc,打开本地密码窗口。正确输入当前电脑账户的系统登录密码后才能主动退出。Windows 使用账户密码,不使用 PIN;密码仅在被控电脑内验证,不发送到控制端,也不写入配置或日志。
- Mac 启动修复:隐私采集改为在同一等待预算内完成内容列举与启动,修复短等待提前取消的问题。开启失败时,控制端会显示原因和重试提示。
- 文档与官网:中英文 README、功能介绍和下载入口同步到 1.0.10。Android 发行包名与证书沿用,构建号递增到 21。
使用方式
先在被控电脑打开“设置 → 会话安全 → 允许新连接使用隐私屏”,并允许该会话使用键鼠。两端升级到 1.0.10 后,连接时可开启隐私屏,也可在“控制中心 → 隐私屏”选择三款动效预设或导入 PNG/JPG/WebP 图片,调整亮度、动效强度与时钟。样式在被控端确认成功后按设备保存。
本地退出需验证系统登录密码;错误密码、空密码、取消或验证不可用均不会主动退出。控制端关闭隐私屏、断开连接或租约失效仍会恢复屏幕。旧版被控端保留其原有退出行为,控制端按实际能力展示说明。
Mac 原生遮罩要求 macOS 12.3 或以上。Android 为控制端,不提供手机被控能力。
Changes
- Show an optional privacy reminder after connecting to a desktop. Not now lets you keep working.
- Remember Turn on automatically for this computer per device, also available in Control center. Turning it off uses the optional reminder instead of reopening privacy from the previous toggle state.
- Keep the controlled screen's privacy status and exit shortcut visible across Snow Ridge, Paper Light, Pixel Rain, custom pictures and the black-screen choice.
- Require the current computer account's system login password for local exit. Press Control + Option + Shift + Esc on Mac or Esc on Windows to open the local prompt. Windows uses the account password rather than its PIN. Verification stays on the controlled computer; the password is never sent to the controller or stored in configuration or logs.
- Let Mac privacy capture discover content and start within one total wait budget, fixing premature cancellation from the shorter waits. Failed activation now shows the controller a reason and retry guidance.
- Update both README languages, website features and downloads to 1.0.10. Keep the Android application ID and release certificate, with build number 21.
Enable privacy-screen permission on the controlled computer and allow keyboard/mouse input for the session. With both ends on 1.0.10, use the connection reminder or Control center → Privacy screen. Choose an animated preset or import a PNG/JPG/WebP picture; adjust brightness, motion intensity and the clock. The device's style is saved after the controlled computer confirms it was applied.
Wrong or empty passwords, cancellation and unavailable verification keep privacy on. Turning it off from the controller, disconnecting or losing the lease still restores the screen. Older endpoints retain their version's exit behavior, with capability-aware explanations. The Mac overlay requires macOS 12.3+. Android is a controller app.
安装包 / Packages
| Platform | Files | Installation |
|---|---|---|
| macOS ARM64, macOS 12.3+ | DMG / ZIP | 完整 NikoDesk.app;ad-hoc 签名,无 Apple Developer ID 签名与公证。/ Complete app, ad-hoc signed without Developer ID or notarization. |
| Windows x64 | Portable EXE / ZIP | 便携运行,无需安装;当前未签名。/ Portable, no installation; unsigned. |
| Windows x64 unattended setup | Setup-validation EXE / ZIP | 安装器会注册服务;当前未签名。/ Installer registers a service; unsigned. |
| Android ARM64 | APK | 专用 NikoDesk 发行证书签名,包名 io.nikodesk.android,build 21。/ Dedicated release certificate, controller app, build 21. |
对照 SHA256SUMS 校验下载。更新仍需手动安装:退出旧版,替换完整应用,再重新打开。macOS 可能需要重新授予原有系统权限。
Verify downloads against SHA256SUMS. Updates require manual installation: quit the previous app, replace the complete application and reopen it. macOS may require its permissions to be granted again.
NikoDesk v1.0.9
NikoDesk 1.0.9+20 — 样式隐私屏 / Privacy screen styles
本次更新
- 控制端选择隐私屏:内置「雪岭」「纸光」「像素雨夜」,分别提供山雾、移动光影和雨滴动效;也可导入 PNG/JPG/WebP 作为自定义背景。
- 按设备保存:可调整亮度、动效开关与强度、时钟和恢复提示。默认关闭时钟,保留小号恢复提示。被控端确认应用成功后才保存选择,重连继续使用。
- 会话与权限修复:修复另一会话开启失败时可能清除现有隐私屏的问题,补齐键鼠权限判断,并限制采集器退出等待时间。
- 官网排版:修复中文版相邻背景块连在一起的问题;中英文官网补充样式隐私屏介绍,下载入口更新到 1.0.9。
- Android:包含 1.0.8 的启动、私服连接、历史记录与已保存凭据重连修复;发行包名和签名证书沿用,构建号递增到 20。
使用方式
先在被控电脑打开“设置 → 会话安全 → 允许新连接使用隐私屏”,并允许该会话使用键鼠。两端升级到 1.0.9 后,在控制端的“控制中心 → 隐私屏”选择预设或图片,点击“应用并开启”。旧版本被控端继续使用原有黑屏方式。
Mac 使用原生遮罩,要求 macOS 12.3 或以上;Windows 使用原生遮罩。被控 Mac 上按 Control + Option + Shift + Esc,Windows 上按 Esc,或在控制端关闭隐私屏即可恢复。Android 是控制端,不提供手机被控能力。
Changes
- Choose Snow Ridge, Paper Light or Pixel Rain from the controller, with mist, moving light and shadow, or rain. Import a PNG/JPG/WebP picture for a custom background.
- Adjust brightness, animation, intensity, the clock and recovery hint. The clock is off by default. Save each device's choice only after the controlled computer confirms it was applied, and reuse it on reconnect.
- Fix privacy-screen owner cleanup and input-permission checks, and bound capture shutdown waits.
- Separate the adjoining backgrounds on the Chinese website; update both languages with the feature and 1.0.9 downloads.
- Include 1.0.8's Android startup, private-server connection, history and saved-credential reconnect fixes. Keep the application ID and release certificate, with build number 20.
Enable privacy-screen permission on the controlled computer and allow keyboard input for the session. With both ends on 1.0.9, open Control center → Privacy screen, choose a style or picture, then apply it. Older endpoints keep their original blackout. The Mac overlay requires macOS 12.3+. Control + Option + Shift + Esc on the controlled Mac, Esc on Windows, or turning privacy off from the controller restores the screen.
安装包 / Packages
| Platform | Files | Installation |
|---|---|---|
| macOS ARM64, macOS 12.3+ | DMG / ZIP | 完整 NikoDesk.app;ad-hoc 签名,无 Apple Developer ID 签名与公证。/ Complete app, ad-hoc signed without Developer ID or notarization. |
| Windows x64 | Portable EXE / ZIP | 便携运行,无需安装;当前未签名。/ Portable, no installation; unsigned. |
| Windows x64 unattended setup | Setup-validation EXE / ZIP | 安装器会注册服务;当前未签名。/ Installer registers a service; unsigned. |
| Android ARM64 | APK | 专用 NikoDesk 发行证书签名,包名 io.nikodesk.android,build 20。/ Dedicated release certificate, controller app, build 20. |
对照 SHA256SUMS 校验下载。更新仍需手动安装:退出旧版,替换完整应用,再重新打开。macOS 可能需要重新授予原有系统权限。
Verify downloads against SHA256SUMS. Updates require manual installation: quit the previous app, replace the complete application and reopen it. macOS may require its permissions to be granted again.
NikoDesk v1.0.7
NikoDesk 1.0.7
本次正式版使用 1.0.7+18,复用已完成三端构建与下载核验的同一组安装包。
更新内容
- Windows 历史记录:修复独立远控窗口连接成功后设备记录归属错误、历史页返回不刷新的问题;支持从有效会话记录再次连接。
- 记住密码:首次明确勾选并连接成功后,后续普通连接自动复用安全保存的凭据;密码失效后重新输入,认证成功才更新。修复多窗口交错操作可能影响新保存凭据的问题。
- 统一图标:Windows 程序、托盘、便携入口和安装辅助程序,以及 Android 启动图标统一使用蓝色品牌;修复 macOS 小尺寸图标资源兼容问题。
- 启动体验:加入“光轨归位”动画,初始化完成即进入;支持减少动态效果及慢启动、失败状态反馈,减少非关键查询造成的等待。
- 更新反馈:下载、验证、解包和安装指引更加明确,打开文件位置失败时可重试。
- 可靠性:加强隐私屏持续检查与恢复、目录扫描取消和预算控制、开发身份凭据隔离、当前窗口画面/FPS 匹配及分辨率恢复。
- 官网与文档:新版官网面向使用场景和下载体验,中英文 README 同步。
下载
| 文件 | 用途 |
|---|---|
NikoDesk-windows-x64.exe |
Windows 10/11 x64 便携版,直接运行 |
NikoDesk-windows-x64.zip |
Windows 10/11 x64 完整便携目录,解压后运行 NikoDesk.exe |
NikoDesk-macos-arm64.dmg |
macOS 12.3 及以上、Apple 芯片 Mac 安装包 |
NikoDesk-macos-arm64.zip |
完整 Mac 应用归档 |
NikoDesk-android-arm64.apk |
Android ARM64 控制端,沿用 NikoDesk 发行证书 |
NikoDesk-windows-x64-setup-validation.exe / .zip |
Windows 无人值守安装验证包,仍为安装预览,涉及系统服务 |
SHA256SUMS |
七个安装包的 SHA-256 校验和 |
验证与已知限制
三端构建与回归 全部成功;七包已实际下载并检查版本、归档、入口、图标、来源和摘要,与 CI 产物逐字节一致。Mac 包在 CI 隔离环境中通过启动冒烟。Flutter 两模式分别 1112 / 1091 项通过,Windows 凭据过滤集 18 项通过。
- 本次由维护者明确授权正式发布;现有自动签名验收晋级流程未用于此次发布,没有补写或伪造验收通过记录。
- 当前仍需手动安装,不包含自动替换并重启应用。 未配置更新发行公钥,不提供已签名更新清单。
- Mac 使用 ad-hoc 签名,无 Developer ID 或公证;Windows 未做 Authenticode 签名。Mac 升级后的权限连续性、系统权限列表图标刷新和 Windows 安装验证包仍需目标设备验收。
- Android 发行证书与既有版本一致,实际覆盖升级和三端真实远控验收仍未完成。本轮没有同条件 ToDesk 性能对照数据。
- OpenSSL 绑定已修补,剩余依赖审计项目仍有未完成项,不宣称依赖审计全部通过。
构建源码:4423a266。发布后未重新编译安装包。
NikoDesk v1.0.6
NikoDesk 1.0.6 / build 15. The native protocol stays at 1.5.0.
除特别说明外,下面的验证都是在同一台 Mac 的两个身份之间、经私服中继、用这份源码的开发构建做的。
隐私屏:有了看得见的开关和状态
隐私屏功能本来就有(被控 Mac 的显示器变黑、本机键鼠暂停,主控端画面不受影响),但入口藏在工具栏"显示"菜单里,而且没有任何地方显示它是否开着。
- 工具栏按钮:点一下开关;开启时按钮高亮,鼠标停上去会显示当前状态。不能开关时,点它会打开说明。
- 控制中心 → 隐私屏:一个开关,加上当前状态的文字说明。
- 远端画面上的标记:开启期间左下角一直显示"隐私屏已开启",工具栏收起也看得到,电脑和手机端都有。
- 不可用时会说原因:被控端没有允许、只读会话,或被控端不支持。
怎么用: 先在被控电脑上允许一次:设置 → 会话安全 → 允许新连接使用隐私屏(默认关闭,本版没有改这个默认值)。已经连着的会话,可以在被控电脑的连接窗口里单独打开隐私屏权限。这两步都可以通过远程画面去操作。
在被控电脑上按 Control + Option + Shift + Esc(Mac)或 Esc(Windows),或者断开连接,屏幕都会恢复。断开时如果隐私屏开着,下次连接这台设备会自动再开启。
帧率:上限放开到 120
- 自定义帧率上限此前在 NikoDesk 自己的面板里只到 60,而会话本身一直支持 120。滑块现在到 120。
- 操作流畅此前请求的是均衡画质,会话会把它固定在 30 帧。现在请求 50% 码率比例,帧率上限按本机屏幕的刷新率取 60 到 120。之前保存过旧含义的设备会显示为"自定义",重新选一次即可。
- 被控 Mac 能出到设定的上限了。 画面循环此前每帧"睡满剩余时间",多睡的时间都加进了周期:60 的上限实际只出 54。现在按绝对时刻走。
被控电脑发出的新画面不会多于它自己显示器的刷新率。这里用的那台 5K Mac 是 75Hz 的显示器,所以它最多每秒 75 帧,上限设多高都一样。
图标
Windows 的程序图标、便携包图标、托盘图标,以及 Android 的桌面图标,此前一直是上游的:名字改了,图片文件没换。现在都是 NikoDesk 的图标,并加了一项打包测试防止再换回去。
日志
被控端在有画面传输时每 30 秒记一行:尺寸、编码器、每秒新画面数和当时的上限、画质、目标码率、最新延迟。此前日志里没有这些,遇到卡顿只能从设置反推。
验证与边界
| 项目 | 结果 |
|---|---|
| 隐私屏(被控端已允许,真实会话) | 请求得到"已进入"的答复;开启期间显示器颜色表里最亮的值是 0(确实黑了),主控端画面继续到达;关闭后答复"已退出",该值回到 1 |
| 隐私屏(被控端默认策略,真实会话) | 主控端被告知未允许;强行发出的请求被答复"拒绝",状态保持关闭 |
| 隐私屏界面 | 每种状态、开关、按钮、标记都有单元和界面测试。面板、按钮和标记没有人在会话里手动点开看过 |
帧率上限(屏幕解锁,90% 画质,3200×1800,持续滚动 15 秒,各一次) |
上限 60:每秒发出 59.6–60.2 帧新画面,解码 60.0,最长间隔 38 毫秒。上限 75:73.0–73.8,解码 74.9,35 毫秒。上限 120:75.0–75.4(显示器的刷新率),解码 107.3(含未变化画面的重复帧),28 毫秒。都没有超过 100 毫秒的间隔,延迟中位 21–30 毫秒 |
| 出帧节拍(真实睡眠) | 上限 30/60/75/120:修正前每秒 24.0/46.7/58.3/103.6 次,修正后 29.9/59.9/74.9/120.0 |
| 图标 | Windows 图标文件含 16 到 256 共九种尺寸,托盘图标五种;测试能区分 NikoDesk 的图和上游的图。没有在 Windows 或 Android 设备上实际看过 |
| 1.0.5 的跨设备会话 | 屏幕宽 3024 的 Mac 拿到 3200×1800,屏幕宽 3840 的 Windows 电脑拿到 3840×2160,都是 5K Mac 上的硬件 H.265,都只凭密码登录 |
未验证:隐私屏、新的帧率上限和图标在 Windows、Android 设备上的实际表现;Windows 被控端的隐私屏;设备之间会话里的实测帧率和延迟;节拍修正在 Mac 以外的平台(其他平台保持原来的节拍)。
更新
macOS 包仍是 ad-hoc 签名:换上新版后,屏幕录制和辅助功能授权会失效,需要在 Mac 上重新授予。不要在无法到场、也没有其他远控入口的情况下更新被控 Mac。
被控 Mac 需要 1.0.6 才能出到 60 及以上的上限;主控端需要 1.0.6 才有新的帧率上限和隐私屏的按钮、开关、标记。
Packages and boundaries
All seven platform packages are provided with SHA256SUMS. macOS ARM64: DMG and updater ZIP, ad-hoc signed without Developer ID notarization. Windows x64: portable EXE/ZIP and separate setup-validation EXE/ZIP, unsigned. Android ARM64: controller APK signed with the NikoDesk release key, versionCode 15.
The Mac updater validates and stages the ZIP for manual installation. Real cross-device frame rate and latency, background recovery and ToDesk comparisons remain separate acceptance work.
NikoDesk v1.0.5
NikoDesk 1.0.5 / build 14. The native protocol stays at 1.5.0.
下面的内容都是在同一台 Mac 的两个身份之间、经私服中继、用这份源码的开发构建验证的。本版没有任何一项在两台设备之间跑过。
更新前先看
- 输入正确密码即可连接,不再需要被控端点击确认。 被控端的默认规则由"只允许点击"改为"密码或点击"。有效密码指应用显示的一次性密码,以及设置并允许后的永久密码。密码错误或没有密码时,仍在被控端弹出确认。
- 从 1.0.4 及更早版本更新的设备都会变成这个规则,包括之前选的是"只允许点击"的设备:那是当时的默认值,没有被保存下来。想保持每次都点击,更新后到"高级设置 → 安全"里重新选一次"只允许点击访问"。
- 终端、摄像头、端口隧道、语音四项仍需各自的批准。
- macOS 包仍是 ad-hoc 签名:换上新版后,屏幕录制和辅助功能授权会失效,需要在 Mac 上重新授予。不要在无法到场、也没有其他远控入口的情况下更新被控 Mac。
画面切换卡顿
反馈的问题:用 1.0.3 控制一台 5K 的 Mac,解锁、进入全屏这类整屏变化非常卡。查到两件事,都没有被确认为那次会话的原因。
硬件编码器可能在一次运行里再也回不来。 采集重启后,Mac 的硬件编码器最初几帧不出数据。连续 3 次空结果(60 帧时只要 50 毫秒)就会让应用放弃硬件编码,改用软件编码,直到应用重启。一份 1.0.3 的会话日志里,90 秒内四次采集重启之后,H.265 被标记为不可用,5K 画面改用软件 AV1 编码,至少持续了半小时。那四次重启是同一台 Mac 上的测试造成的,不是用户操作;但任何一次重启都可能触发,主控端的"刷新画面"也算。
现在 macOS 的硬件编码器要连续 30 次空结果才会被放弃。压力测试(60 帧上限下 14 次尺寸切换)启动了 24 个编码器,出现过连续 3 次空结果,也就是旧版本放弃的位置,全程保持 H.265。
每一帧都带着全部 5120×2880 像素。 硬件编码器只有平均码率,没有单帧大小上限。一次本机测试里,另一路 5K 画面占着上行,反复整窗变化让画面落后 7.2 秒、每秒约 5 帧;同样条件下 3840×2160 中位落后 4.1 秒,2560×1440 中位落后 16 毫秒、最大 1.5 秒。之后链路不忙时,原始大小的画面也能保持在 20 毫秒以内。
新增:控制中心 → 传输画面大小
主控告诉被控端自己能显示多宽的画面,被控的 Retina Mac 在显卡上把采集缩到接近这个宽度。显示模式、窗口布局、坐在那台 Mac 前的人看到的东西都不变。
- 按本机屏幕(默认):主控屏幕宽 3840 像素时,5K 的 Mac 发
3840×2160,56% 的像素。 - 更小:远端的标准大小:每个点一个像素。5K 的 Mac 是
2560×1440,25% 的像素。 - 远端原始大小:显示器的全部像素。
按设备保存。会话中切换会重启一次采集,本机测到 0.2–0.3 秒。
限制
- 两端都要 1.0.5,被控端要是带 Retina 屏的 Mac。Windows 被控端会忽略这个请求。
- 只有缩放后长宽都是整偶数像素时才缩,否则保持原始大小。14 寸 MacBook Pro(
1512×982点)对 1920 宽的主控没有可用的缩放档。 - 主控上报的是它最大的那块屏幕。Mac 主控上报像素尺寸,所以设为"看起来像 2560×1440"的 4K 屏会上报 5120,拿到原始大小。
- 多个主控同时连接时取最宽的请求。旧版本主控不发请求,拿到的是其他主控要的大小。
- 指针图像不随画面缩放;在标准大小下,它相对画面大了一倍。
- 编码器仍没有单帧上限。像素少了,大帧会变小,但不会消失。
- 启用这种缩放后,"远端分辨率 → 匹配本机像素"没有可做的事,按钮不可用。
修复
- 更新包下载在写盘过程中超时或被取消时,报告的是无关的文件错误,现在报告真正的原因。
发布流程
- macOS 构建会在一个只有标准 Library 目录的全新主目录里启动它刚构建出的应用;核心没启动、应用没保持运行或日志里有崩溃,构建就失败。
验证与边界
| 项目 | 结果 |
|---|---|
| 采集缩放 | 要 3840 得 3840×2160;要 2560 或最小值得 2560×1440;要原始得 5120×2880。显示器全程是 2560 点宽。带着已保存请求重新登录,第一帧就是 3840×2160;该主控离开后,下一个主控看到 5120×2880 |
| 指针位置 | 每次尺寸切换后向画面的不同位置发送指针坐标,再从系统读回,五次都落在预期位置 |
| 缩放规则 | 对十种真实 Mac 点尺寸、九种请求的单元测试:结果都是整偶数像素,点尺寸精确,除非显示器没有更多像素,否则不小于请求 |
| 整屏变化(90% 画质、60 帧上限、占屏幕 64% 的窗口每 2 秒整体变化、各 20 秒、各一次) | 原始大小:解码 32.9 帧/秒,超过 250 毫秒的间隔 14 次,画面中位落后 17 毫秒、最大 954 毫秒。3840 宽:33.8、20 次、14 和 17 毫秒。2560 宽:33.5、20 次、15 和 17 毫秒。帧率和间隔没有改善,只有最大延迟不同,而第二次原始大小的测试最大也只有 20 毫秒。测试期间同一台 Mac 上有另一个远控会话在采集和编码同一块屏幕 |
| 硬件编码器 | 见上文 |
| 密码规则 | 被控端用默认设置、无人点击:一次性密码登录并收到画面;从未允许过的永久密码被拒;错误密码被拒。明确选了"只允许点击"时,正确密码不能登录 |
| 回归 | Flutter Niko 1022 通过 / 2 跳过,stock 1001 通过 / 6 跳过;Rust Niko 过滤回归全部通过 |
未验证:Windows 和 Android 主控;Windows 被控端;设备之间的帧率和延迟;控制中心里的选择器,以及会话开始时自动发出的请求(包括主控怎样读自己的屏幕尺寸);两个主控同时连接;从已安装的 1.0.3 或 1.0.4 更新后的行为。
发布后补测与更正(10-05)
第一次跨设备会话。 两端都是 1.0.5,屏幕宽 3024 像素的 Mac 控制那台 5K 的 Mac。被控端日志显示:收到 3024 的请求,采集 3200×1800,全程硬件 H.265;连接建立 42 毫秒后登录完成,没有点击的余地。
更正上面"画面切换卡顿"里的一个说法。 "另一路 5K 画面占着上行"不是原因。那台 5K 的 Mac 所在的网络把从中继过来的数据压在总量约 4.4 Mbit/s,发往中继的数据不受限(实测 46 Mbit/s 以上)。那台 Mac 被控时,画面走的是不受限的方向;本机测试的两端都在那台 Mac 上,画面要从受限方向回来。7.2 秒、4.1 秒这些延迟是 4.4 Mbit/s 的链路对那两种画面大小的表现,不代表从别处控制那台 Mac 的体验。是谁在限速没有查明;中继程序本身经另一条路能转发 46 Mbit/s。
绕开受限方向后重测(90% 画质、60 帧上限、整窗每 2 秒变化一次、15 秒):
| 画面 | 解码帧率 | 超过 100 毫秒的间隔 | 最长间隔 | 延迟中位 / 最大 |
|---|---|---|---|---|
5120×2880 |
49.7 | 4 次 | 184 毫秒 | 21 / 46 毫秒 |
3200×1800 |
54.0 | 0 次 | 70 毫秒 | 20 / 38 毫秒 |
也就是说,在带得动的链路上,缩小画面是"略顺一些、码率省一半"(目标 8.9 对 16.5 Mbit/s),不是之前数字暗示的"能用和不能用"的差别。
"每秒约 10 帧新画面"的上限没有再出现。 只有 NikoDesk 会话在连时,同一台 Mac 的采集每秒收到 75 帧新画面。10-04 那次,另一个远控软件当时也开着会话。
"操作流畅"是几种常用模式里帧率最低的。 它请求的是均衡画质,而会话会把均衡画质固定在 30 帧:同一条链路上解码 27.3 帧/秒,自定义 60 帧上限是 53.9。本版之后已改为请求 60 帧上限(在 nightly 里)。在 1.0.5 上请用"自定义"并把帧率设为 60。
Packages and boundaries
All seven platform packages are provided with SHA256SUMS. macOS ARM64: DMG and updater ZIP, ad-hoc signed without Developer ID notarization. Windows x64: portable EXE/ZIP and separate setup-validation EXE/ZIP, unsigned. Android ARM64: controller APK signed with the NikoDesk release key, versionCode 14.
The Mac updater validates and stages the ZIP for manual installation. Real cross-device sessions, frame rate and latency, background recovery and ToDesk comparisons remain separate acceptance work.
NikoDesk v1.0.4
NikoDesk 1.0.4 / build 13. The native protocol stays at 1.5.0.
修复
- 保存一项设置不再重启一次私服注册。此前每保存一项都会重启(本机日志里每次 0.1–0.9 秒),现在只在暂停状态、私服配置、传输选项变化或保存失败时重启。
新增:控制中心 → 远端分辨率
- 匹配本机像素:把被控端显示器切到同比例下仍能填满主控屏幕的最小分辨率。主控屏幕宽 3840 像素时,5K 的 Mac 由采集
5120×2880变为3840×2160(56% 的像素)。 - 恢复原始:切回原分辨率。最后一个远控会话断开后,只要被控端的 NikoDesk 仍在运行,也会自行恢复。
- 连接这台设备后自动匹配:按设备保存,默认关闭。自动匹配后会核对实际采集尺寸,没有变小就切回;本次会话里手动改过分辨率后不再自动匹配。
这会改变被控电脑显示器的实际分辨率,坐在那台电脑前的人能看到变化。需要键鼠权限,并选中单个非虚拟显示器。
已知限制
- Windows 被控端在会话中重启或 NikoDesk 被结束时,较小的分辨率会留下。
- 被控端没有 Retina 缩放时,手动选过的分辨率会按设备记住并在之后的连接中再次应用,直到恢复原始。
- 分辨率属于被控端显示器,同时连接的其他主控也会看到变化。
更新
从 1.0.3 打开"设置 → 软件更新 → 检查更新"。macOS 包仍是 ad-hoc 签名:换上新版后,屏幕录制和辅助功能授权会失效,需要在 Mac 上重新授予。不要在无法到场、也没有其他远控入口的情况下更新被控 Mac。
验证与边界
冻结代码后的本地回归:Flutter Niko 1018 通过 / 2 跳过,stock 997 通过 / 6 跳过;Rust 设置模块 17 通过,Niko 过滤回归全部通过。同一台 Mac 两个身份之间经私服中继的真实会话验证了连接、文件传输、分辨率切换与断开后恢复,以及保存设置后注册不再重启。
未验证:控制中心按钮和自动匹配在真实会话中的行为、Windows 和 Android 主控、主控真实屏幕尺寸的读取、跨设备的帧率与延迟、与 ToDesk 的对比。
发布后(10-04)在同一台 Mac 上补测:匹配后的数据量约为原来的三分之一,主控解码帧率不变(两种分辨率都约 24 帧/秒)。那台 Mac 上屏幕的新画面每秒只有约 10 帧,与分辨率无关,原因仍在查。此前说明里把早先的帧率数字归因于屏幕锁定,实际主因是测试主控残留了 15 帧上限的预设。详见 docs/RELEASE-1.0.4.md。
Packages and boundaries
All seven platform packages are provided with SHA256SUMS. macOS ARM64: DMG and updater ZIP, ad-hoc signed without Developer ID notarization. Windows x64: portable EXE/ZIP and separate setup-validation EXE/ZIP, unsigned. Android ARM64: controller APK signed with the NikoDesk release key, versionCode 13.
The Mac updater validates and stages the ZIP for manual installation. Real cross-device sessions, frame rate and latency, background recovery and ToDesk comparisons remain separate acceptance work.
NikoDesk v1.0.3
NikoDesk 1.0.3 / build 12 fixes the installed macOS configuration-read failure and update delivery. The native protocol stays at 1.5.0.
修复
- Mac 后台访问设置改用逐项保存和严格回读,修复旧批量接口使当前进程配置状态失效的问题。
- 网络页可以原页重试;注册状态不可读时保留可读取的私服配置,未知配置不会变成空白配置表单。
- 修复大字号窄屏下未监听的读取异常、离开页面后仍注册后台任务,以及旧请求覆盖新私服范围和首页状态。
- Windows 更新准确选择便携 EXE,避免误选安装验证包;损坏的发布信息明确显示检查失败。
更新与核验
从已安装的 1.0.2 打开“设置 → 软件更新 → 正式版 → 检查更新”。Mac 下载校验后手动安装;安装后完全退出旧 NikoDesk,再打开 1.0.3,以清除旧进程状态。保留已有服务器配置,不需要清空配置文件。
本地完整回归:Niko Flutter 1002 通过 / 2 既有跳过,stock 981 通过 / 6 既有跳过;原生 Niko 过滤回归 521 通过 / 1 可选忽略、329 上游项未在该过滤内,关闭 Niko 的原生编译通过。包检查 142 项 / 1 既有跳过,便携包测试 9 项。独立对抗审查确认的问题均已修复,并保留修前失败、修后通过的证据。
正式版、main/nightly 三端构建与官网部署均通过。七个实际公开包的 SHA256SUMS,以及含校验清单的全部八项 GitHub 文件大小与摘要均一致;Mac 完整应用/签名/DMG、Windows 四包 PE/载荷/来源、Android 身份/发行证书/16KB/语音 ABI 静态核验通过。已安装的 1.0.2 客户端实际显示 1.0.3 更新提示,真实生产更新器对 1.0.3 ZIP 的下载、解包、版本/架构/签名校验也通过,没有覆盖已安装应用。
Packages and boundaries
All seven platform packages are provided with SHA256SUMS. macOS ARM64: DMG and updater ZIP, ad-hoc signed without Developer ID notarization. Windows x64: portable EXE/ZIP and separate setup-validation EXE/ZIP, unsigned. Android ARM64: controller APK with the unchanged release application ID/certificate and versionCode 12.
The Mac updater validates and stages the ZIP for manual installation. Windows/Android in-app installation, real cross-device sessions, background recovery and ToDesk performance comparisons remain separate acceptance work. Existing RustDesk services, configuration and credentials were preserved. The published 1.0.1 and 1.0.2 releases remain available.
NikoDesk v1.0.2
NikoDesk 1.0.2 · 暖纸主题与跨系统操作
- 亮色使用暖纸背景、陶土按钮和棕灰文字,移除亮色模糊与渐变;暗色工作区保留。
- Windows/Linux 控 Mac:常用 Ctrl 编辑组合对应 Command,会话内可选择原始按键;Control+方向键保留空间操作,终端 Ctrl+C 请用原始模式。
- 控制中心增加 Mac 空间、调度中心、应用窗口、正向/反向应用切换及 Windows 虚拟桌面动作;加入剪切、查找、打印、刷新。
- 修复重连后旧快捷按钮清理误释放新物理按键的边界问题。
- 官网交互示例与 README 界面图已更新。示例使用合成数据,不建立连接、不发送按键。
产品版本 1.0.2、构建号11,原生协议仍为1.5.0。保留既有 v1.0.1 的发布与产物。原生输入发送链及完整回归通过;实际跨系统远控、Spaces 效果和与 ToDesk 的流畅性比较尚未测量。
NikoDesk 1.0.2
Product version 1.0.2, build 11. The native protocol remains 1.5.0. This patch follows the published 1.0.1; its tag and packages remain unchanged.
Light theme and website
The light workspace now uses warm paper surfaces, terracotta actions and brown-gray text, matching the website. Opaque light surfaces replace layered blur and gradients. Dark mode retains its existing direction. Existing contrast and responsive widget regressions cover both product modes; screenshot examples render production Flutter widgets with invented device/server data, without opening a native client or establishing a connection.
The English and Chinese website now includes a local interactive interface example: device search and favorites, light/dark themes, session controls, Mac Space illustrations and original/automatic keyboard semantics. It neither connects to servers nor collects credentials or sends keys. README previews and social sharing use the new production-widget example.
Windows/Linux controlling Mac
In Map and Legacy keyboard modes, selected common Ctrl editing chords (C/V/X/A/Z/S/F/P/R) become Command chords on a Mac desktop peer. Both the native physical-key capture path and Flutter input path use the common native dispatcher. A visible session option restores original keys and is saved for that device; use it for terminal Ctrl+C interrupts. Combinations with Shift, Alt/AltGr or Meta are preserved, as are Control+arrow Space commands. Translate mode retains its original semantics.
The modifier state machine tracks left/right Control, key repeat, overlapping keys and balanced release. Loss of focus, keyboard-mode/input-source changes, permission revocation, reconnect and close release or clear the owned state. Synthetic quick actions carry explicit remote semantics and bypass the old global modifier swap so Mac Space controls remain Control.
Apps, full-screen work and daily actions
The desktop and mobile control center exposes cut, find, print and reload alongside copy, paste, select all, undo and save. App and desktop actions use the remote platform's actual shortcuts. For Mac: previous/next Space, Mission Control, app windows and forward/reverse Command+Tab. For Windows: Task View, previous/next virtual desktop and forward/reverse Alt+Tab. Unsupported actions are omitted for other platforms. Local view tools are separated from remote input and remain available during view-only sessions.
Full-screen Mac applications occupy Spaces. Remote system settings or customized shortcuts determine their behavior; Command+Tab does not guarantee switching to any particular full-screen window. No private Space enumeration or remote system-preference changes are introduced. Native tests exercise the event stream and Flutter tests the real dispatch entry points, permissions and UI; physical Windows-to-Mac session acceptance remains separate.
Delivery
Main maintains the nightly preview. The v1.0.2 tag publishes all seven macOS ARM64, Windows x64 and Android ARM64 packages plus SHA256SUMS after every platform build and packaging gate passes. Mac and Windows CI also run the native shortcut regressions. Android keeps io.nikodesk.android and the existing release certificate, advancing versionCode from 10 to 11.
Existing video-queue recovery and real VP8/VP9/AV1 pixel regressions from 1.0.1 remain. No measured real-network or ToDesk performance advantage is claimed. Current RustDesk services, credentials, configuration and the user's active remote session remain untouched. This patch is built and tested without launching an experimental native client, installing drivers/services or changing security settings. Target-device startup, remote input behavior and installation acceptance require their own verification.
Local checks: full Flutter Niko 923 passed / 2 skipped; stock 902 passed / 6 skipped. Native Niko-name-filter 521 passed, one optional probe ignored, 329 upstream tests outside the filter; stock lib/bins compilation passed. Packaging Python 142 cases / 1 existing skip plus 9 portable cases; Dart analysis 0 errors, 0 warnings, 291 informational notices. Initial toolbar contrast and unused test import failures were corrected and final checks passed. No physical-key injection or native client launch occurred.
Build provenance
Public main 8ad5008, tag v1.0.2. Formal multi-platform build; main/nightly build. Both retain strict packaging and test gates. Verify the seven binary packages against SHA256SUMS. Linux, Intel macOS and iOS packages are not included.