🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

鸿蒙投屏控制 ns-zzj/dsh-hos-scrcpy

DeepSeek Harnessv3.0.2
ns-zzj0 天前有提交已提供中文文档扫描:含敏感能力

DSH 的鸿蒙投屏 provider —— 让 DSH 通过 hdc 连上鸿蒙设备:看画面、点/滑、按键、输入文字、给…

37.9/100
综合分
9
GitHub 星标
58
npm 周下载
—/5
用户评分

数据截至 2026/11/7 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @nszzj/dsh-hos-scrcpy
npm 源 · @nszzj/dsh-hos-scrcpy 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么[目录]—
dsh 原生插件 · vision
暂无时间戳·判据 →
装得上吗[实装验证]—
曾在 dsh 0.2.1-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.2-rc.1,本站尚未在新版下复验
L4 · 真实安装等级说明 →
数据截至 2026/10/24·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/06·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 0 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包@nszzj/dsh-hos-scrcpy @ 3.0.2
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/20 23:03:07

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 17 处,展示前 15 条)
  • 读取本地文件
    lib/index.js:152
    const obj = JSON.parse(readFileSync(CONFIG_FILE, 'utf8'))
  • 写入本地文件
    lib/index.js:167
    mkdirSync(CONFIG_DIR, { recursive: true })
  • 写入本地文件
    lib/index.js:168
    writeFileSync(CONFIG_FILE, JSON.stringify(cfg, null, 2), 'utf8')
  • 执行外部命令来自配置/变量
    lib/index.js:178
    execFile(exe, args, { maxBuffer: 8 * 1024 * 1024, windowsHide: true }, (err, stdout, stderr) => {
  • 读取本地文件
    lib/index.js:199
    if (existsSync(p)) return { path: p, source: 'JAVA_HOME' }
  • 读取本地文件
    lib/index.js:203
    if (existsSync(p)) return { path: p, source: 'candidate' }
  • 读取本地文件
    lib/index.js:213
    if (existsSync(p)) return { path: p, source: 'DEVECO_SDK_HOME' }
  • 读取本地文件
    lib/index.js:217
    if (existsSync(p)) return { path: p, source: 'candidate' }
  • 执行外部命令固定命令
    lib/index.js:261
    const killer = spawn('taskkill', ['/pid', String(proc.pid), '/T', '/F'], { windowsHide: true, stdio: 'ignore' })
  • 读取本地文件
    lib/index.js:337
    if (!existsSync(SIDECAR_OUT) || !existsSync(SDK_JAR)) {
  • 执行外部命令来自配置/变量
    lib/index.js:354
    proc = spawn(j.path, ['-cp', SDK_JAR + cpSep + SIDECAR_OUT, 'Main', '--sn', sn, '--hdc', h.path, '--port', '0',
  • 发起网络请求
    lib/index.js:640
    outcome = await gate.approval.request({
  • 发起网络请求
    lib/index.js:927
    outcome = await approval.request({
  • 发起网络请求
    lib/index.js:972
    outcome = await approval.request({
  • 发起网络请求
    lib/index.js:1017
    outcome = await approval.request({
扫描于 2026/11/6(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 多设备实时投屏
  • 鼠标点按滑动
  • 系统按键与文字注入
展开完整介绍(160 字)↓

DSH 的鸿蒙投屏 provider —— 通过 hdc(USB 或 hdc tconn 无线)把鸿蒙手机/平板接进对话: 多设备实时投屏、鼠标点按滑动、系统按键、文字注入;零售设备可用,不需要 root、不改系统分区; 转屏与切页暂停都不黑屏。界面与 AI 工具在 dsh-scrcpy-core,多个平台可同时投屏。

3.0.22026-10-01
· 更新日志 — 修复改名后装不上(前后翻车三次) · 修复 · 第一次:装不上,报 failed to import:给包加 npm scope 时,包名、README、安装记录都改了, 唯独忘了 cordis.patch.yml 里硬编码的包名。加载器按旧名找不到包。 · 第二次:1.0.1 还是装不上:名字改对了,但 name: @nszzj/... 没加引号 —— YAML 里以 @ 开头的裸标量是非法字符, DSH 当场拒装(bad indentation of a mapping entry)。 · 第三次:1.0.2 装上了,但 DSH 起不来:client/client.js 里还硬编码着旧 id 'dsh-scrcpy-core', 客户端半区被加载两次 → duplicate factory registration → web boot 失败、应用打不开。 现在 id 已改,并加了一道幂等守卫(第二次执行直接跳过,不再重复注册)。 · 自我评价:三刀,一刀比一刀深 —— 先漏配置、再漏 YAML 语法、最后漏客户端入口, 全靠 DSH 的崩溃日志才把最后一处挖出来。作者是个傻逼,认了。 · 安装方式 在 DSH 的插件面板里装上: · core(必装):@nszzj/dsh-scrcpy-core@1.0.2 · 本包:@nszzj/dsh-hos-scrcpy@3.0.2 或者下载下方的 Provider tgz包 和 Core tgz包。
3.0.02026-09-29
· 更新日志 — 拆成 core + provider,重做画面与转屏 · 新增 · 有线 / 无线分别配画质:从原来的固定档位改成两端各自配缩放与帧率,都能到「原画」,帧率 120 封顶。 · 切页自动暂停:面板切走时自动暂停推流,不用常驻、也不用断开重连,暂停期间占资源很少; 切回来立刻出画。 · 跨平台多设备:每台设备独立会话与独立标签页;鸿蒙和安卓可以同时投屏,互不冲突。 · 构建戳:每个包带 YYYY-MM-DD.B,显示在「连接设置」按钮行左边,「哪个包没换」一眼可见。 · 变更 · 拆成两个包:界面、设备列表、投屏面板、AI 工具与提示词全部搬到 dsh-scrcpy-core, 与安卓 provider 共用同一套工具名(scrcpy_devices / scrcpy_screenshot / scrcpy_locate / scrcpy_tap / scrcpy_longpress / scrcpy_key / scrcpy_input);本包只负责连接与出画。 · 两个包自由装:互不自动拉取;不装 core 时本包不激活。 · 运行环境:Java 8 及以上都可以。 · 修复 · 转屏后画面不跟:现在转屏画面跟着走,不需要重连。 · 切页 / 转屏回来黑屏:切走再切回来,画面立刻恢复,不再黑屏。 · 暂停期间转过屏,切回来必黑:现在能正常恢复。 · 移除 · 不再提供设备日志流(hilog):面板里的日志只作插件诊断用。 · 键盘接管:鸿蒙不支持,界面会明确说明(不再让人以为可以打字)。 · 安装方式 在 DSH 的插件面板里装上: · core(必装):@nszzj/dsh-scrcpy-core · 本包:@nszzj/dsh-hos-scrcpy 或者下载下方的 Provider tgz包 和 Core tgz包。
2.1.12026-09-24
· dsh-hos-scrcpy 更新日志 · v2.1.1(2026-09-24)— 依赖声明与安装说明修正 · 修复 · 部分机器上可能被多装一份宿主包 @deepseek-ai/dsh-tools:插件把它声明为 peer 依赖,但没标 optional。 如果用户的 profile 开着 autoInstallPeers(pnpm 的默认值),pnpm 会为插件单独装一份;profile 是 hoisted 平铺布局, 这一份会盖住 DSH 自带的那份,导致插件注册的工具与宿主对不上。现在标为 optional (peerDependenciesMeta: { "@deepseek-ai/dsh-tools": { "optional": true } }),pnpm 不会再单独安装它。 * 注:DSH 自己创建的 profile 会写入 autoInstallPeers: false,所以这个问题在本机复现不出来, 只在别人的 profile(老版本 DSH 建的、或手工建的)上出现。属于预防性修复,未在他人机器上实测复现。 · 说明 · 本版不含任何运行时改动:lib/index.js 与 client/client.js 与 2.1.0 逐字节相同 (已比对 2.1.0 tgz 内的同名副本),因此 2.1.0 的兼容性与实测范围沿用;2.1.1 本身未在真机复测。 · 安装方式 从仓库直接装(推荐,不用下载文件): · DSH 全局安装:dsh plugin --profile web add github:ns-zzj/dsh-hos-scrcpy · DSH 非全局安装:npx @deepseek-ai/dsh plugin --profile web add github:ns-zzj/dsh-hos-scrcpy 也可以下载下方 .tgz,在存放它的目录里执行: · dsh plugin --profile web add dsh-hos-scrcpy-2.1.1.tgz
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-hos-scrcpy DSH 的鸿蒙投屏 provider —— 让 DSH 通过 hdc 连上鸿蒙设备:看画面、点/滑、按键、输入文字、给 AI 看。 界面、AI 工具、设备与焦点、路由、门槛全在 core 里;本包只负责「这台设备怎么连、怎么点、怎么出画面」。 这是什么 | 角色 | dsh-scrcpy 的 provider(鸿蒙平台) | | 依赖 | 需要 dsh-scrcpy-core(不装它本包不激活)。本包不声明对 core 的包依赖 —— 两包自由装,互不自动拉取 | | 传输 | hdc:USB 调试,或 hdc tconn 无线连接 | | sidecar | 每台设备一个 Java 进程(Dev/src/Main.java 的编译产物随包发布),由本包 spawn 拉起:java -cp <jar>;<out> Main --sn … --hdc … --port 0 --scale … --frame-rate … --bit-rate … --ifr … --idle-exit …
展开完整文档(README 剩余 1 节)
dsh-hos-scrcpy

DSH 的鸿蒙投屏 provider —— 让 DSH 通过 hdc 连上鸿蒙设备:看画面、点/滑、按键、输入文字、给 AI 看。

界面、AI 工具、设备与焦点、路由、门槛全在 core 里;本包只负责「这台设备怎么连、怎么点、怎么出画面」。

这是什么

| 角色 | dsh-scrcpy 的 provider(鸿蒙平台) |
| 依赖 | 需要 dsh-scrcpy-core(不装它本包不激活)。本包不声明对 core 的包依赖 —— 两包自由装,互不自动拉取 |
| 传输 | hdc:USB 调试,或 hdc tconn 无线连接 |
| sidecar | 每台设备一个 Java 进程(Dev/src/Main.java 的编译产物随包发布),由本包 spawn 拉起:java -cp <jar>;<out> Main --sn … --hdc … --port 0 --scale … --frame-rate … --bit-rate … --ifr … --idle-exit … |
| 协议 | 浏览器半区直连 sidecar 的 WebSocket:二进制 H.264(annex-B)+ JSON 控制消息(size / log / hid);触控与按键走同一条连接 |
| 不在流路径里 | provider 只负责起停 sidecar、报设备、报配置 —— 视频帧与触控不经它(这也是它与安卓 provider 最大的区别) |
| 没有 | 浏览器半区、AI 工具、AI 提示词、UI 注册、焦点逻辑(都归 core) |

特点

| 特点 | 说明 |
| 跨平台多设备 | 多台同时投屏,各自独立会话与独立标签页;安卓和鸿蒙可以同时显示,互不冲突。操作只作用于当前聚焦(面板可见)的那台,不会点错 |
| 华为零售机可用 | 走系统投屏服务那条通路,不需要 root、不改系统分区、不需要白名单 |
| 转屏 | 转屏后画面跟着走,不需要重连、不会黑屏(重建只由流里的 SPS 驱动,平台无关) |
| 切页 / 暂停 | 切走时自动暂停:不用常驻、也不用断开重连,暂停期间占资源很少;切回来立刻出画(sidecar 侧缓存「配置 + 最近关键帧起到现在的帧」并补发);暂停期间转过屏,切回来也不崩 |
| 画质 | 有线 / 无线分别配缩放与帧率;两端都能到原画,帧率 120 封顶 |
| AI 操作与权限 | 界面与全部 AI 工具在 core(截图直接交给 AI / 控件清单 / 点击 / 长按 / 按键 / 文字输入);权限四项各自「禁止使用 / 每次确认 / 无需确认」三态,后三项依赖截图,关掉时工具直接报原因、不反复重试 |
| 自由装卸 | provider 不含界面、不含 AI、不写提示词;装 core + 装对应平台的 provider 即可,两个 provider 各装各的、互不拉依赖 |

安装

在 DSH 的插件面板里装上两个包:

| 顺序 | 装什么 | 地址 |
| 1 | core —— 界面与 AI 工具都在这里 | @nszzj/dsh-scrcpy-core |
| 2 | 本包 @nszzj/dsh-hos-scrcpy —— 鸿蒙 provider | @nszzj/dsh-hos-scrcpy |

- 两包各装一次,别只装 provider(core 缺了本包不会激活)
- 装完 完全退出 DSH 再打开(宿主半区改动只有重启才生效;浏览器半区刷新即可)
- 只装 provider 不装 core:本包因注入不满足而静默不激活(设计如此,不是 bug)

快速开始

1. 设备开启开发者模式 + USB 调试(或 hdc tconn <ip:port> 连上;hdc list targets 能看到它)
2. DSH 菜单里出现这台设备 → 点那行的「投屏」→ 右侧栏展开成该设备的投屏标签页(首次部署约 5~10 秒)
3. 多设备:每台一张标签页,点哪行跳哪张;某台要收工,点它那行的「断开」(只断这台)
4. 画质(缩放 / 帧率)在菜单里那组 provider 的「连接设置」里调;面板里的「设置」管的是 AI 权限(截图 / 控件 / 点击 / 按键 / 输入,后三项依赖「允许截图」)
5. AI 工具作用于当前聚焦(面板可见)的那台设备;没有聚焦设备会直接报错,不猜设备

环境要求

| 依赖 | 说明 |
| DSH | 电脑端 DeepSeek Harness(Windows / macOS / Linux) |
| Java 8+ | sidecar 的运行环境(JAVA_HOME / DevEco SDK 优先,也可在「连接设置」里手动指定) |
| hdc | DevEco Studio 自带:<DevEco>/sdk/default/openharmony/toolchains/hdc.exe |
| 鸿蒙设备 | 开发者模式 + USB 调试(或 hdc tconn 无线连接) |

目录结构

lib/index.js provider 实现(起停 sidecar / 环境检测 / 连接配置 / 上报设备 + 画面四件套) resources/hosScrcpy-1.0.18-beta.jar HOScrcpy SDK(第三方,见 THIRD_PARTY_NOTICES.md) resources/out/ sidecar 编译产物(Main 及内部类),随包发布 cordis.patch.yml DSH 插件清单 Dev/src/Main.java sidecar 源码(DSH ⇄ 设备的 Java 桥) Dev/demo/ 独立测试件(不依赖 DSH,也不进 npm 包) Dev/doc.md 开发资料:架构图 / 开发约定 / 各 demo 用途 Dev/doc-sidecar.md sidecar 协议、编译(必须 --release 8)、踩坑

已验证环境

下表列出的组合,都是真机验过的;没列的组合,能用是运气,不能用请提 issue。

| 设备 | 系统 | 内核 | 验证范围 |
| SLY-AL00 | 鸿蒙 7.0.0.109(SP6C00E105R3P3),API 26 | HongMeng Kernel 1.13.0 | 投屏画面、鼠标点按与拖拽、底部五个固定键、转屏、切页暂停恢复 |

早期在另一台鸿蒙 6.x 的设备上也验过(投屏 / 点击与长按 / 按键 / 文字输入 / 转屏 / 切页暂停恢复 / 多设备并行),但那台的系统版本号当时没记下来——这张表就是为此而建,以后每次验证都记一行。

未验证:其他品牌与型号的鸿蒙设备、鸿蒙手表、模拟器。

已知限制

- 连接中途不能改缩放 / 帧率:要换就断开重连(改设置只对下次连接生效)
- 不做设备日志流(hilog):面板里的「日志」是插件诊断日志
- requestIDRFrame() 在 SDK 1.0.18 里是空方法,不能用来"要一个关键帧";画面重建靠 sidecar 的 GOP 缓存补发(暂停期间转屏 → 恢复时补发配置 + 关键帧)
- 零售设备上可用的镜像通路就是 HOScrcpy 访问的那条系统服务;root / 改系统分区 / 白名单那几类方案在零售机上不可用
- 改宿主半区后必须完全退出 DSH 再打开
- 文字注入会覆盖手机剪贴板:走 uitest uiInput text,它内部是"写剪贴板再粘贴",所以电脑每打一次字,手机剪贴板就被改一次
- 按键慢:返回/主页走 sidecar 的常驻通道(很快),但手动输入的退格 / 回车 / 方向键走 hdc shell uinput -K,每键约 0.3 秒(一次 hdc 往返),连续删字会明显卡
- 读手机剪贴板需要鸿蒙 7.0+:Ctrl+C 靠 testhelper get-pastedata(约 0.6 秒/次);这个命令在 6.x 上不存在,那边会静默忽略

二次开发

- 架构图、开发约定、每个 demo 是干嘛的 → Dev/doc.md
- sidecar 的协议 / 编译 / 排障 → Dev/doc-sidecar.md
- 基于 core 开发一个 provider → core/Dev/doc.md

许可与第三方

- 本包:MIT(见 LICENSE)
- resources/hosScrcpy-1.0.18-beta.jar(HOScrcpy SDK)的出处、签名情况与再分发风险,见 THIRD_PARTY_NOTICES.md
- jmuxer.min.js 只存在于 Dev/demo/(开发件,不随 npm 包发布);它仍随 Git 仓库分发,所以那边单独有一份声明 → Dev/demo/THIRD_PARTY_NOTICES.md
预览分享卡片长什么样 ↓ns-zzj/dsh-hos-scrcpy
分享 · DeepSeek Harness Hub
ns-zzj/dsh-hos-scrcpy

DSH 的鸿蒙投屏 provider —— 让 DSH 通过 hdc 连上鸿蒙设备:看画面、点/滑、按键、输入文字、给…

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部