机房云终端维修方案:用一台家用电脑把学校机房「云终端化」

周店瑟谷 6 阅读 建站与数字基建

场景:机房电脑很多彻底坏掉/无法上网。维修公司只带了一台配置不高的电脑当服务器,把所有学生机接上去,就全部修好了。他们没有给每台机重装系统,而是让学生机连到这台"云主机"上,轻量运行。需求:只要能开网页浏览、有声音(听听力),别的不要。

结论先行:这套东西的学名叫 无盘网络启动(PXE)+ 云终端/瘦客户端。最成熟的开源实现是 LTSP。你完全可以用家里那台好电脑自己复刻。


一、他们到底做了什么(原理)

关键词:LTSP(Linux Terminal Server Project)的"胖客户端 / Fat Client"模式。

工作原理:

  1. 学生机开机后不读自己的硬盘,而是走网卡 PXE 网络启动,向服务器要一个引导程序(iPXE)。
  2. 服务器通过 TFTP/NFS 把一份只读的系统镜像(squashfs)推给学生机。
  3. 镜像加载后,在每台学生机自己的内存 + CPU 里本地运行(这就是"胖客户端")。
  4. 所以:服务器只负责"发镜像"和"发 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

之后所有学生机重启 → 自动登录 → 自动全屏打开该网址,且带声音。


五、最简方案(如果你只想先跑起来验证)

  1. 家里电脑装 Ubuntu 24.04 桌面版,插两块网卡(一块上网、一块接机房独立交换机)。
  2. 按第二节命令装 LTSP,sudo ltsp image / && sudo ltsp ipxe && sudo ltsp nfs && sudo ltsp initrd。
  3. 内网口设 192.168.67.1,sudo ltsp dnsmasq --proxy-dhcp=0,开 NAT 转发(方式 B)。
  4. 拿一台学生机,BIOS 设 PXE 优先启动,验证能进桌面、能上网、有声音。
  5. 一台通了,再放 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 + 自动登录实现开机直达学习网站并自动播放听力。先拿一台验证,再推全班。