功能:实现桌面选择流程并接入 Moonlight 会话

变更详情:feat(kiosk-shell): 登录/桌面列表产品流程 + Moonlight 会话 + 看门狗进程组修复

- 登录页改为用户认证(本地演示认证,账号密码非空通过)
- 新增桌面列表页:Windows/Moonlight 可连接,Ubuntu/麒麟待分配
- 新增 DesktopService 适配层(登录/桌面列表/连接票据,后续接 API)
- 新增 MoonlightSession:QProcess 参数数组直启 moonlight-qt,退出回列表
- 状态机扩展 AUTHENTICATING / DESKTOP_LIST
- 移除开机自动 RDP,收敛为 monitor -> kiosk-shell 单一自启链
- Monitor 按进程组结束整棵进程树,修复孤儿串流进程
- vdi-moonlight 启动器新增 vsync/frame-pacing/overlay 低延迟开关
This commit is contained in:
songyiming committed 2026-10-28 20:48:12 +08:00
1 parent f74d3ceadf
commit 61127fb714
25 files changed
+1982 -246

No files matched your search

+13 -19
View File
@@ -1,8 +1,8 @@
// 首配 / 登录页
// 登录页
//
// 对应《VDI 云桌面软件开发方案》3.2 节:
// 首配页(无配置时进入)——SN 绑定、WiFi 扫码、服务器地址
// 状态条——网络 / 会话状态
// 产品流程第一步:设备 SN/网络展示 + 用户认证。
// 当前为本地演示认证(账号密码非空通过),由 DesktopService 承担;
// 页面只负责输入采集与状态展示,不直接连接云桌面。
#ifndef KIOSK_SHELL_LOGIN_PAGE_H
#define KIOSK_SHELL_LOGIN_PAGE_H
@@ -13,8 +13,6 @@
#include "config.h"
class QLineEdit;
class QComboBox;
class QCheckBox;
class QLabel;
class QPushButton;
class QGridLayout;
@@ -26,42 +24,38 @@ class LoginPage : public QWidget {
Q_OBJECT
public:
using ConnectHandler = std::function<void(const TerminalConfig&)>;
// 认证回调:由 MainWindow 接到 DesktopService
using LoginHandler = std::function<void(const QString& username, const QString& password)>;
explicit LoginPage(const TerminalConfig& initial, QWidget* parent = nullptr);
void setConnectHandler(ConnectHandler handler);
void setLoginHandler(LoginHandler handler);
void setStatus(const QString& text, bool error = false);
void setBusy(bool busy);
// 供外部回填
TerminalConfig currentConfig() const;
// 保留设备首配信息(SN/服务器地址),登录不再承载 Windows 直连参数
TerminalConfig deviceConfig() const;
signals:
void connectRequested(const vdi::TerminalConfig& cfg);
void loginRequested(const QString& username, const QString& password);
void quitRequested();
private slots:
void onConnectClicked();
void onLoginClicked();
private:
TerminalConfig cfg_;
ConnectHandler connectHandler_;
LoginHandler loginHandler_;
QLineEdit* editServer_ = nullptr;
QLineEdit* editUser_ = nullptr;
QLineEdit* editPassword_ = nullptr;
QComboBox* comboResolution_ = nullptr;
QCheckBox* checkRemember_ = nullptr;
QLabel* labelStatus_ = nullptr;
QLabel* labelSn_ = nullptr;
QLabel* labelNetwork_ = nullptr;
QPushButton* buttonConnect_ = nullptr;
QPushButton* buttonLogin_ = nullptr;
QPushButton* buttonQuit_ = nullptr;
};
} // namespace vdi
Q_DECLARE_METATYPE(vdi::TerminalConfig)
#endif // KIOSK_SHELL_LOGIN_PAGE_H