zywpc = 192.168.31.31(Ubuntu 24.04.3,RTX 5060 Ti 16GB,HDMI 接了显示器)tty1 免密自动登录 → tmux 会话 sysmon → 顶部 8 行状态栏 + 下方 btop(带 GPU 框)+ 第二窗口 nvtop。截图是用 /dev/fb0 直接抓的控制台真帧缓冲(2560×1440),不是模拟图。
总览窗口(默认):顶部状态栏 + btop 
GPU 窗口(面板内按 Ctrl-b n 切换):nvtop 
状态栏 8 行内容:
| 行 | 内容 |
|---|---|
| 1 | 标题 · 主机名 · 局域网 IP · 当前时间(可配时区) |
| 2 | 分隔线 |
| 3 | 开机时长 · 1/5/15 分钟负载 · 内存占用 · 根分区占用与剩余 |
| 4 | GPU:型号 · 利用率 · 显存 used/total · 温度 · 功耗 · 风扇转速 |
| 5 | SVC:端口探活,*绿色=在听,x 灰色=没听 |
| 6 | UNIT:列出的 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 切回) |
| 临时退出面板、回到 shell | Ctrl-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。改完面板会自动按新宽度重排(状态栏宽度是动态取的)。
btop 1.3.0,GPU 监控是 1.4.0 才有的功能。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。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)。Permission denied(obj/ 属主是 root)→ 重编前 sudo rm -rf 源码目录。split -b 在上方插状态栏, 结果 pane0=顶部状态栏、pane1=btop(不是 0=btop)。搞反会让焦点落在状态栏上。split -l 8 在 80×24 的默认窗口上算比例,附着到 320×89 的控制台后被拉伸成 41 行。解决:附着后用 ( sleep 3; tmux resize-pane -t sysmon:OVERVIEW.0 -y 8 ) & 校正,并加 client-resized hook 在每次分辨率变化后重新钉成 8 行。Etc/UTC(/etc/localtime → zoneinfo/Etc/UTC),比北京时间晚 8 小时。 面板用 PANEL_TZ="Asia/Shanghai" 只覆盖显示;没有改系统时区(那会动到既有日志/服务时间戳)。 若要系统级修:sudo timedatectl set-timezone Asia/Shanghai(自行评估日志影响)。LANG=en_US.UTF-8 已保证 btop 的框线字符正常。nvidia-drmdrmfb 的 32bpp 帧缓冲 alpha 字节基本是 0x01, 直接按 bgra 转 PNG 会得到一张「全透明」图,看图器/预览里看起来是一片白。 正确做法:ffmpeg -f rawvideo -pixel_format bgra -video_size 2560x1440 -i fb.raw -pix_fmt rgb24 out.png。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 保证;加上上面链路实测通过,等价于开机验证。
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
Compiled with: g++-14,libnvidia-ml 符号在位,面板内渲染出 gpu-totalspython ... --port 8189(ComfyUI)占 15444MiB、95% GPUCtrl-b n 切 GPU 窗口、Ctrl-b d 脱离回 shell、sysmon 重新进入 —— 均实测通过| 位置 | 说明 |
|---|---|
/usr/local/bin/sysmon.sh | 面板启动器(建 tmux 会话/窗格、尺寸校正、快捷键栏) |
/usr/local/bin/sysmon-status.sh | 顶部 8 行状态栏(每轮重读配置、GPU 走 nvidia-smi) |
/etc/sysmon.conf | 端口表 / 单元表 / 标题 / 时区 / 刷新间隔 |
/usr/local/bin/sysmon | sysmon.sh 的软链,手动进入面板 |
/usr/local/bin/sysmon-enable / sysmon-disable | 开关「登录自动进面板」(~/.sysmon-off 标记) |
/etc/systemd/system/getty@tty1.service.d/autologin.conf | tty1 免密自动登录 |
/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 | 状态栏文本快照 |
tty1;SSH 登录路径不受影响(启动块里有 SSH_CONNECTION 判断)。Ctrl+Alt+F2…)仍是正常登录提示符,可随时绕过面板。