# 浏览器内 RDP（guacd）— 设计说明

> 取代 [2026-06-09-rdp-native-launch-design.md](./2026-06-09-rdp-native-launch-design.md)（原生 `.rdp` 下载）。

## 背景与目标

运维需在 Nexus **浏览器**内连接 Windows 子机远程桌面，不依赖本机 mstsc。

## 方案

| 组件 | 职责 |
|------|------|
| **guacd** | Docker 侧车，RDP 协议代理（Apache Guacamole） |
| **Nexus WS** | `/ws/rdp/{server_id}` — 鉴权后 WebSocket ↔ guacd TCP 透明桥接 |
| **guacamole-common-js** | 前端画布渲染、键鼠 |
| **REST** | `GET /api/servers/{id}/rdp-connect` — 管理员 JWT 返回连接参数（含解密密码） |

**刻意不做**（与 WebSSH 区分）：

- 无 `POST /auth/rdp-token` 专用短票（使用常规 access JWT 作为 WS `token`）
- 无 `SshSession` / `CommandLog` / `rdp_connect` 连接审计
- Nexus 不解析 Guacamole 画面流，仅桥接

## 数据

`extra_attrs`：`rdp_enabled`、`rdp_port`、`rdp_username`、`rdp_password`（Fernet 加密）。

## 部署

- `docker-compose.prod.yml` 增加 `guacd` 服务，`nexus` 环境变量 `GUACD_HOST=guacd`、`GUACD_PORT=4822`。
- 无 guacd 时 WS 返回明确错误。

## 验收

- [ ] 服务器表单可配置 RDP 与密码
- [ ] 列表「RDP」进入 `/rdp?server_id=`，画布显示桌面
- [ ] 未启用 / 无 guacd 时有可读错误
- [ ] 无连接级审计表项
