Skip to content

dsh-remote-control-desktop

Verified

dsh-remote-control-desktop · v1.6.4 · MIT · Web UI

DSH 手机远程访问 + 远程桌面:内置本地代理(8090)+配置面板+远程屏幕/鼠标/键盘。配合任意内网穿透工具(cpolar/frp/ngrok等)把公网URL转发到 127.0.0.1:8090 即可用手机浏览器远程使用本机 Harness。本包为 dsh-remote-desktop 的修复分支,已修补 DSH 0.2.x browser-auth 导致的 401(dsh web authentication required)。

Install

dsh plugin add dsh-remote-control-desktop

Confirm the layer applied with dsh --profile default --dump-config — see the install guide.

Source

Tags

Readme

dsh-remote-control-desktop 安装使用手册

DSH 手机远程访问 + 远程桌面插件 让手机(出门在外)通过浏览器远程使用电脑上的 DeepSeek Harness,并可远程查看/控制电脑屏幕。


〇、关于本包

本包是 dsh-remote-desktop(作者 xiongjie771017,MIT)的修复分支,由 ayout 维护。 功能与上游一致,没有增删任何功能,只做必要修复:

修复 1:DSH 0.2.x 下手机经穿透访问必然 401(dsh web authentication required; reopen the URL printed by dsh web.)

DSH 0.2.x 的 browser-auth 是「绑定 authority 的签名 cookie,回环不豁免」,而本插件的 8090 代理只改写 Host/Origin/Referer 再转发,没有任何 cookie/token 逻辑,所以经隧道进来的请求一律被 DSH 拒绝。 修复方式:代理在转发前调用 ctx.connection.authenticatedUrl() 用本进程启动 token 换一份 dsh-auth-* cookie,再挂到转发请求上(HTTP 与 WebSocket upgrade 两处)。 代码中有 [PATCH harness-auth] 标记,可搜索定位。

修复 2(v1.6.2):改包名后客户端半边无法注册,导致 DSH 启动失败

lib/client.js 里 window.__ModuleLoader__.load({ id }) 的 id 必须等于 npm 包名(DSH 用它把客户端 bundle 对应回宿主插件)。上游包名是 dsh-remote-desktop,本分支改名后该值没跟着改,于是 DSH 报 client-modules: duplicate factory registration for "dsh-remote-desktop" → web boot: 1 entry did not activate → 应用无法启动。 v1.6.2 已把该 id 改为 dsh-remote-control-desktop。

上游版权归原作者,本分支的修改同样以 MIT 发布,详见 LICENSE。

关于 npm 的 dual-use 声明:本插件具备「远程屏幕捕获 + 输入注入 + 可选提权解锁服务」等安全敏感能力, 按 npm 双用途内容政策 属于 dual-use content。 因此 package.json 声明了 "contentPolicy": { "class": "dual-use" },包根目录附有 DISCLOSURE 文件,逐项说明其中的安全敏感能力与正当用途。 该声明按政策要求永久保留,后续版本不会移除。

⚠️ 本插件自身不做身份验证——公网安全完全依赖穿透工具的认证。请务必读完并执行第七节「安全须知」。

更新日志

版本 变更
1.6.4 ① 电脑端面板改为侧边栏入口 + 点击弹出(原先是一个常驻可拖拽悬浮框,挡视线):入口走 DSH 官方 sidebar.footer.action 插槽(与「会话管理」同机制,侧栏折叠时自动变成纯图标),点开是整屏式弹窗,开关改为拨动开关。② 二维码改为本机生成(lib/qr.js),不再依赖 api.qrserver.com 外链,输入地址即实时预览。③ 主题跟随:运行时探测 DSH 当前主题并镜像到 <html data-dsr-theme>,用自带的两套色板渲染 —— 不依赖 --dsw-alias-*(其中 bg-elevated/fill-l2/accent-*/danger 等根本没有定义,会导致深色主题下一块深一块浅)。④ 新增 npm dual-use 声明(contentPolicy 字段 + DISCLOSURE 文件)。
1.6.3 内容与 1.6.2 相同(1.6.2 在 npm 侧未上线,改用新版本号重发)。
1.6.2 修复 lib/client.js 的模块 id,使其等于包名 dsh-remote-control-desktop。
1.6.1 首个发布版本:基于上游 1.6.1,含 [PATCH harness-auth] 401 修复。该版本会导致 DSH 无法启动,请勿安装。

一、这个插件能做什么

功能 说明
📱 远程使用 Harness 手机浏览器操作电脑上的 DeepSeek Harness:对话、查看工作区、运行工具
🖥 远程屏幕 实时查看电脑屏幕画面
🖱 远程控制 拖动移动鼠标、轻点点击、右键、放大精确定位
⌨ 远程键盘 输入文字(中文/英文/数字)、发送回车、发送退格
⚡ 三档画质 流畅(最快)/ 标清 / 高清(最清晰),可随时切换
🗜 压缩开关 网络慢时开启压缩提高流畅度
📁 文件传输 手机浏览电脑目录、上传文件到电脑、下载文件到手机
📦 多选打包下载 多选文件 → 选择「打包成 zip」或「逐个单独下载」
📱 安卓 APP 内置安卓 APK,面板可扫码下载安装(WebView 包装,支持远程访问/上传/下载)
🖱 鼠标按钮 查看屏幕工具栏新增鼠标按钮:单击=左键点击,双击=左键双击(在光标当前位置)
🔒 防锁屏开关 面板一键开关:开启后电脑保持唤醒不锁屏,远程操控畅通(详见六点五节)
🔍 锁屏状态显示 面板按钮实时显示电脑锁屏状态(未锁屏/已锁屏),每 3 秒同步
📷 APK 扫码填地址 手机 App 设置界面可扫电脑面板的地址二维码,自动填入访问地址
⚙ APK 恢复能力 连接失败/404 时显示原生错误界面 + 返回设置按钮,不再卡死
🧹 历史优化 手机打开大会话只加载最近几条,向上滚动加载更多

二、准备工作

需要两台设备

  • 电脑:安装 DeepSeek Harness(dsh)的 Windows 电脑(插件在电脑端安装)
  • 手机:任何有浏览器的手机(安卓/苹果均可)

电脑端前提

  1. 已安装 DeepSeek Harness 并成功运行过 dsh web
  2. 已安装 Node.js ≥ 22.12(推荐 24 LTS;dsh 的 commander 15 要求 22.12+,插件随 dsh 运行故同样要求)
    • 检查版本:命令行执行 node -v(应为 v22.12.0 或更高)
  3. 一个内网穿透工具(免费即可,如 cpolar/frp/ngrok/natapp 等)

三、安装(电脑端,一次完成)

第 1 步:检查 dsh 是否已安装

打开命令行(CMD 或 PowerShell),执行:

dsh --version
  • 有版本号输出 → dsh 已安装,跳过第 1 步,直接进入第 2 步安装插件(无需 npm install)

  • 提示"不是内部或外部命令" → dsh 未安装,执行:

    npm install -g @deepseek-ai/dsh
    

    需要 Node.js ≥ 22.12(检查:node -v)。安装 dsh 需要管理员权限(npm 全局安装)。

第 2 步:安装插件

dsh plugin --profile web add dsh-remote-control-desktop

安装完成后重启 dsh web:

dsh web

插件会自动安装配套依赖 dsh-browser-polyfill(老手机浏览器兼容)。

第 3 步(可选但推荐):安装解锁服务

插件包含一个 Windows 解锁服务(用于锁屏状态检测和防锁屏功能)。它需要手动安装一次(Windows 服务需要管理员权限,插件无法自动注册):

C:\Users\Public\dsh-plugins\dsh-remote-control-desktop\lib\install-unlock-service.bat

双击 → UAC 提示「是」→ 自动:复制 exe 到 System32 → 注册服务 DSHRemoteUnlock(LocalSystem,开机自启)→ 启动。

验证:命令行执行 sc query DSHRemoteUnlock,应显示 STATE: 4 RUNNING。

⚠️ 更新插件版本后:解锁服务需要重新运行一次上面的 bat(服务 exe 需要更新到新版)。

不装解锁服务的后果:远程屏幕/控制/文件传输正常,但锁屏状态检测不可用(面板不显示锁屏状态)、防锁屏的锁屏状态显示失效。


四、配置内网穿透(关键步骤)

核心要求:让穿透工具把公网 URL 转发到本机 127.0.0.1:8090。

方式 A:使用 cpolar(推荐,国内速度快,免费)

  1. 注册账号:打开 https://dashboard.cpolar.com/signup 注册(邮箱+密码)

  2. 下载安装客户端:打开 https://www.cpolar.com/download 下载 Windows 安装包并安装

  3. 登录并获取 Token:

    • 浏览器打开 http://127.0.0.1:9200(cpolar 管理界面)
    • 用注册的账号登录
    • 左侧「验证」→ 复制认证 Token
    • 命令行执行:C:\Program Files\cpolar\cpolar.exe authtoken <你的Token>
  4. 创建隧道:

    配置项 填写
    隧道类型 HTTP
    本地地址 127.0.0.1:8090 ⚠️必须
    Http Auth 必须填:用户名:密码(如 dsh:你的强密码)
    Host 头域 留空
    Disable keep 不开启
  5. 记下公网 URL:创建成功后,隧道列表会显示一个公网地址(形如 https://xxxxx.cpolar.top),记下来。

方式 B:使用 frp / ngrok / natapp 等任意工具

  • 用该工具建立隧道,本地转发端口填 8090
  • 其余按该工具的文档操作
  • 工具的认证(如有)按工具配置

⚠️ 安全警告:隧道认证(Http Auth)必须设置! 不设认证 = 你的电脑对公网完全裸奔,任何人拿到 URL 就能完全控制你的电脑。


五、配置远程面板(电脑浏览器,一次完成)

  1. 电脑浏览器打开你的 Harness 界面(本机默认 http://127.0.0.1:19387)
  2. 在左侧边栏底部找到「远程访问」——就在「会话管理」上方,样式与它一致
  3. 点一下弹出整屏式配置面板(点右上角 ✕、按 Esc、或点面板外空白处收起)
  4. 在弹出的面板里填你的穿透公网 URL(如 https://xxxxx.cpolar.top)
  5. 左边的大二维码会立刻生成(不用点保存也能预览),手机扫码即可直达
┌──────────────────────────────────────────────────┐
│ 📡 远程访问                                    ✕ │
├─────────────────────┬────────────────────────────┤
│                     │  公网访问地址               │
│    ┌───────────┐    │  [https://xxxx    ] [保存]  │
│    │           │    │  穿透工具需转发到           │
│    │  二维码    │    │  127.0.0.1:8090            │
│    │  236×236  │    │  ✓ 检测到手机访问域名        │
│    └───────────┘    │                            │
│    手机扫码直达      │  控制开关                   │
│                     │  🖥 远程控制          ⬤──   │
│                     │  🗜 压缩画质          ──⬤   │
│                     │  🔒 防锁屏            ──⬤   │
│                     │  电脑当前未锁屏             │
│                     │  安卓 App                   │
│                     │  [APK码] 扫码安装客户端      │
│                     │  ▸ 使用说明                 │
└─────────────────────┴────────────────────────────┘

面板只填地址即可。隧道认证(用户名/密码)由手机浏览器访问时按穿透工具配置输入。

面板里的开关:远程控制(是否允许手机注入鼠标键盘)、压缩画质(网络慢时开)、防锁屏(见六点五节)。颜色自动跟随 DSH 的亮色/暗色主题。

二维码由本机生成(lib/qr.js,走 127.0.0.1:8092/remote-qr),不依赖任何境外图片服务,也不会把你的地址发给第三方。


六、手机使用

6.1 远程使用 Harness

  1. 手机开移动数据(或任何网络)
  2. 打开电脑面板上的公网 URL(或扫码)
  3. 若隧道设置了认证,浏览器弹出登录框 → 输入穿透工具配置的用户名/密码
  4. 进入界面即可像本地一样使用 Harness

6.2 远程查看/控制屏幕

  1. 手机页面点「🖥 看电脑屏幕」进入远程屏幕

  2. 左侧工具栏说明:

    按钮 功能
    ⚡(绿/黄/红) 画质切换:流畅 → 标清 → 高清(循环)
    🔍 放大模式(精确操控)
    ⌂ 恢复所有最小化窗口(再点一次最小化所有)
    ⌨ 弹出键盘输入框
    ✖ 关闭并返回
  3. 移动鼠标:不放大时,手指拖动 → 松手后桌面鼠标到达终点;轻点 = 左键点击

  4. 右键:长按(或浏览器右键菜单)

  5. 放大模式:拖动平移画面(内容跟随手指),轻点 = 精确定位点击

  6. 键盘输入:

    • 点「⌨」弹出输入框
    • 输入文字(中文/英文/数字均可)→ 点「⏎」发送文字
    • 「⏎」在输入框为空时 = 发送回车键
    • 「⌫」= 发送退格键(删除远程光标前的字符)
  7. 窗口最小化后鼠标仍可移动:插件内置屏幕外辅助窗口自动解锁

6.3 文件传输(📁 侧边栏按钮)

手机页面侧边栏(放大镜搜索按钮下方)有「💻 看电脑屏幕」和「📁 文件传输」两个图标按钮。

  1. 点「📁」打开文件浏览器:
    • 顶部导航:⬆ 返回上级 / 分区盘快捷(C: D:…)/ 🖥 桌面快捷 / ✖ 关闭
    • 目录列表:📁 文件夹(点击进入)、📄 文件(点击选中)
  2. 下载到手机:
    • 点选文件(可多选,选中变蓝)→ 点「⬇ 下载」
    • 单选:直接下载(保持原名)
    • 多选:弹窗选择「📦 打包成 zip 下载」或「📄 逐个单独下载」
  3. 上传到电脑:点「⬆ 上传」→ 选择手机文件(可多选)→ 自动上传到当前目录
  4. 🔄 刷新当前目录

6.4 手机端小贴士

  • 手机端同样可以点侧边栏的「远程访问」打开配置面板(弹出样式在手机上是一条底部抽屉)
  • 手机端侧边栏另有「🖥 看电脑屏幕」和「📁 文件传输」两个按钮
  • 中文语音输入:用手机输入法的语音(点输入框 → 键盘麦克风 → 说话)
  • 网络慢时用「流畅」画质

六点五、🔒 防锁屏功能(v1.6.0 新增)

是什么

一个手动开关:开启后电脑保持唤醒、不会自动锁屏,手机随时可以远程操控(不需要解锁)。 这是为解决「电脑锁屏后无法远程解锁(Windows 安全限制,详见下文)」而提供的预防方案。

为什么需要它

Windows 锁屏界面(密码/PIN 输入框)只接受真实硬件输入,拒绝所有软件注入的鼠标/键盘事件 (这是 Windows 的安全机制,TeamViewer 等工具是靠安装内核驱动才做到的)。因此:

  • 电脑未锁屏时:远程操控完全正常(移动鼠标/点击/键盘/文件传输)
  • 电脑已锁屏时:手机只能查看锁屏画面,无法远程输入密码解锁

→ 所以如果你要出门、又希望随时远程操控电脑,出门前打开「防锁屏」即可。

使用方法

  1. 电脑浏览器打开 harness 页面(本机默认 http://127.0.0.1:19387)
  2. 点侧边栏底部的「远程访问」打开面板,找到 「🔒 防锁屏」那一行(在「控制开关」分组里)
  3. 点击整行切换,开关和下方状态文字实时反映状态:
开关/状态 含义
开(绿色)·「电脑保持唤醒,远程操控畅通」 电脑保持唤醒、不锁屏(即使显示器关闭)
关(红色)·「电脑当前已锁屏 · 需在本机解锁」 电脑当前处于锁屏状态,需到电脑前解锁
关(灰色)·「电脑当前未锁屏」 正常锁屏行为(默认,办公室安全)
  1. 开启后自动执行:
  • 保持系统+显示器唤醒(阻止休眠/关屏 → 不会自动锁屏)
  • 关闭屏幕保护程序锁定(ScreenSaverIsSecure=0)
  • 电源设置:唤醒不需要密码(CONSOLELOCK=0)
  1. 回到办公室后,点回「🔒 防锁屏关」恢复正常锁屏(以上设置自动还原)。

⚠️ 注意事项

  • 防锁屏开启时不要手动按 Win+L(仍会锁屏,且无法远程解锁)
  • 防锁屏只是「避免锁屏」,不是「远程解锁」——锁屏后远程仍无法解锁
  • 锁屏状态下手机查看屏幕会显示「🔒 电脑已锁屏」+ 只读预览 + 「← 返回」按钮(回到 harness 主页)

七、安全须知(务必读)

本插件在 8090 上不做任何身份验证,只要隧道可达就等于把整台电脑交出去:

  • 通过隧道进来的访问者可以操作 DSH 本体、查看屏幕、注入鼠标键盘
  • 文件传输接口对路径没有限制:可浏览、下载、上传覆盖电脑上任意路径的文件(含系统盘)

因此:

  • 隧道认证是唯一安全门,必须设置强密码(cpolar 建隧道时「Http Auth」必填,见第四节)
  • 优先使用自带认证的穿透方式(cpolar 的 Http Auth / frp 的 http_user+http_pwd / ngrok 的 --basic-auth)
  • 不用时在穿透工具后台暂停隧道
  • 二维码显示在电脑屏幕上,别截图外发
  • 免费版公网 URL 是随机的:隧道重连后可能变化,变化后需更新面板地址

八、常见问题

问题 解决办法
手机打不开网址 1. 确认隧道在运行 2. 确认转发端口是 8090 3. 确认面板地址是最新公网 URL
打开网址提示 404 / 无法访问 隧道可能已重连(免费版 URL 会变),重新获取公网 URL
用 http:// 地址访问、会话空白 建议用 https:// 地址;或在穿透工具开启"http 重定向至 https"(cpolar 后台 redirect_https),http 会自动跳转 https 后一切正常
面板显示「等待手机访问…」 手机访问一次后自动显示实际域名,确认隧道已通
远程屏幕黑屏 / 画面不动 切换画质档位;网络慢用流畅模式;确认手机页面是最新版(清缓存)
鼠标点击位置不准 重启 dsh 后已自动纠正分辨率;若仍不准,切换一次画质即可
最小化窗口后鼠标不动 已内置自动解锁;若异常请重启 dsh
中文输入乱码 文字走剪贴板发送,确认手机输入法输出正常
电脑锁屏后手机无法输入密码解锁 Windows 安全限制:锁屏只接受真实硬件输入。出门前用「🔒 防锁屏」避免锁屏(见六点五节)
查看屏幕时鼠标指针自动漂移 已修复(v1.6.0):唤醒显示器的 1px 移动改为移动后移回,净位移为 0
手机 App 下载文件提示 Not a file URI 已修复(v1.6.0):下载目标改为逐级兜底(MediaStore → 公开目录 → 应用专属)
卸载插件 dsh plugin --profile web remove dsh-remote-control-desktop