机房云终端维修方案:用一台家用电脑把学校机房「云终端化」
场景:机房电脑很多彻底坏掉/无法上网。维修公司只带了一台配置不高的电脑当服务器,把所有学生机接上去,就全部修好了。他们没有给每台机重装系统,而是让学生机连到这台"云主机"上,轻量运行。需求:只要能开网页浏览、有声音(听听力),别的不要。
结论先行:这套东西的学名叫 无盘网络启动(PXE)+ 云终端/瘦客户端。最成熟的开源实现是 LTSP。你完全可以用家里那台好电脑自己复刻。
一、他们到底做了什么(原理)
关键词:LTSP(Linux Terminal Server Project)的"胖客户端 / Fat Client"模式。
工作原理:
- 学生机开机后不读自己的硬盘,而是走网卡 PXE 网络启动,向服务器要一个引导程序(iPXE)。
- 服务器通过 TFTP/NFS 把一份只读的系统镜像(squashfs)推给学生机。
- 镜像加载后,在每台学生机自己的内存 + CPU 里本地运行(这就是"胖客户端")。
- 所以:服务器只负责"发镜像"和"发 IP",不负责计算。计算全在学生机本地。
这解释了那个关键疑问——为什么一台低配服务器能带动全机房:
- 如果是"瘦客户端 / RDP 远程桌面"模式,每个学生的画面都由服务器算,50 人就会压垮低配服务器。
- 但 LTSP 胖客户端模式下,服务器只在开机那几秒发一次镜像(只读、可缓存),之后 50 台机器各跑各的。低配服务器足矣。
- 附带好处:镜像只读 + 内存运行 → 每次重启自动还原,学生装不了乱七八糟的东西、中不了毒,运维极省心。这正是机房最爱它的原因。
你那台"性能比较好的家用电脑"当服务器,绰绰有余。真正决定体验的是学生机本身的 CPU/内存和交换机是不是千兆。
二、问题 1:有没有现成软件?怎么装?
现成软件(推荐 LTSP)
| 软件 | 说明 | 适用 |
|---|---|---|
| LTSP(推荐) | 开源、免费、社区活跃、专门干这个,胖客户端模式低配服务器即可 | 首选 |
| CCBoot / 锐起 / 网众 等国产无盘 | 商业无盘系统,多基于 Windows 镜像,功能全但要授权 | 想用 Windows 桌面时 |
| FOG Project | 偏"批量克隆装机",也能 PXE,但定位是镜像分发不是云终端 | 想批量装系统时 |
| Thinstuff / TSplus | Windows 远程桌面多用户,属瘦客户端,吃服务器 | 学生少、服务器强时 |
最省心 = LTSP。下面全部按 LTSP(Ubuntu 22.04/24.04 LTS)写。
服务器最低要求(胖客户端模式)
- CPU:任意现代双核即可
- 内存:8GB 起步(主要是发镜像时的缓存,16GB 更稳)
- 硬盘:SSD(强烈建议,镜像读取快,全班开机才快)
- 网卡:千兆(百兆会让 50 台同时开机很慢)
- 系统:Ubuntu 24.04 LTS 桌面版(官方推荐用桌面版 iso,别用 server 版)
安装步骤(在服务器上执行)
# 0) 用 Ubuntu 24.04 桌面版装好系统,联网,然后:
sudo apt update && sudo apt upgrade -y
# 1) (可选)移除 snap,减少干扰
sudo apt purge snapd -y
# 2) 加入 LTSP 官方 PPA
sudo add-apt-repository ppa:ltsp/ppa -y
sudo apt update
# 3) 安装 LTSP 及依赖(dnsmasq 做 DHCP/TFTP,nfs 发镜像,epoptes 做课堂监控)
sudo apt install --install-recommends -y \
ltsp ltsp-binaries dnsmasq nfs-kernel-server openssh-server \
squashfs-tools ethtool net-tools epoptes
# 4) 装桌面 + 浏览器 + 声音(胖客户端要带图形界面)
sudo apt install -y xfce4 lightdm lightdm-gtk-greeter \
chromium-browser pulseaudio alsa-utils
# 把管理员加入 epoptes 组(用于教师机监控/广播)
sudo gpasswd -a $USER epoptes
生成镜像并启用服务("chrootless"最简模式:直接把服务器系统当模板)
# 5) 把当前系统打包成学生机用的只读镜像
sudo ltsp image /
# 6) 生成 iPXE 启动菜单
sudo ltsp ipxe
# 7) 配置 NFS 导出镜像
sudo ltsp nfs
# 8) 生成 initrd(网络启动初始化盘)
sudo ltsp initrd
# 9) 配置 dnsmasq —— 关键:机房已有 DHCP/路由器时用"代理 DHCP",不抢 IP
sudo ltsp dnsmasq # 单网卡、外部已有路由器/DHCP 的场景
# 10) 重启相关服务
sudo systemctl restart dnsmasq nfs-kernel-server
以后想改镜像(加软件、改配置),改完再跑一次 sudo ltsp image / && sudo ltsp initrd 即可,所有学生机下次开机自动更新——维护一台 = 维护全部。
三、问题 2:网络怎么接,才能把机房修好
有两种接法,强烈建议方式 B(最稳、不影响学校现有网络)。
方式 A:代理 DHCP(和现有网络并存,单网卡)
- 服务器只有一块网卡,插到机房现有交换机上。
- 机房的路由器/DHCP 继续给学生机发 IP,LTSP 的 dnsmasq 只做 proxyDHCP(只告诉学生机"去哪拿启动文件",不发 IP,避免和现有 DHCP 打架)。
- 命令就是上面的
sudo ltsp dnsmasq。 - 优点:不用动学校网络;缺点:个别老旧交换机/路由器对 proxyDHCP 兼容一般。
方式 B:双网卡独立子网(推荐,维修公司大概率用的就是这个)
- 服务器装两块网卡(家里电脑可加一块 USB 千兆网卡):
- 网卡1(外网口):接学校/机房能上网的那条线 → 负责上互联网。
- 网卡2(内网口):接一台独立交换机,所有学生机都插这台交换机 → 组成一个干净、独立的 PXE 网段。
- 给内网口设静态 IP
192.168.67.1(LTSP 默认网段),并让 dnsmasq 在这个内网段里自己当 DHCP:
# 用 NetworkManager 给内网口设静态 IP(把 eth1 换成你的内网网卡名,用 ip a 查)
sudo nmcli con mod "有线连接 2" ipv4.addresses 192.168.67.1/24 ipv4.method manual
sudo nmcli con up "有线连接 2"
# 内网口自己做完整 DHCP(不再是代理模式)
sudo ltsp dnsmasq --proxy-dhcp=0
sudo systemctl restart dnsmasq
# 打开外网转发(让学生机能通过服务器上网)—— 把 eth0 换成外网网卡名
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 持久化:
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-ltsp.conf
sudo apt install -y iptables-persistent && sudo netfilter-persistent save
方式 B 的好处:学生机网段完全独立、DHCP 干净、不会被学校网络策略干扰,开机成功率和速度都最高。
学生机侧要做的唯一一件事
进 BIOS/UEFI,把启动顺序设为"网络启动 / PXE Boot"优先(有的叫 Network Boot / LAN Boot / UEFI: IPv4)。开一下 Wake on LAN / PXE 选项。保存重启即可。
提示:如果个别学生机不支持 PXE或网卡太老,可以给它做一个 LTSP 启动 U 盘(
sudo ltsp usb /dev/sdX x86_64),插 U 盘启动,效果一样。
四、问题 3:怎么让学生一开机就进 Chrome 打开指定网址
目标:学生机开机 → 自动登录 → 自动全屏打开 Chrome/Chromium → 直达 我的涩谷之学.cn。
⚠️ 关于网址:
我的涩谷之学.cn含中文,属于国际化域名(IDN)。浏览器里能直接输入,但在脚本里最好用它的 Punycode(xn-- 开头)形式最稳妥。下面命令里我用占位,请你把它替换成真实可访问的域名(在 Chrome 地址栏输入中文域名后,复制地址栏里变成的xn--...cn那一串即可)。同时确认该站点确实可公网访问。
做法:在镜像里放一个"自动登录 + 全屏浏览器"kiosk 脚本
第 1 步:设自动登录(免输密码)
编辑 /etc/lightdm/lightdm.conf.d/50-autologin.conf:
[Seat:*]
autologin-user=student
autologin-session=xfce
user-session=xfce
(先在服务器上建一个 student 用户:sudo adduser student)
第 2 步:建开机自启脚本
/home/student/.config/autostart/kiosk.desktop:
[Desktop Entry]
Type=Application
Name=Kiosk Browser
Exec=/usr/local/bin/kiosk.sh
X-GNOME-Autostart-enabled=true
第 3 步:写 kiosk.sh
/usr/local/bin/kiosk.sh(记得 sudo chmod +x):
#!/bin/bash
# 等网络就绪
sleep 8
URL="https://xn--你的真实域名.cn" # ← 换成真实 Punycode 域名
# Chromium 全屏 kiosk 模式(Chrome 用法几乎一样,把 chromium-browser 换成 google-chrome)
chromium-browser \
--kiosk "$URL" \
--noerrdialogs \
--disable-infobars \
--disable-session-crashed-bubble \
--autoplay-policy=no-user-gesture-required \
--start-fullscreen
--kiosk:全屏、无地址栏无标签,学生只能看这个页面(考试/学习场景很合适)。--autoplay-policy=no-user-gesture-required:让听力音频能自动播放(关键,否则要学生点一下才出声)。- 想让学生能自由浏览多个网站,就把
--kiosk换成--start-fullscreen,并去掉单一 URL 限制,或改用一个只含书签的普通窗口。
第 4 步:声音确认
胖客户端下声音在学生机本地播放,需要镜像里带 pulseaudio/pipewire + alsa-utils(上面第 4 步已装)。开机后如无声,检查学生机音量、以及 alsamixer 里没静音。
第 5 步:把改动固化进镜像
sudo ltsp image /
sudo ltsp initrd
之后所有学生机重启 → 自动登录 → 自动全屏打开该网址,且带声音。
五、最简方案(如果你只想先跑起来验证)
- 家里电脑装 Ubuntu 24.04 桌面版,插两块网卡(一块上网、一块接机房独立交换机)。
- 按第二节命令装 LTSP,
sudo ltsp image / && sudo ltsp ipxe && sudo ltsp nfs && sudo ltsp initrd。 - 内网口设
192.168.67.1,sudo ltsp dnsmasq --proxy-dhcp=0,开 NAT 转发(方式 B)。 - 拿一台学生机,BIOS 设 PXE 优先启动,验证能进桌面、能上网、有声音。
- 一台通了,再放 kiosk 脚本 + 自动登录,
ltsp image / && ltsp initrd,全班开机即是浏览器学习机。
先用 1 台验证,再推全班,是这类项目最省时间的路径。
六、常见问题排查
| 现象 | 排查方向 |
|---|---|
| 学生机拿不到 IP | DHCP/proxyDHCP 没生效,或方式 A/B 选错;查 systemctl status dnsmasq、查网段 |
| 拿到 IP 但不引导 LTSP | dnsmasq 的 TFTP/iPXE 配置;确认 ltsp ipxe 跑过 |
| dnsmasq 起不来 | /etc/dnsmasq.conf 里要有 port=0(不做 DNS 时);端口冲突 |
| 能引导但加载镜像失败 | NFS 没导出;重跑 sudo ltsp nfs && systemctl restart nfs-kernel-server |
| 到登录界面但登录失败 | 先在服务器本地建测试用户验证;autologin 配置拼写 |
| 改了东西学生机没变 | 忘了重新 ltsp image / && ltsp initrd |
| 全班同时开机很慢 | 交换机是百兆 → 换千兆;服务器不是 SSD → 换 SSD |
| 没声音 | 镜像缺 pulseaudio/pipewire;alsamixer 静音;缺 --autoplay-policy 参数 |
| 中文域名打不开 | 用 Punycode(xn--)形式;确认站点可公网访问、DNS 正常 |
七、一句话总结
维修公司用的是 LTSP 胖客户端无盘启动:低配服务器只发一份只读镜像,学生机在本地内存运行,重启即还原。你家用电脑当服务器完全够。方式 B(双网卡独立子网)最稳,kiosk.sh + 自动登录实现开机直达学习网站并自动播放听力。先拿一台验证,再推全班。