功能使用手册
云课堂的全部功能围绕"老师一键上课、终端自动连接、下课自动回收"这条主线展开。本文档按使用角色分类,方便不同岗位的人快速找到自己需要的部分。
开始上课 / 结束下课
教师端主导的上课架构
整个上课流程由教师端集中管控:克隆 VM、写入 MAC 地址、分配 SPICE 端口、启动 VM 全部由教师端通过 PVE API 统一完成。终端只负责一件事——收到指令后连接桌面。
| 操作 | 教师端负责 | 终端负责 |
|---|---|---|
| 链接克隆 VM | ✅ 调用 PVE API | — |
| 写入 MAC 地址(永久绑定) | ✅ 写入 VM 配置 | — |
| 分配 SPICE 端口 | ✅ 写入 VM 配置 | — |
| 启动 VM | ✅ 调用 PVE API | — |
| 推送连接指令 | ✅ 下发 SPICE 连接信息 | 📩 接收指令 |
| 连接桌面 | — | ✅ remote-viewer |
| MAC 地址表管理 | ✅ 创建并永久保存 | — |
| 心跳上报 | 📩 接收状态 | ✅ 定时上报 |
开始上课
- 打开教师端,确认终端列表中所有终端状态为"在线"
- 点击「开始上课」按钮
- 在弹出的课程列表中选择课程模板(如"Python 教学环境")
- 系统自动执行:
- 链式克隆:基于模板批量创建 VM。所有 VM 共享同一份基础镜像,只记录差异数据,60 台同时启动也很快
- MAC 绑定:每台 VM 分配固定 MAC 地址(永久保存,后续上课复用)
- SPICE 端口分配:每台 VM 分配独立端口,终端通过 SPICE 协议连接桌面
- 批量启动:分批启动 VM,就绪一台推送一台的连接指令
- 约 3 分钟后(60 台规模),所有终端进入 Windows 桌面
结束下课(两种模式)
| 对比 | 下课 — 关闭终端 | 下课 — 关闭全部 |
|---|---|---|
| 广播下课指令 | ✅ | ✅ |
| 停止链接克隆 VM | ✅ | ✅ |
| 删除链接克隆 VM(释放磁盘) | ✅ | ✅ |
| 模板 VM | 保留不动 | 停止但保留 |
| 关闭终端物理机 | ✅ | ✅ |
| 关闭 PVE 服务器 | — | ✅(含二次确认) |
模式一:关闭终端 — 日常下课用。广播下课指令 → 终端断开桌面 → 批量停止并删除 VM → 关闭终端物理机。约 10 秒完成。
模式二:关闭全部 — 机房彻底收工时用。在模式一基础上,额外等待终端全部关机后,关闭 PVE 服务器。操作前会二次确认。
下课后,学生课上装的软件、改的设置、下的文件全部自动清除。下一节课再点"上课",还是干干净净的新系统。
自由选课(多课程模板切换)
自由选课让同一间教室可以切换不同课程环境,不用重装系统。它支持两种模式,适应不同的教学场景。
模式一:集中上课 + 自由选课开关
老师统一上课后,打开「学生自由选课」开关。已经完成课堂任务的学生,可以在终端上自由切换到其他课程继续学习。
- 老师正常点击「开始上课」,全班进入统一课堂
- 在教师端打开「学生自由选课」开关
- 学生终端上的课程列表解锁,可以点击其他课程卡片
- 学生切换到其他课程模板,启动对应的 VM 桌面
模式二:纯自由选课
老师不统一上课,只点击「唤醒终端」。学生各自在终端上选择自己想上的课程,不同学生可以同时上不同的课。
- 老师点击「唤醒终端」
- 所有终端显示课程卡片列表
- 学生各自点击想上的课程
- 终端自动连接对应模板的 VM 桌面
典型课程切换场景
| 时间 | 课程 | 模板 |
|---|---|---|
| 上午 1-2 节 | Python 编程 | 编程模板(VSCode + Python) |
| 上午 3-4 节 | 平面设计 | 设计模板(Photoshop + Illustrator) |
| 下午 | 办公应用 | 办公模板(Office + WPS) |
| 晚上 | 考试 | 考试模板(干净系统,指定软件) |
SPICE 桌面体验与恢复
学生终端通过 SPICE 协议连接 VM 桌面,体验接近本地电脑。系统内置了完善的断开恢复机制,上课中途出问题不需要等网管。
正常的桌面连接流程
- 教师端完成 VM 克隆和启动后,向终端推送上课指令
- 终端收到指令,自动启动远程桌面客户端
- 学生屏幕上看到 Windows 完整启动过程
- 进入桌面后,USB 外设(U 盘、键盘、鼠标)插上就能用
桌面断开后的自动恢复
如果网络波动导致桌面断开,系统会自动尝试重新连接。状态栏会显示恢复进度。如果自动恢复失败,终端会显示恢复按钮。
热键手动恢复(Ctrl+Shift+F12)
如果 VM 卡死或桌面无响应,学生可以按 Ctrl+Shift+F12 热键。终端会弹出两个按钮:
| 按钮 | 作用 | 适用场景 |
|---|---|---|
| 重新连接 | 本地快速重连当前 VM | 网络波动、短暂断线 |
| 重新上课(数据全部丢失) | 通知教师端删除旧 VM,重新克隆一台新 VM | VM 蓝屏/卡死/无法恢复 |
某台终端死机或桌面断了——学生按一下 Ctrl+Shift+F12,选"重新连接",30 秒回到课堂桌面。前后不到一分钟,课照上,不影响其他学生。
注册与编号
终端上电后会自动发现教师端,不需要手动配 IP。整个注册过程,老师只需要在终端上输入一个数字编号。
端到端注册流程
- 终端上电:自动搜索局域网内的教师端(三层策略:优先缓存直连 → 网络邻居表 → UDP 组播探测)
- 教师端弹窗:检测到新终端,弹出提示"发现新终端",显示 MAC 地址
- 输入编号:老师在终端屏幕上输入一个数字(1 到 60)
- 自动分配:教师端自动计算并下发 IP 地址、网关、DNS 等全部网络配置
- 注册完成:终端将配置写入本地持久化存储,重启也不丢失
编号规则
- 编号从教师端设置的起始编号开始,按注册顺序递增(如 1、2、3…60)
- IP 地址由编号自动算出:
终端IP = 起始IP + (编号 - 起始编号) - 编号与 IP 的关系是固定的,不是 DHCP 动态分配
- 编号持久化在终端本机,断电重启不丢失
替换接入
终端硬件坏了,换一台新的上去——编号和桌面绑定自动继承,不需要重新登记,不需要重新配置。
操作步骤
- 把坏终端拔网线、断电
- 新终端接上网线、上电
- 新终端开机后自动找到教师端
- 教师端弹出提示:"发现新终端,是否替换?"
- 在教师端选择要替换的终端编号(如 T15)
- 点「确认替换」
- 新终端自动获得原编号、原 IP、原 VM 绑定——全部继承
重新排号
需要批量调换终端的座位编号时(比如考场重新编排),用重新排号功能。系统采用两阶段确认制,保证数据安全。
两阶段确认制
| 阶段 | 做什么 | 谁操作 |
|---|---|---|
| 阶段一:收集意向 | 学生在终端上输入新编号 → 终端暂存意向 → 上报教师端 | 学生 |
| 阶段二:确认执行 | 教师端汇总所有意向 → 管理员点「执行排号」→ 终端收到确认后才真正修改配置并重启 | 管理员 |
操作步骤
- 教师端点「重新排号」,进入排号模式
- 每台终端弹出编号输入框(预填当前编号),学生输入新编号
- 教师端实时显示所有终端的编号变更意向
- 管理员检查无误后,点「执行排号」
- 每台终端收到确认指令:写入新配置 → 上报完成 → 自动重启(3 秒后)
- 重启后所有终端以新编号上线
终端详情页(五维度状态)
终端详情页是机房管理员排查问题时最常用的页面。它把每台终端的状态拆成5 个独立维度,避免"有状态但不知道是什么状态"的混淆。
五个独立维度
| 维度 | 含义 | 数据来源 |
|---|---|---|
| 终端在线 | 终端本机是否上电并连上教师端 | 终端心跳(30 秒周期) |
| VM 运行 | PVE 上的虚拟机是否在运行 | PVE API 状态查询 |
| SPICE 接入 | 终端是否已连接到 VM 桌面 | PVE SPICE 连接检测 |
| Guest 活跃 | VM 内部 Guest 程序是否正常 | Guest 心跳(5 秒周期,60 秒过期) |
| VM 存在 | PVE 上是否存在此 VM 配置 | PVE 配置查询 |
常见状态组合解读
| 终端在线 | VM 运行 | SPICE 接入 | 含义 | 动作 |
|---|---|---|---|---|
| ✅ | ✅ | ✅ | 完全正常 | 无需处理 |
| ✅ | ✅ | ❌ | VM 启动了但桌面还没连上 | 等几秒,系统会自动重连 |
| ✅ | ❌ | ❌ | 终端在线但没点上课 | 正常待机状态 |
| ❌ | ✅ | ❌ | 终端掉线但 VM 还在运行 | 检查终端网络或重启终端 |
| ❌ | ❌ | ❌ | 终端离线且无 VM | 检查终端硬件和网络连接 |
| ✅ | ✅ | ✅ | Guest ❌ | VM 桌面在运行但内部代理未启动,不影响使用 |
详情页的批量操作
- 勾选多台终端:可以批量执行重启、关机、重新上课、升级
- SSH 降级通道:如果网络指令发送失败,系统会自动走 SSH 直连终端执行操作
- 升级状态追踪:每台终端的升级进度和结果在详情页实时显示
教师端初始化配置
教师端首次启动时,会引导完成初始化配置。之后也可以随时通过右上角设置按钮修改(需要密码验证)。
配置项一览
| 配置项 | 说明 |
|---|---|
| 云服务器 IP | PVE 服务器地址 |
| 用户名 / 密码 | PVE API 认证凭据 |
| 终端起始 IP | 学生终端 IP 地址池起始值 |
| VM 起始 IP | 虚拟机 IP 地址池起始值 |
| 终端数量 | 最大支持的终端数(默认 60) |
| 起始编号 | 终端编号从几开始(默认 1) |
| 子网掩码 / 网关 / DNS | 终端侧网络参数 |
| 计算机名前缀 | 终端 hostname 格式,如 "T" → T01, T02… |
| 设置密码 | 保护设置页面的密码 |
终端设置
每台学生终端也有自己的设置界面(右下角"设置"按钮,需要密码验证)。
终端设置功能
| 设置项 | 说明 |
|---|---|
| PVE 配置 | PVE 服务器地址、用户名、密码 |
| 教师机地址 | 手动指定教师机 IP(正常情况会自动发现) |
| 显示分辨率 | 自动 / 1024×768 / 1920×1080,终端启动时生效 |
| 网络设置 | 本机 IP / 掩码 / 网关 / DNS(修改后需重启生效) |
| Ping 测试 | 在设置面板内对任意地址发送 4 个探测包 |
| 修改密码 | 保护终端设置页面的密码 |
教师发现机制
终端启动后会按以下顺序寻找教师端:
- 先尝试缓存的上次教师机地址(最快,零网络流量)
- 再扫描网络邻居表(被动扫描,不产生流量)
- 最后发组播探测(主动搜索,有限流控)
都失败后,终端会进入单机模式,学生仍可以自由选课(直接连 PVE)。教师机恢复上线后会自动退出单机模式。
Guest 程序
Guest 程序运行在VM 虚拟机内部(学生看到的桌面环境里),是一个轻量级常驻工具。它和终端程序是两个不同的东西:
- 终端程序:运行在物理瘦客户机上,负责连接和显示远程桌面
- Guest 程序:运行在 VM 内部,负责维持心跳、响应举手/锁屏
核心功能
| 功能 | 说明 |
|---|---|
| 心跳保活 | 每 5 秒向教师端发送心跳,报告 VM 在线状态 |
| 自动绑定 | VM 启动后读本机 MAC,对照本地 MAC 表自动查出终端编号、计算 IP 地址 |
| 锁屏/解锁 | 教师端下发锁屏指令,学生桌面弹出全屏遮罩,鼠标键盘被禁用 |
| 举手 | 学生点举手按钮,教师端收到提示并可应答/拒绝 |
| 开机自启 | VM 启动后 Guest 程序自动运行,不需要登录 |
三阶段工作模型
Guest 程序遵循"模板机初始化 → 克隆 → VM 落位"三阶段模型:
- 阶段一(模板机):在制作母盘模板时运行初始化,从教师端拉取完整 MAC 地址表并保存到本地
- 阶段二(克隆):教师端"上课"时,PVE 以模板为源链接克隆 N 台 VM,每台分配不同的 MAC
- 阶段三(VM 落位):每台 VM 开机后,Guest 程序读本机 MAC → 查本地 MAC 表 → 得终端编号 → 算 IP → 自动配置网络 → 开始心跳
终端程序升级
终端程序的新版本可以通过教师端统一推送升级,不需要逐台操作。
操作步骤
- 教师端打开详情页,勾选需要升级的终端
- 点击「升级终端」,选择新版本文件
- 确认升级,教师端将新版本推送给选中的终端
- 每台终端收到升级通知后自动:
- 下载新版本程序
- 停止当前服务
- 备份旧版本(保留最近 3 个版本)
- 替换为新版本
- 重启服务
- 教师端详情页实时显示每台终端的升级进度和结果
模板更新
课程模板的更新是在 PVE 上操作的,不在教师端界面上。流程如下:
- 在 PVE 界面,基于现有模板克隆一个新 VM
- 开机,安装课程需要的软件、更新系统
- 关机,转为模板
- 在教师端设置中,将新模板编号加入课程列表
- 下次上课或自由选课时,新模板就会出现在列表中
详细操作参考 日常运维 → 模板更新与推送。