2026-09-27-GPU机开机自动进入资源监控面板部署.md

GPU 机「开机自动满屏系统资源监控面板」部署报告

一、最终形态(实机截图)

截图是用 /dev/fb0 直接抓的控制台真帧缓冲(2560×1440),不是模拟图。

总览窗口(默认):顶部状态栏 + btop 总览

GPU 窗口(面板内按 Ctrl-b n 切换):nvtop GPU

状态栏 8 行内容:

行内容
1标题 · 主机名 · 局域网 IP · 当前时间(可配时区)
2分隔线
3开机时长 · 1/5/15 分钟负载 · 内存占用 · 根分区占用与剩余
4GPU:型号 · 利用率 · 显存 used/total · 温度 · 功耗 · 风扇转速
5SVC:端口探活,*绿色=在听,x 灰色=没听
6UNIT:列出的 systemd 单元里处于 active 的(没有则 none active)
7快捷键提示

下方 btop 提供:每核 CPU 曲线与频率温度、内存/缓存、磁盘 IO 与空间、网络上下行、进程列表(含每进程 CPU/内存)、GPU 框(gpu-totals,NVML 直读)。

二、一键部署 / 回滚

# 部署(在 GPU 机)
scp scripts/* zyw@192.168.31.31:/tmp/gpu-sysmon/
ssh zyw@192.168.31.31 'printf "yueling408\n" | sudo -S -p "" bash /tmp/gpu-sysmon/install.sh'

# 回滚(恢复 tty1 登录提示符,移除面板脚本;btop/nvtop 保留)
ssh zyw@192.168.31.31 'printf "yueling408\n" | sudo -S -p "" bash /tmp/gpu-sysmon/uninstall.sh'

install.sh 做的五件事:装 nvtop/tmux/编译链 → 源码编译 带 GPU 支持的 btop 1.4.7 → 装面板脚本与 /etc/sysmon.conf → 配 tty1 免密自动登录 → 在 ~/.bash_profile 追加「仅 tty1、非 SSH 时启动面板」的启动块。

三、日常操作

操作方式
切到 GPU 窗口面板内 Ctrl-b n(再按 Ctrl-b p 或 Ctrl-b 0/1 切回)
临时退出面板、回到 shellCtrl-b d(脱离 tmux,停在 tty1 的 shell 提示符)
再进面板敲 sysmon
永久停用自动进入sysmon-disable(下次登录是普通 shell);恢复 sysmon-enable
关掉当前面板进程tmux kill-session -t sysmon
手动立刻看面板(不改开机行为)sysmon、或直接 btop / nvtop
从别的机器看面板只在本机控制台;要远程看用 ssh zyw@192.168.31.31 -t 'tmux attach -t sysmon'

四、定制(改 /etc/sysmon.conf,保存后 ≤5s 自动生效,不用重启面板)

PORTS="ComfyUI:8189 LLM:8080 LMStudio:1234 H3-UI:3013 H3-API:6020"   # 标签:端口
UNITS="llama-bucoid-heretic llama-ridge lmstudio"                     # 只显示 active 的
TITLE="SYS MONITOR"
PANEL_TZ="Asia/Shanghai"      # 面板显示时区(只影响面板,不改系统)
#SYSMON_REFRESH=5             # 刷新间隔秒

新增服务只要把 名字:端口 加进 PORTS,例如 SillyTavern:8000、下载中心:8899。

想让字更大:控制台默认 8×16 字体在 2560×1440 下是 320×89 字符,看着偏小。可改 /etc/default/console-setup 的 FONTSIZE(该机现有字体里没有 Fixed16x32,可先 ls /usr/share/consolefonts 挑一个大字号 BDF/PSF,例如 Terminus32x16 一类)后 sudo setupcon。改完面板会自动按新宽度重排(状态栏宽度是动态取的)。

五、踩过的坑(复现/排错必看)

  1. apt 里的 btop 没有 GPU:Ubuntu 24.04 仓库是 btop 1.3.0,GPU 监控是 1.4.0 才有的功能。
  2. 官方预编译静态包也是空的:btop-x86_64-unknown-linux-musl.tar.gz 的 --version 明确写着 Configured with: make STATIC=true GPU_SUPPORT=false —— 官方静态包的显卡框是编译期关掉的。 必须自己编:make GPU_SUPPORT=true NVML_INCLUDE=/usr/local/cuda/include。
  3. btop 1.4.x 用 C++23 std::ranges::to,Ubuntu 24.04 自带 g++ 13 编不过 (报 ‘to’ is not a member of ‘std::ranges’)→ 装 g++-14 并 make CXX=g++-14(16 核约 25 秒)。 另外 1.4.7 的发布资产名已从 btop-x86_64-linux-musl.tbz 改成 btop-x86_64-unknown-linux-musl.tar.gz(旧名 404)。
  4. 用 root 编过一次源码后,再用普通用户编会 Permission denied(obj/ 属主是 root)→ 重编前 sudo rm -rf 源码目录。
  5. tmux 的 pane 序号是「位置序」不是创建序:先建 btop、再 split -b 在上方插状态栏, 结果 pane0=顶部状态栏、pane1=btop(不是 0=btop)。搞反会让焦点落在状态栏上。
  6. 窗口真实尺寸只有客户端附着后才有:split -l 8 在 80×24 的默认窗口上算比例,附着到 320×89 的控制台后被拉伸成 41 行。解决:附着后用 ( sleep 3; tmux resize-pane -t sysmon:OVERVIEW.0 -y 8 ) & 校正,并加 client-resized hook 在每次分辨率变化后重新钉成 8 行。
  7. GPU 机系统时区是 Etc/UTC(/etc/localtime → zoneinfo/Etc/UTC),比北京时间晚 8 小时。 面板用 PANEL_TZ="Asia/Shanghai" 只覆盖显示;没有改系统时区(那会动到既有日志/服务时间戳)。 若要系统级修:sudo timedatectl set-timezone Asia/Shanghai(自行评估日志影响)。
  8. Linux 控制台没有中日韩字体:面板文案里写中文会显示成方块,所以状态栏一律用英文; LANG=en_US.UTF-8 已保证 btop 的框线字符正常。
  9. 抓控制台截图必须去掉 alpha 通道:nvidia-drmdrmfb 的 32bpp 帧缓冲 alpha 字节基本是 0x01, 直接按 bgra 转 PNG 会得到一张「全透明」图,看图器/预览里看起来是一片白。 正确做法:ffmpeg -f rawvideo -pixel_format bgra -video_size 2560x1440 -i fb.raw -pix_fmt rgb24 out.png。
  10. 控制台不熄屏:本机 consoleblank 已为 0(无需改 GRUB);面板启动时还会执行 setterm -blank 0 -powerdown 0 兜底。

六、怎么在「不重启」的前提下验证开机行为

链路是 getty@tty1(免密)→ .bash_profile → sysmon.sh → tmux,所以只要重启 getty 单元就能完整验证, 不必重启机器(该机当时正跑着 ComfyUI,重启会打断任务):

tmux kill-session -t sysmon
sudo systemctl restart getty@tty1
sleep 15
who                                    # 应出现 zyw  tty1
tmux ls                                # 应出现 sysmon: 2 windows (attached)
tmux list-panes -t sysmon:OVERVIEW -F "pane#{pane_index} #{pane_width}x#{pane_height}"
tmux capture-pane -p -t sysmon:OVERVIEW.0 | head -9     # 状态栏内容
tmux capture-pane -p -t sysmon:OVERVIEW.1 | grep -o gpu-totals   # btop GPU 框是否激活

getty@tty1 出厂即 enable,开机自启由 systemd 保证;加上上面链路实测通过,等价于开机验证。

七、本次实测数据(2026-09-27 04:18 北京时间)

SYS MONITOR  zywpc  192.168.31.31                                   2026-09-27 04:18:13
======================================================================================
up 43 minutes  |  load 2.75 4.41 4.30  |  mem 5.8/31.1 GiB (19%)  |  disk / 93% used, 84G free
GPU  NVIDIA GeForce RTX 5060 Ti  util 100%  VRAM 15470/16311 MiB  79C  151.34W  fan 71%
SVC  *ComfyUI:8189 xLLM:8080 xLMStudio:1234 xH3-UI:3013 xH3-API:6020
UNIT none active
keys  Ctrl-b n = GPU(nvtop)   Ctrl-b d = detach to shell   Ctrl-b o = switch pane   q = quit btop

八、文件清单

位置说明
/usr/local/bin/sysmon.sh面板启动器(建 tmux 会话/窗格、尺寸校正、快捷键栏)
/usr/local/bin/sysmon-status.sh顶部 8 行状态栏(每轮重读配置、GPU 走 nvidia-smi)
/etc/sysmon.conf端口表 / 单元表 / 标题 / 时区 / 刷新间隔
/usr/local/bin/sysmonsysmon.sh 的软链,手动进入面板
/usr/local/bin/sysmon-enable / sysmon-disable开关「登录自动进面板」(~/.sysmon-off 标记)
/etc/systemd/system/getty@tty1.service.d/autologin.conftty1 免密自动登录
/home/zyw/.bash_profile追加的启动块(带 SSH_CONNECTION 与 tty1 双保险,不影响 SSH 登录)
/opt/btop/源码编译的 btop 1.4.7(含 GPU 支持),/usr/local/bin/btop 指向它
本目录 scripts/上述部署脚本原件(install / uninstall / sysmon / sysmon-status / sysmon.conf)
本目录 面板文本快照.txt状态栏文本快照

九、安全与影响面

下载此文件