remote/构建运行手册.md

3.4 KiB
Raw Blame History

MVP 远程控制 Demo · 构建运行手册

项目路径:D:\wordkb\2026-10-22-15-52-47\mvp-remote\ 形态:Rust workspace,三个 crate:common(协议)、agent(被控端)、viewer(主控端)

1. 功能范围(量级一 Demo)

  • ✅ DXGI Desktop Duplication 全屏采集(GPU 拷贝,脏区/硬编码留待二期)
  • ✅ LZ4 压缩 + QUIC 加密传输(自签名证书,传输层已加密)
  • ✅ 验证码认证(默认 123456)
  • ✅ 键鼠远程控制(SendInput 注入,虚拟桌面绝对坐标 + 扫描码)
  • ✅ 桌面静止时低频重发(保持画面新鲜)
  • ❌ 暂无:硬件编码、P2P 打洞/中继(当前仅局域网/可直连地址)、音频、文件传输、Linux 被控

2. 环境要求

  • Windows 8+(被控端需要 DXGI Duplication;主控端 Win7 亦可)
  • 工具链已全部部署在 D 盘(无需再装):
    • Rust (GNU):uurev/tools/rust/cargo/bin
    • MinGW-w64 14.2:uurev/tools/mingw64/bin

3. 构建

export RUSTUP_HOME="D:\\wordkb\\2026-10-22-15-52-47\\uurev\\tools\\rust\\rustup"
export CARGO_HOME="D:\\wordkb\\2026-10-22-15-52-47\\uurev\\tools\\rust\\cargo"
export PATH="/d/wordkb/2026-10-22-15-52-47/uurev/tools/rust/cargo/bin:/d/wordkb/2026-10-22-15-52-47/uurev/tools/mingw64/bin:$PATH"
cd /d/wordkb/2026-10-22-15-52-47/mvp-remote
cargo build --release

产物:

  • 被控端 target/release/agent.exe
  • 主控端 target/release/viewer.exe

4. 运行(两台机器,或同机双开验证)

被控端(要被控制的电脑):

agent.exe --port 47800 --code 888888

主控端(操作的电脑):

viewer.exe --addr <被控端IP> --port 47800 --code 888888

同机自测:被控端 --port 47800,主控端 --addr 127.0.0.1。

操作说明:窗口内直接键鼠操作;Esc 退出。窗口尺寸=被控端分辨率(暂不可缩放)。

5. 代码结构导读(演进锚点)

文件 职责 二期改造点
common/src/lib.rs 控制消息/视频帧线格式 换 protobuf;加 FEC/序列号
agent/src/capture.rs DXGI 采集 + LZ4 加脏矩形、NVENC/QSV 硬编(替换 LZ4)
agent/src/input.rs SendInput 注入 加剪贴板/多显示器虚拟桌面细化
viewer/src/main.rs minifb 渲染 + 输入采集 换 GPU 解码渲染(D3D11/YUV);加自适应码率
viewer/src/keymap.rs 扫描码映射 补全 F 区/小键盘/IME 文本通道

6. 已知限制(MVP 预期内)

  1. 带宽:1080p LZ4 裸帧约 20-60MB/s,仅适合局域网。公网可用必须上 H.264 硬编(二期第一个任务)。
  2. 安顿证书:客户端跳过服务端证书校验(代码内 SkipVerify 已标注),存在中间人风险,仅限测试。
  3. 被控端需在交互会话中运行(RDP 断开后桌面复制会失效——二期做服务化+虚拟桌面处理)。
  4. 高 DPI/多屏:当前只采集主输出(EnumOutputs(0))。
  5. 主控端窗口固定为远端分辨率,颜色序 BGRA→0RGB 若异常可在 blit() 一键翻转。

7. 下一阶段任务队列(Phase 1 剩余)

  1. H.264:接 openh264(软编兜底)→ NVENC/QSV(硬编优先)
  2. 码率自适应 + 关键帧请求(协议已留 KeyFrameReq)
  3. QUIC 多流:视频/控制/键鼠分离流(键鼠零阻塞)
  4. P2P 打洞 + coturn 中继(自建信令服务器)
  5. 被控端服务化(Windows Service + 会话切换处理)