合并:汇总全部并行工作(会话就绪检测/GPU 看板与直通/README 与 .gitignore 统一)
This commit is contained in:
commit
755944fc58
8
.gitignore
vendored
8
.gitignore
vendored
@ -1,3 +1,11 @@
|
|||||||
build/
|
build/
|
||||||
|
CMakeFiles/
|
||||||
|
CMakeCache.txt
|
||||||
*.o
|
*.o
|
||||||
*.so
|
*.so
|
||||||
|
*.log
|
||||||
|
*.tmp
|
||||||
|
.zcode/
|
||||||
|
__pycache__/
|
||||||
|
test-output/
|
||||||
|
screenshots/
|
||||||
|
|||||||
75
README.md
75
README.md
@ -12,12 +12,11 @@
|
|||||||
|
|
||||||
```text
|
```text
|
||||||
盒子开机
|
盒子开机
|
||||||
-> kiosk-shell 登录/首配
|
-> 设备身份自动登录
|
||||||
-> 用户认证
|
-> 获取并展示可用云桌面列表
|
||||||
-> 获取可用云桌面列表
|
|
||||||
-> 用户选择 Windows / Ubuntu / 麒麟等桌面
|
-> 用户选择 Windows / Ubuntu / 麒麟等桌面
|
||||||
-> 获取一次性连接票据
|
-> 获取一次性连接票据
|
||||||
-> 根据协议启动 RDP 或 Moonlight 会话
|
-> 启动 Moonlight 会话
|
||||||
-> 会话结束后返回桌面列表
|
-> 会话结束后返回桌面列表
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -38,8 +37,7 @@ RK3528 云终端
|
|||||||
vdi-cloud/
|
vdi-cloud/
|
||||||
├─ terminal/ # 终端嵌入式软件
|
├─ terminal/ # 终端嵌入式软件
|
||||||
│ ├─ meta-vdi/ # Yocto 层:BSP、内核、设备树、U-Boot、配方
|
│ ├─ meta-vdi/ # Yocto 层:BSP、内核、设备树、U-Boot、配方
|
||||||
│ ├─ kiosk-shell/ # Qt 全屏壳:登录、桌面列表、远程会话
|
│ ├─ kiosk-shell/ # Qt 全屏壳:桌面列表、Moonlight 会话、看门狗
|
||||||
│ ├─ freerdp-rk/ # FreeRDP 3 与 Rockchip MPP/VPU 适配
|
|
||||||
│ ├─ vdt-agent/ # Rust:注册、心跳、命令、日志
|
│ ├─ vdt-agent/ # Rust:注册、心跳、命令、日志
|
||||||
│ ├─ ota-updater/ # Rust:OTA 签名校验、A/B 切换、回滚
|
│ ├─ ota-updater/ # Rust:OTA 签名校验、A/B 切换、回滚
|
||||||
│ └─ usb-monitor/ # Rust:USB 监听、挂载与重定向策略
|
│ └─ usb-monitor/ # Rust:USB 监听、挂载与重定向策略
|
||||||
@ -58,39 +56,21 @@ vdi-cloud/
|
|||||||
|
|
||||||
已实现:
|
已实现:
|
||||||
|
|
||||||
- Qt 全屏登录页;
|
- 开机后使用设备 SN 作为当前身份,自动进入桌面列表;
|
||||||
- 设备 SN 和网络状态显示;
|
|
||||||
- 本地演示认证(当前账号和密码非空即可通过);
|
|
||||||
- Windows、Ubuntu、麒麟三类桌面卡片;
|
- Windows、Ubuntu、麒麟三类桌面卡片;
|
||||||
- **桌面连接可配置**:每张卡片有“设置”按钮,可配置协议(Moonlight/RDP)、
|
- **桌面连接可配置**:每张卡片有“设置”按钮,可配置服务器地址(支持 IP、域名或 VPN 隧道地址)、Sunshine 应用名、分辨率和帧率;
|
||||||
服务器地址(支持 IP、域名或 VPN 隧道地址)、应用名、分辨率和帧率;
|
|
||||||
- 连接配置持久化在 `~/.config/vdi-terminal/desktops.json`,
|
- 连接配置持久化在 `~/.config/vdi-terminal/desktops.json`,
|
||||||
地址为空的桌面显示“待分配”且不可连接;
|
地址为空的桌面显示“待分配”且不可连接;
|
||||||
- 老环境自动迁移:首次运行会读取 `client.conf` 里的 server 地址填充 Windows 桌面;
|
- 老环境自动迁移:首次运行会读取 `client.conf` 里的 server 地址填充 Windows 桌面;
|
||||||
- `Ctrl+Alt+Shift+M` 管理菜单提供“桌面连接设置”统一入口;
|
- `Ctrl+Alt+Shift+M` 管理菜单提供“桌面连接设置”统一入口;
|
||||||
- 退出登录后返回登录页;会话退出后返回桌面列表。
|
- 会话退出后返回桌面列表。
|
||||||
|
|
||||||
不同客户部署环境的桌面地址不同:换环境时在“设置”里改地址即可,不需要改代码。
|
不同客户部署环境的桌面地址不同:换环境时在“设置”里改地址即可,不需要改代码。
|
||||||
VPN 属于网络层能力(盒子上的 VPN 客户端建立隧道后),地址字段直接填隧道地址即可。
|
VPN 属于网络层能力(盒子上的 VPN 客户端建立隧道后),地址字段直接填隧道地址即可。
|
||||||
|
|
||||||
本地演示认证是后端 API 上线前的临时实现。后续通过 `DesktopService` 适配层接入真实的用户认证、桌面列表和一次性连接票据接口,页面流程不需要重写。
|
设备身份自动登录是正式认证 API 上线前的临时实现。后续通过 `DesktopService` 适配层接入真实的用户认证、桌面列表和一次性连接票据接口,页面流程不需要重写。
|
||||||
|
|
||||||
### 2. RDP 会话
|
### 2. Moonlight/Sunshine 会话
|
||||||
|
|
||||||
已实现:
|
|
||||||
|
|
||||||
- 基于 `libfreerdp3` API 内嵌,不拉起外部 `xfreerdp` 进程;
|
|
||||||
- FreeRDP GDI/GFX 画面接入 Qt;
|
|
||||||
- 键盘、鼠标输入转发;
|
|
||||||
- X11 键盘码到 RDP 扫描码映射;
|
|
||||||
- 鼠标缩放坐标转换;
|
|
||||||
- 会话状态与断线重连;
|
|
||||||
- `Ctrl+Alt+Shift+M` 管理菜单;
|
|
||||||
- RDP 后端代码保留,可由连接票据选择启用。
|
|
||||||
|
|
||||||
当前 RDP 路径仍处于 POC 阶段,证书忽略、测试账号等配置不能直接用于正式环境。
|
|
||||||
|
|
||||||
### 3. Moonlight/Sunshine 会话
|
|
||||||
|
|
||||||
已实现:
|
已实现:
|
||||||
|
|
||||||
@ -98,13 +78,17 @@ VPN 属于网络层能力(盒子上的 VPN 客户端建立隧道后),地
|
|||||||
- 不通过 Shell 拼接用户输入,降低命令注入风险;
|
- 不通过 Shell 拼接用户输入,降低命令注入风险;
|
||||||
- H.264 软件解码;
|
- H.264 软件解码;
|
||||||
- 绝对鼠标模式;
|
- 绝对鼠标模式;
|
||||||
|
- 点击连接后立即锁定操作,保证任何时刻最多一个 Moonlight 会话;
|
||||||
|
- 解析 Moonlight 输出,只有测试解码成功、渲染器选定且全屏串流窗口已激活后才淡出过场;
|
||||||
|
- ARM/X11 环境通过 `GL_IS_SLOW=0` 缩短不可用 DRM 路径的探测时间;
|
||||||
|
- 连接阶段有结构化耗时日志和 30 秒就绪超时,失败时自动关闭错误窗口并返回列表;
|
||||||
- 会话进程退出后自动返回桌面列表;
|
- 会话进程退出后自动返回桌面列表;
|
||||||
- `vsync`、`frame-pacing`、性能叠图等低延迟参数可配置;
|
- `vsync`、`frame-pacing`、性能叠图等低延迟参数可配置;
|
||||||
- 独立 Moonlight 启动脚本保留作调试用途,但不再作为产品开机入口。
|
- 独立 Moonlight 启动脚本保留作调试用途,但不再作为产品开机入口。
|
||||||
|
|
||||||
当前联调环境中,Sunshine 服务端仍使用 `libx264` 软件编码。1080p 实际帧率约 13~22 FPS,鼠标体感延迟主要来自服务端软编码和客户端帧队列/VSync。后续需要完成 GPU 直通并启用 NVENC。
|
当前联调环境中,Sunshine 服务端仍使用 `libx264` 软件编码。1080p 实际帧率约 13~22 FPS,鼠标体感延迟主要来自服务端软编码和客户端帧队列/VSync。后续需要完成 GPU 直通并启用 NVENC。
|
||||||
|
|
||||||
### 4. 状态机
|
### 3. 状态机
|
||||||
|
|
||||||
当前终端状态机:
|
当前终端状态机:
|
||||||
|
|
||||||
@ -119,7 +103,7 @@ BOOT
|
|||||||
-> DESKTOP_LIST / ERROR
|
-> DESKTOP_LIST / ERROR
|
||||||
```
|
```
|
||||||
|
|
||||||
### 5. Monitor 看门狗
|
### 4. Monitor 看门狗
|
||||||
|
|
||||||
已实现独立 `vdi-kiosk-monitor` 进程:
|
已实现独立 `vdi-kiosk-monitor` 进程:
|
||||||
|
|
||||||
@ -134,8 +118,7 @@ BOOT
|
|||||||
### 终端
|
### 终端
|
||||||
|
|
||||||
- C++17
|
- C++17
|
||||||
- Qt 5 Widgets
|
- Qt 5 Widgets / Qt Test
|
||||||
- FreeRDP 3
|
|
||||||
- Moonlight Qt
|
- Moonlight Qt
|
||||||
- 当前开发环境:Armbian + LightDM + Xorg
|
- 当前开发环境:Armbian + LightDM + Xorg
|
||||||
- 正式目标环境:Weston + Wayland
|
- 正式目标环境:Weston + Wayland
|
||||||
@ -164,8 +147,7 @@ BOOT
|
|||||||
```bash
|
```bash
|
||||||
sudo apt install \
|
sudo apt install \
|
||||||
build-essential cmake ninja-build pkg-config \
|
build-essential cmake ninja-build pkg-config \
|
||||||
qtbase5-dev libqt5widgets5 \
|
qtbase5-dev libqt5widgets5 libqt5test5
|
||||||
freerdp3-dev
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Moonlight 会话还需要安装:
|
Moonlight 会话还需要安装:
|
||||||
@ -178,8 +160,9 @@ sudo apt install moonlight-qt
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd terminal/kiosk-shell
|
cd terminal/kiosk-shell
|
||||||
cmake -G Ninja -B build -DCMAKE_BUILD_TYPE=Release
|
cmake -G Ninja -B build -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON
|
||||||
cmake --build build
|
cmake --build build
|
||||||
|
QT_QPA_PLATFORM=offscreen ctest --test-dir build --output-on-failure
|
||||||
```
|
```
|
||||||
|
|
||||||
编译产物:
|
编译产物:
|
||||||
@ -255,27 +238,25 @@ Moonlight 调试配置路径:
|
|||||||
3. 当前 Moonlight 使用软件解码,RK3528 的 VPU/MPP 硬解尚未打通;
|
3. 当前 Moonlight 使用软件解码,RK3528 的 VPU/MPP 硬解尚未打通;
|
||||||
4. Sunshine 当前使用软件编码,未启用 NVENC;
|
4. Sunshine 当前使用软件编码,未启用 NVENC;
|
||||||
5. 当前仍是 X11 POC,尚未完成 Weston/Wayland/DRM 零拷贝路径;
|
5. 当前仍是 X11 POC,尚未完成 Weston/Wayland/DRM 零拷贝路径;
|
||||||
6. RDP 证书校验、短期凭据和正式安全策略尚未完成;
|
6. USB 重定向、OTA、Agent、管理平台和 Web 控制台尚未开发完成。
|
||||||
7. USB 重定向、OTA、Agent、管理平台和 Web 控制台尚未开发完成。
|
|
||||||
|
|
||||||
## 九、下一步计划
|
## 九、下一步计划
|
||||||
|
|
||||||
按优先级:
|
按优先级:
|
||||||
|
|
||||||
1. 恢复 RK3528 盒子网络并部署登录/桌面列表新版本;
|
1. 保持终端、Sunshine 和虚拟显示器三端分辨率及色彩空间一致;
|
||||||
2. 实测 Moonlight `no-vsync` / `no-frame-pacing` 对鼠标延迟的改善;
|
2. 将 GTX 965M 直通 Windows VM,使 Sunshine 使用 NVENC;
|
||||||
3. 将 GTX 965M 直通 Windows VM,使 Sunshine 使用 NVENC;
|
3. 定义并联调终端用户认证、桌面列表和一次性连接票据 API;
|
||||||
4. 定义并联调终端用户认证、桌面列表和一次性连接票据 API;
|
4. 实现 Ubuntu、麒麟桌面连接配置;
|
||||||
5. 实现 Ubuntu、麒麟桌面连接配置;
|
5. 适配 RK3528 MPP/VPU 硬解;
|
||||||
6. 适配 RK3528 MPP/VPU 硬解;
|
6. 切换到 Weston/Wayland 正式显示路径;
|
||||||
7. 切换到 Weston/Wayland 正式显示路径;
|
7. 开发 `vdt-agent`、OTA、USB、云端服务和 Web 控制台。
|
||||||
8. 开发 `vdt-agent`、OTA、USB、云端服务和 Web 控制台。
|
|
||||||
|
|
||||||
## 十、开发规范
|
## 十、开发规范
|
||||||
|
|
||||||
- 已验证、已实现、待验证和规划中必须明确区分;
|
- 已验证、已实现、待验证和规划中必须明确区分;
|
||||||
- 终端不能直接调用 Proxmox API;
|
- 终端不能直接调用 Proxmox API;
|
||||||
- RDP 和 Moonlight 协议选择由管理平台连接票据决定;
|
- Moonlight 是当前唯一远程会话协议,连接参数由管理平台连接票据决定;
|
||||||
- 所有密钥和密码只能通过安全配置注入,不得提交到 Git;
|
- 所有密钥和密码只能通过安全配置注入,不得提交到 Git;
|
||||||
- 正式代码变更应通过编译、真机测试和会话恢复测试;
|
- 正式代码变更应通过编译、真机测试和会话恢复测试;
|
||||||
- 本 README 随功能、接口、目录和验证结论持续更新。
|
- 本 README 随功能、接口、目录和验证结论持续更新。
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user