## Windows v1.8.11

- 连接设置新增“隐私熄屏 · 测试功能”：在被控电脑安装并启用一次已签名虚拟显示组件后，远程勾选隐私保护即可尝试关闭实体显示路径，使用虚拟桌面继续远程。首次安装需手动确认 Windows 管理员授权，必要时重启电脑。
- 隐私熄屏时多屏暂合并成一个虚拟桌面；本次协助改用最高 12 FPS、JPEG 90 的兼容采集，重新连接恢复常规采集。Windows 1909 与具体显卡兼容性需在实际电脑验证，安装或切换失败会显示错误，不表示熄屏已生效。
- 取消勾选、结束协助或 8 秒隐私心跳超时后恢复原显示配置；独立辅助进程监护客户端退出，连接设置提供“恢复屏幕”。
- 新增“断开锁屏”，默认开启，仅实际连接成功的被控会话触发；可以在远程顶部临时取消，也可在被控端连接设置修改默认值。先恢复屏幕再锁屏，拒绝申请和连接未成功不锁屏。


## Windows v1.8.10（安卓保持 v1.8.9）

- 修复本机部署时继承下载来源标记导致开机反复出现“打开文件－安全警告”：只处理用户已允许运行的同一启动程序/校验一致的已安装副本。原下载文件和系统安全策略不变。首次下载仍可能显示未知发布者提示；此改动不等同于正式代码签名。
- 话筒权限被拒绝时，Windows 控制端显示“麦克风权限设置”按钮，由用户手动打开系统设置并授权。
- 隐私保护不支持时，提示被控电脑的实际 Windows 版本。当前遮罩要求 Windows 10 2004（19041）以上；本次没有加入虚拟显示驱动。

## v1.8.9

- 增加“超清（原分辨率）”档位；Windows 清晰/超清优先保留原始分辨率，网络或 CPU 压力时降低帧率和码率，减少桌面文字模糊。超清并非无损；建议两端更新后在远程窗口顶部选择。
- 修复隐私保护、打开话筒的复选框状态处理，启用失败在顶部显示具体原因；麦克风仍需 Windows/Android 系统允许访问。
- 锁屏远程服务需要更新时显示“有更新”和已安装/目标服务版本，连接设置入口有提示。系统服务独立版本仍为 1.7.4，本次无需为版本号变化重复安装。
- 与旧服务器兼容：初始协商后通过已授权的数据通道确认超清档位；旧受助端需更新后使用超清。

## v1.8.8

- 局域网、外网 P2P 和服务器中转按实际线路自动选择码率、帧率及播放缓冲；拥塞或编码压力较大时降低负载，稳定后逐步恢复。
- Windows 锁屏远程在普通桌面优先使用 Chromium 采集，切换到 Windows 登录界面时保留系统服务帧；系统服务仍沿用 v1.7.4。灰度画面按新帧绘制，减少额外的定时等待。
- 多屏窗口仅编码当前查看的屏幕；一一对应窗口模式继续发送所有已映射屏幕。
- 安卓实际采集帧率跟随线路配置，解除原来的固定 15 帧限制。安卓原生服务独立刷新实际 ICE 端点信息，避免退后台后局域网识别信息过期；未知线路先显示“识别中”。

## v1.8.7

- Windows 被控端支持“隐私保护”，本地屏幕显示“牛马远程工作中”，取消、结束、断线或授权失效时恢复。要求 Windows 10 2004+；保留 Ctrl+Alt+Esc 本地结束快捷键。Windows 登录界面自动关闭桌面遮罩。
- 远程工具栏可独立开启 Windows 电脑声音和控制端话筒，音频通过当前 WebRTC 线路传输，关闭或断线立即停止采集。安卓端话筒需手动允许系统录音权限；安卓被控端可接收语音，本版不采集安卓系统声音。
- 安卓服务器连接心跳改用原生 Socket.IO；接受共享后自动退到后台，协助期间保活并保持亮屏，结束恢复系统行为。仍需按机型允许后台活动；系统清理、手动锁屏或厂商强制停止可中断安卓共享。
- 增加应用权限设置和后台电池设置入口，按小米/Redmi/POCO、华为/荣耀、OPPO/一加/真我、vivo/iQOO、三星显示指引。受限设置、无障碍与录音权限仍由机主在本机确认。
- 电脑控制安卓增加左滑、上滑、右滑、返回、主页、菜单；滚轮按方向合并为页面滑动，避免连续手势互相取消。
- Windows 协助期间防止显示器自动休眠；系统锁屏服务沿用 v1.7.4，无需重新安装该服务。

# 速克远程 SKDesk · Windows / Android v1.8.6

官网与下载：**https://skdesk.158225.xyz/**
网页协助端已关闭。Windows 客户端可发起和接受协助；Android 手机、平板通用版支持与电脑双向协助。
管理后台：**https://skdesk.158225.xyz/adm/**，仅授权的 jukey 账号可以登录，使用原账号密码。

下载 SKDesk-1.8.4-x64-portable.exe，在 Windows 10/11 x64 上双击运行。
无需安装向导或填写服务器地址。首次运行自动复制启动程序到 `%LOCALAPPDATA%\Programs\SKDesk\SKDesk.exe`，创建当前用户的桌面和开始菜单快捷方式，并切换至本机副本。
以后从桌面“速克远程”打开。运行环境随程序提供，不需要安装 Node.js 或 Electron。
本机部署不需要管理员权限；失败时仍可继续免安装运行，在“连接设置”查看原因和本机路径。
打开即识别硬件、获取设备代码并同步至专属服务器；有稳定硬件标识时可在重装后恢复原编号。

## v1.8.6 局域网模式识别修复

修复安卓与 Windows 同处局域网、实际选中私网直连地址却显示 P2P 的问题。私网地址的 host / prflx 组合正确识别为局域网；公共地址直连仍显示 P2P，中继优先识别为服务器。浏览器隐藏远端地址时，两端通过当前协助的加密数据通道互换实际选中的地址与端口，核验对应关系后补充显示，10 秒过期；断开或重新协商清除旧证据。不根据相同公网 IP 或同网段猜测连接方式。

Windows 与安卓均更新到 1.8.6 后重新连接，可让两端显示一致。Windows 使用现有增量更新器；安卓在设置检测新版后按系统确认安装。锁屏服务仍为已验证的 1.7.4，无需重装。官网保留设备自动推荐与手机版排版。此次仅更新客户端与官网，连接服务无需重启。

## Android v1.8.5 全屏触控界面

安卓远程控制时默认横屏全屏，状态栏和导航栏隐藏，画面延伸至挖孔周围。顶部菜单默认收起，只留“菜”字；展开可结束、切换画质/方向/屏幕和快捷键，直接勾选或取消“鼠标居中”。放大后单指拖动画面，双指缩放，点按单击、长按右击；未放大时可拖动远程鼠标。

左下角透明触控板按手机屏幕滑动距离移动鼠标，默认1:1，放大后保持相同比例；首次提示区域，使用后只保留80%透明边框。右侧鼠标左右键可上下对调，滚动区按手指上下方向滚动；“键/鼠”切换输入模式。设置可调比例、透明度、各区域大小，还可在画面上拖动区域、拖动右下角改变大小并点确定保存。手机和平板各自在本机保存布局。设置增加“检测新版”：有新版自动下载并校验，显示进度，调起系统确认安装；首次由机主允许安装来源，更新成功后清理本应用缓存的旧 APK，保留账号、设备代码和布局。此版本只升级安卓APK，Windows仍为1.8.4，连接服务无需重启。

## v1.8.4 取消重连同步结束

控制端取消重连、关闭等待窗口时，立即停止本机重试，通过连接通道与独立 HTTPS 通知服务器，释放双方会话与等待状态。通知失败自动补发；关闭后重开仍可补发只允许结束的凭证，不保存恢复控制的凭证。完全断网时需等网络恢复或服务端等待超时。普通远程过程关闭主窗口仍收起到托盘。

## v1.8.3 安卓双向协助

Android 手机、平板现在既能发起协助，也能接受 Windows 或其他安卓设备的协助。安卓首页显示本机代码、邀请密码和复制邀请，支持一次、今天、本周、本月、今年和独立设置的复杂长期密码。电脑版远程工具栏增加安卓的“返回、主页、最近”按钮。

接受申请时请先在手机上打开速克远程，点击“允许本次协助”并确认系统的屏幕共享提示；同账号连接免邀请密码，但安卓每次新共享仍需本机确认。要允许点击、拖动、滚动和输入文字，请在“接受协助”或“连接设置”中点击“启用远程触控”，手动打开系统的“速克远程 · 远程触控”无障碍服务。如果系统对侧载 APK 显示“受限制设置”，需由机主在系统应用信息中按提示允许后再开启，客户端不会自动修改系统授权。

共享开始后可以切换到其他应用，原生前台服务持续传送屏幕和处理已授权的输入，系统通知和应用内均可结束；屏幕与输入继续使用加密 WebRTC，自动选择局域网、P2P 或中转。网络切换时保留同一次屏幕共享并在 120 秒内重连，结束或超时后停止共享，旧授权不能再次启动。安卓系统停止共享或锁屏后，需要重新接受，暂不提供安卓锁屏操作、文件传输和音频。普通文本按光标或选区插入，发送方收到回执后才显示成功。

安卓通用 APK 约 51 MB，包含 ARM32、ARM64、x86 和 x86_64 原生组件。为 JNI 保留 WebRTC 类名与方法，避免安装包优化导致正式版崩溃。修复快速同账号连接时，本机保存邀请密码阻塞连接就绪通知的问题。Windows 原生锁屏服务仍为已验证的 1.7.4，无需重新安装。

## v1.8.2 网络切换自动重连

两端都更新到 v1.8.2 后，已授权的协助遇到 Wi-Fi / 蜂窝网络切换、代理变更或短暂断网，会保留原会话，最多等待 120 秒自动重连。画面显示倒计时和取消按钮。重连会重新获取网络地址，自动尝试局域网、P2P 和服务器中转，不需要重复输入邀请密码或重新确认同一会话。

等待期间释放按住的键和鼠标、停止远程输入；文字和文件不自动重复发送，未完成的传输需重试。主动结束、账号授权被撤销或等待超时后，原会话不能继续恢复。应用退出、电脑重启及服务端会话丢失需要重新发起。旧版任一端不支持恢复时，会继续使用原来的断开行为。Windows 锁屏服务仍保留已验证的 1.7.4。

## v1.8.1 安卓手机 / 平板通用版

旧版安卓首发包约 1.4 MB；当前 SKDesk-1.8.5-android-universal.apk 约 51 MB，支持 Android 8.0 及以上与 WebView 120 及以上。支持同账号免密码连接、邀请粘贴、设备备注和历史、多屏切换、触摸拖动/长按右键/双指缩放、三档画质、文字粘贴和密码或 PIN 逐键输入。电脑已启用锁屏服务时可同账号连接锁屏电脑。v1.8.3 起增加接受协助；暂不支持安卓文件传输和音频，新版安装需系统确认。

Android 构建、权限和隐私说明见 android/README.md。Windows 保留已验证的 1.7.4 锁屏服务，本次更新无需重装该服务。

## v1.8.0 多屏窗口、双向复制与在线安装

顶部检查更新、账号和服务状态固定显示，滚动时仍可操作；“我的设备”卡片与首页设备入口缩小，保留备注、状态、代码和连接按钮。

- 一一对应改为独立的普通窗口，每个配对屏幕一个窗口，可移动、调整大小和最大化。只打开配对数量的窗口，多余本机屏幕不再覆盖；上方拖动屏幕标签仍可调整顺序，窗口内“合并窗口”返回主界面。
- 默认鼠标为箭头，上方可选箭头、手形、十字和隐藏，并同步到各个屏幕窗口。远程模式统一显示为“P2P”。
- 远程文件复制：在远程资源管理器选中文件按 Ctrl+C，等待传输完成提示，再在本机文件夹或桌面按 Ctrl+V。远程右键复制后可点击“复制文件到本机”。内容通过现有加密连接传输，SHA256 校验完成后才放入 Windows 文件剪贴板；中途本机剪贴板变化会提示重试。暂只支持文件，文件夹请先压缩为 ZIP。登录界面暂停剪贴板及文件传输。
- 关闭主窗口收起至右下角托盘，连接继续保持。点击托盘显示窗口，右击选择“退出速克远程”彻底退出并结束协助。
- 新增约 35 KB 在线安装器 `SKDesk-1.8.0-online-setup.exe`，自动获取最新客户端、显示下载进度、校验签名清单与文件 SHA256 后运行；可取消和重试。依赖 Windows 的 .NET Framework 4.8，基础客户端部署不需要管理员权限。
- 复制邀请默认选“今天”，按北京时间当天结束后自动换密。长期密码需要单独设置 8–64 位，包含数字、英文字母和至少一个符号，不含空格；临时密码与长期密码分开保存。旧的随机数字长期密码会转为到期邀请，需重新设置符合规则的长期密码。账号登录密码不受影响。
- 自动尝试局域网 → 外网 P2P → 服务器中转。解除旧版保存的“仅直连”设置对自动回退的限制；修复 mDNS、旧版统计 IP 字段及延迟局域网候选的处理。模式基于实际选中的 ICE 地址，管理日志增加候选地址和类型。两端都更新后才能完整使用这些改进。
- 继续使用已验证的 v1.7.4 锁屏系统服务，无需为本次功能重复安装服务；自动准备和取消授权后不重复提示的规则保留。

## v1.7.5 自动准备锁屏远程

登录或自动恢复速克账号后，客户端空闲时会自动检查并准备锁屏远程服务；不再要求先进入设置点击启用。首次安装、旧服务更新或需要修复启动方式时，仍由用户手动确认正常的 Windows 管理员授权提示。启用后服务默认随 Windows 开机启动。

已安装且正常运行的 v1.7.4 系统服务继续使用，无需重复安装或授权。本次保留已通过用户锁屏连接及解锁实测的 v1.7.4 原生服务，客户端版本与服务版本独立。

协助或客户端更新期间延后安装。手动关闭后保持关闭；取消授权或安装失败后，同账号、同设备和同服务版本不再自动重复弹窗，可在连接设置手动重试。账号更换时重新核验绑定，保留同账号授权和服务票据校验。

## v1.7.4 已锁屏时发起连接的修复

修复“客户端会话初始化失败：Windows 桌面切换未就绪”：系统桌面的抓屏和输入移至独立 MTA 线程，显示器枚举改用 Win32 接口，避免 STA / Windows Forms 创建隐藏窗口后阻止切换桌面。窗口线程限制已通过 Windows 原生测试复现；新的工作线程通过未显示的独立桌面来回切换、显示器枚举以及三个显示器的普通桌面抓屏验证。测试不切换用户当前可见桌面、不输入密码。

更新客户端后，需在受助电脑“连接设置 → Windows 锁屏远程”点击“重新安装 / 更新服务”并手动确认 Windows 管理员授权。这次会替换系统桌面工作进程；仅更新客户端不足以修复旧服务。成功后仍默认开机自动启动。客户端保持运行且 Windows 用户尚未退出登录时，支持先锁屏后发起同账号连接，也支持连接后再锁屏；2026-10-18 已由用户在测试电脑实测确认：锁屏后能够连接并解锁 Windows。

## v1.7.3 锁屏服务通信修复

修复服务虽已运行，客户端仍显示“未启用”的本机握手问题：命名管道先读取受限的握手消息，再按 Windows 用户身份校验连接，之后才返回服务状态。此前在读取消息前调用身份校验会触发 Windows 错误 1368 并断开。新版通过真实 Windows 命名管道验证了状态查询、非绑定用户拒绝，以及未授权抓屏和输入仍被拒绝。

更新客户端后，在“连接设置 → Windows 锁屏远程”点击“重新安装 / 更新服务”，手动确认 Windows 管理员授权。仅更新客户端不会自动替换系统服务；旧版服务会明确显示“需更新”。服务更新成功后仍默认开机自动启动。此修复已验证本机通信，真实锁屏画面与输入仍需在测试电脑验收。

## v1.7.2 锁屏服务安装修复

修复中文安装脚本在 Windows PowerShell 5.1 中因 UTF-8 缺少 BOM 被错误解析的问题。安装、卸载会返回实际阶段和错误；仅在系统服务已运行且客户端完成本机通信验证后显示“已启用”。安装成功后服务默认为自动启动，无需每次重新点击启用。服务已安装但未运行、绑定不符、权限不足等情况会分别显示原因。

首次安装仍需手动确认 Windows 管理员授权。服务从未成功安装过的电脑，更新后需再点击一次启用；未验证成功时不会记录成已启用。系统诊断保存在用户资料目录的 `secure-desktop-diagnostic.json`，不包含密码或授权令牌。

## 粘贴邀请与手动申请

“发起协助”右侧的“粘贴邀请信息”读取你主动复制的文字，填入一台设备的 ID 和邀请密码，不自动连接。支持带空格的设备代码、完整邀请、全角数字；多台设备或不完整密码会报错。密码与设备代码通过 Windows 加密成对保存在本机，手工输入该设备代码并离开输入框后会自动带出；不会保存到网页存储、服务器日志或源码。已失效的密码不会清空当前输入框，可修改或留空申请。

密码留空可发送手动远程申请，受助端必须点击“允许本次协助”后才传递连接信令。同账号设备保持免密直连；填入错误密码仍提示不正确，不会自动改为无密码申请。拒绝、超时、离线均有明确提示。

## Windows 锁屏远程（1.7.0 测试版）

在“连接设置 → Windows 锁屏远程”登录速克账号后点击“启用锁屏远程”，确认说明并在 Windows 管理员授权提示中选择允许。v1.7.5 起登录账号后自动准备，首次或更新服务仍需 Windows 管理员授权；普通邀请协助本身仍不需要管理员权限。

系统服务安装在 `%ProgramFiles%/SKDeskSecure`，服务名 `SKDeskSecureDesktop`，以 LocalSystem 运行，仅在当前 Windows 用户已登录、两端速克登录同一账号且协助已授权时抓取和操作系统桌面。普通邀请协助不能获得此权限。可在原处“关闭并卸载”。不保存 Windows 密码，不修改 Windows 登录保护、自动登录或 UAC 设置。

先建立同账号远程，再在受助端按 Win+L 锁屏。Windows 登录界面通过原 WebRTC 加密通道传输，仍自动选择局域网、P2P 或中转；使用键盘输入 Windows 密码或 PIN。Windows 登录界面暂不支持剪贴板、文件传输和发送 Ctrl+Alt+Del；若电脑要求 Ctrl+Alt+Del，需由本地先按下。

**当前边界：需要先登录 Windows 并保持客户端运行。退出 Windows 登录、关闭客户端和重启会断开；未实现开机无人登录时的远程接入。锁屏模式最多 15 帧/秒，多个显示器共享本机抓屏资源。v1.7.4 已由用户确认先锁屏后连接及解锁；其他 Windows 环境及“连接后再锁屏”等场景仍需分别验收。**

服务命名管道仅允许安装时的 Windows 用户、管理员及 SYSTEM，拒绝网络管道访问；每个协助授权包含服务随机挑战、设备及账号，使用固定公钥独立核验 Ed25519 签名，并每 30 秒更新 90 秒有效期的授权。断开后停止抓屏、释放按键；取消或退出账号后不能继续续期。

构建系统服务：需要 .NET SDK（目标 .NET Framework 4.8）和锁定版本的 BouncyCastle.Cryptography 2.7.0。执行 `npm run build:secure` 后再构建客户端；构建产物以带 SHA256 的 `desktop/secure-payload.cjs` 进入签名增量更新，不改变不可变启动器。

## 我的设备备注

在“我的设备”中点击设备卡片上的“备注”，可设置最多 40 个字符的备注名。
当前设备、在线或离线设备都可修改；备注同步到同一账号的其他客户端，重开软件后仍保留。
“我的设备”和首页同账号快捷连接都会优先显示备注，清空并保存可恢复默认名称。
备注属于当前账号，不会修改 Windows 电脑名称，也不会改变设备代码。

## v1.5.2 登录与确认修复

修复 Windows 盘符大小写被页面地址规范化后，导致本机接口误被拒绝的问题。保留窗口、主页面和本地文件路径校验。
区分用户拒绝、本机接口失败、账号未核验、协助凭证失败和客户端更新中等原因。
连接按钮不再清空对方临时密码，连接失败后可以直接重试。
电脑名称和硬件信息均为可选信息。无法采集时仍可登录和远程；授权以服务器签名、账号、设备代码和会话校验为准。
已有设备在补齐硬件标识时，可凭原设备凭证保留编号；有稳定硬件标识时继续支持重装恢复编号。
受此问题影响的旧版可能连更新接口也无法调用：请退出所有旧程序，再从官网下载新版打开。

## 开机自动启动

v1.5.1 起，本机部署后默认开启当前用户的 Windows 登录自动启动，启动路径指向本机部署的 SKDesk.exe。
“连接设置 → 本机部署与桌面入口 → 开机自动启动”可以关闭或重新开启。
程序记住关闭设置；后续启动与更新不会强制恢复。Windows 启动应用中禁用后，也会显示禁用状态。
自动启动后正常显示客户端，登录账号凭证可按原有方式恢复；普通邀请继续要求本机确认。
v1.4 及以上可点击右上角“检查更新”升级；更早版本需退出旧程序后打开新版。

## v1.5.0 登录与连接修复

修复旧客户端“无法核验账号登录”的问题：硬件标识不可用时仍可登录；账号凭证绑定签名、设备代码和令牌哈希。
通过带随机挑战的服务器签名时间校验短期凭证，避免本机时间偏差误判签名过期。
同账号直连同时校验本机登录账号、签名中的受助设备代码、会话编号和对方代码；v1.5.2 起硬件采集结果不再作为登录或协助授权的必要条件。
Windows 凭证加密暂不可用时允许本次登录，并明确提醒关闭后需重新登录，不保存明文令牌。

侧边栏“连接设置”上方增加“我的设备”，包含当前账号的本机、在线和离线设备。
输入 9 位对方代码并离开输入框后检测在线状态；在线绿色、离线红色，代码数字放大。
连接区域和页面顶部显示离线、网页端不能受控、密码错误、设备忙、等待确认及 P2P 超时等具体原因。
两端均需运行 Windows 客户端；账号密码不是 8 位数字邀请密码。

## 点击更新与增量发布

v1.3 及更早版本没有更新器，需要先退出旧程序，再下载并打开一次 v1.5.2 程序。
从 v1.4.0 起，右上角点击“检查更新”，后台比较文件 SHA256，只下载有变化的文件。
更新经过固定 Ed25519 公钥验签和逐文件校验，完成后自动重新打开；无需安装向导或管理员权限。
更新文件保存在当前 Windows 用户的数据目录，不改写正在运行的 EXE；v1.5 起可从部署后的桌面快捷方式启动。
未发布新版本时提示“当前已是最新版本”。正在协助或等待确认时禁止更新，避免中断。
下载/验签失败保留原版本；新版未成功加载界面时，下次启动恢复上一版本或内置版本。
本机账号凭证与设备数据独立保存，更新不会主动退出账号或重新分配硬件编号。
增量更新覆盖应用 JS、界面和资源；Electron 或本机模块/ABI 升级需要换用完整新版 EXE。

发布后续版本：修改 package.json 版本、构建并测试；运行 `pnpm build:update`。
上传 update-release/files 内的内容寻址文件至 `/opt/skdesk/public/updates/files`。
将 unsigned-manifest.json 上传到服务器后，在服务器运行以下命令；只在验证文件完整后最后发布清单：

```sh
/opt/node-skdesk/bin/node /opt/skdesk/deploy/sign-update.mjs unsigned-manifest.json /opt/skdesk/public/updates/latest.json /etc/skdesk/session-signing.pem
```

私钥始终留在服务器。固定更新地址为 `https://skdesk.158225.xyz:2443/updates/latest.json`。
package.json 的 updateRuntime 必须与内置运行环境一致；改变 Electron、本机依赖或引导更新器时应提高 nativeRevision/bootstrap 并发布完整 EXE。

## 固定编号

优先使用 SMBIOS UUID 和主板序列号生成硬件指纹；无有效数据时依次尝试主板、BIOS、主硬盘序列号。
指纹不依赖 Windows SID、注册表 MachineGuid、网卡地址或软件缓存。
清除缓存、移动程序、重装软件或 Windows 后，关键硬件标识不变即可恢复原设备代码。
更换主板或修改固件标识可能改变编号；无有效硬件标识时界面会提示不能保证固定编号。

同步电脑名称、厂商/型号、CPU、内存、主板型号、系统版本、BIOS 版本及指纹哈希。
原始硬件序列号不上传。“连接设置”可以查看硬件和同步状态。
务必备份服务器 /var/lib/skdesk/devices.json 与 /etc/skdesk，保留编号映射和密钥。

## 邀请有效期

在“复制邀请信息”下方选择有效期，再点击复制：

| 选项 | 自动换密时间 |
|---|---|
| 一次 | 成功接受一次普通邀请后；拒绝或超时不消耗 |
| 今天 | 北京时间当天结束 |
| 本周 | 北京时间本周日结束 |
| 本月 | 北京时间本月最后一天结束 |
| 今年 | 北京时间今年最后一天结束 |
| 长期 | 不按时间失效，可以手动刷新 |

同一期限内重复复制保留有效密码，切换期限生成新密码。
到期旧密码立即失效，服务器自动换密，客户端在线时同步新密码。
密码到期不会主动结束已建立的协助。邀请密码在服务器使用 AES-GCM 加密保存。
普通邀请需要受助方本机确认。协助期间可点击悬浮条“结束”，或按 Ctrl+Alt+Esc。

## 登录账号与自己的设备

右上角可创建或登录账号：账号 3–32 位字母、数字或 _.-，密码至少 8 位。
两端均打开客户端并登录同一账号后，点击“我的设备”可免邀请密码、免本机确认直连。
任一端未登录、退出、登录失效或属于其他账号，均不能使用该账号直连权限。
免确认需要服务端签名、本机已登录账号和本机设备代码匹配；硬件可读取时还验证硬件指纹，始终保留结束悬浮条。
“连接设置”可退出账号或修改账号密码；修改密码撤销所有设备的登录状态。
服务器保存 scrypt 密码哈希，登录令牌有效 30 天；Windows 使用 DPAPI 加密保存令牌。
重装 Windows 后需重新登录，设备代码仍可恢复。

## 快速连接

首页下方“最近协助”显示协助过的设备，点击即可发起连接。
普通设备上次成功使用的邀请密码由 Windows 加密保存，仍有效时直接使用，失效则要求输入新密码。
同账号设备直接连接。连接记录保留最近 30 条；清空记录也会清除保存的邀请密码。

## 其他功能与边界

支持最多 8 块远程屏幕、拖动屏幕标签排序、双方多屏时一一对应、键鼠滚轮、灰度 / 流畅 / 清晰三档画质、仅查看、全屏、文字回执、文件传输及自动 TURN 兜底。
中文通过“文字”发送，默认粘贴到远程当前输入位置；也可取消勾选只写剪贴板。收到对方回执后才显示成功。
网页协助已关闭，官网下载站和管理员后台保留。
本版本仍需客户端保持运行，支持文件传输和多显示器切换；暂不传输音频。
Windows 锁屏控制需已启用系统服务和同账号协助授权；UAC 等安全桌面兼容性需单独实测。未购买商业代码签名证书，可通过 SHA256SUMS.txt 核对文件。
已验证合成视频和输入消息的公网通路，真实双 Windows、不同 DPI 和管理员窗口操作仍需实机验收。

## 源码与构建

基于用户提供的 BilldDesk（MIT）源码改造，原始代码保留在上级目录。
来源和许可见 THIRD_PARTY_NOTICES.md 与 LICENSE.txt。
建议 Node.js 24 LTS、pnpm 10：

```sh
pnpm install --frozen-lockfile
node node_modules/electron/install.js
pnpm test
pnpm build
pnpm exec electron-builder --win portable --x64 --config.electronDist=node_modules/electron/dist
```

更换部署服务器时需同步调整客户端 SERVER_URL、index.html 的 CSP 和 desktop/server-public-key.pem。
公钥必须对应部署服务器的 Ed25519 私钥，私钥只保存在服务器。

## 服务器运维

- Debian 12 / 129.121.98.207；官网使用标准 HTTPS 443，2443 同时保留；客户端信令/更新仍使用 2443。
- 443 原有 REALITY 服务继续运行，普通 TLS 转发至 Nginx 127.0.0.1:8443，以 SNI 区分 skdesk 和 x1 站点。
- STUN/TURN 3478 TCP/UDP；中继端口 49160–49260 UDP。
- 程序 /opt/skdesk，信令仅监听 127.0.0.1:4300，以 skdesk 用户运行。
- /var/lib/skdesk/devices.json 保存硬件映射、账号哈希、令牌哈希、加密邀请密码，文件权限 600。
- 私有配置 /etc/skdesk/server.env、turnserver.conf、session-signing.pem 应连同数据备份。
- Nginx 配置 /etc/nginx/conf.d/skdesk.conf；证书 /etc/skdesk/letsencrypt，每日自动检查续期两次。
- 初次部署参考 deploy/bootstrap.sh；当前站点配置见 deploy/nginx-site.conf。完整 server/ 上传至 /opt/skdesk/server。
- 运行 pnpm build:site，将 site-dist 内容上传至 /opt/skdesk/public；connect/ 显示关闭提示，根目录为介绍下载站。
- 管理员白名单由 systemd 的 ADMIN_USERNAMES=jukey 配置，默认没有管理员；普通客户端账号不能访问后台。
- 后台使用独立 HttpOnly/Secure/SameSite Cookie，有登录限速、同源检查和 30 分钟空闲超时；修改账号密码会使后台登录失效。
- root 登录密码未写入客户端、源码、安装包或部署配置。

```sh
systemctl status skdesk skdesk-turn nginx
systemctl restart skdesk
journalctl -u skdesk -n 50 --no-pager
systemctl list-timers skdesk-cert-renew.timer
curl https://skdesk.158225.xyz:2443/health
```

pnpm test 覆盖硬件恢复、账号隔离、登录撤销、邀请期限和签名校验。
tests/public-webrtc.mjs 使用 Chrome 和合成画面，通过公网服务测试中继视频、输入消息、文字及断开。
其他开发机运行公网测试时，需要调整脚本里的 Playwright 包路径。

## P2P 视频与会话日志

客户端先从服务器获取已获协助授权的对方内网 / 公网地址提示，用 ICE 主机候选尝试局域网直连。3 秒未建立则启用 STUN 获取公网映射尝试 P2P，再过 8 秒未建立则添加 TURN 并重新协商；直连成功时视频、键鼠、文件不经过服务器中转。地址相同或内网网段相同不能单独证明处于同一局域网，最终以实际选中的 ICE 线路为准。
同一局域网可以建立局域网直连；公网通过 ICE/STUN 尝试打洞，不保证所有 NAT 或防火墙都能直连。
直连失败会自动尝试服务器中转；新逻辑需要两端均更新。旧客户端若强制仅 P2P，需更新后才能自动兜底。
连接窗口显示“局域网直连 / P2P直连 / 安全中继”，便于确认当前线路。
服务器记录发起、接受、实际连接、连接类型、断开原因和时长，不接收或保存屏幕内容。
会话日志为 /var/lib/skdesk/session-events.jsonl，也可通过 journalctl -u skdesk 查看。
服务器仍保存用户要求的设备与账号数据；上述日志不包含键盘内容、邀请密码或账号密码。

## 1.6.1 更新

- 我的设备支持自定义备注，同账号同步，离线设备也可编辑。
- 远程屏幕标签可拖动排序并保存；双方多屏时可选“一一对应”，按标签顺序映射本机显示器。不相等时只映射双方都有的数量，其余屏幕可返回窗口模式切换。请用两台真实多屏电脑确认各自缩放设置下的显示效果。
- 受助端自动最小化，仅保留“结束”小浮钮；断开后恢复。文件传输时浮钮临时显示方向、文件名、进度和取消。
- 本机资源管理器复制文件，在远程画面按 Ctrl+V 上传；保存到受助端当前前台资源管理器文件夹，否则保存桌面。同名文件自动改名，不覆盖。仅支持文件（每次最多 50 个，单文件最多 8 GB），文件夹请先压缩 ZIP。
- 文字发送默认粘贴到远程当前输入位置，可取消勾选改为只写剪贴板。必须收到受助端回执才显示成功；先点击远程输入位置。
- 远程顶部合并为一行，显示局域网 / P2P / 服务器实际连接模式。连接记录按设备合并，可查看每次时间日志。
- 网页协助入口和服务端网页注册关闭。管理员在线设备可点击查看用户名、ID、公网/局域网 IP、备注，并支持删除设备/账号。删除设备会断开协助；删除账号解除设备绑定并使登录失效；当前登录管理员不能删除自己。
- 新会话日志保留双方当次公网 IP、已上报的内网 IP 及实际连接方式。管理员可按北京时间日期范围删除日志（包含首尾日期）；旧日志没有采集的 IP 不会推测补写。

- 三档画质支持连接前选择及连接中切换。灰度为实际传输的黑白画面，单屏最高约 960×540、10 帧/秒，视频总码率上限约 450 kbps（多屏均分）；流畅约 1.5 Mbps / 15 帧，清晰约 6 Mbps / 30 帧。实际流量还受画面变化和协议开销影响。

## 管理员统一升级

后台“运行概览”可一键通知所有客户端升级到已签名发布的正式版本。普通升级在协助结束后执行，重大更新可勾选强制：提示 15 秒后结束协助、校验增量包并重启；服务端设置最低允许版本，升级前禁止新协助。离线设备上线后补执行。客户端升级指令还需要服务器签名、设备 ID、有效期和防重放校验，不能指定任意下载地址。

此接收功能从 1.6.1 起提供，旧版需要先点击客户端“检查更新”升级一次。后台显示已通知、等待协助结束、下载中、准备重启和需手动升级等状态。涉及 Electron 等运行环境变更时，引导下载完整 EXE；更新成功前受强制最低版本限制。删除客户端不会撤销已发布的最低版本策略。
