sensors无输出需先检查并加载coretemp/k10temp/nct6775驱动模块;虚拟环境无物理传感器;备用方案为直接读/sys/class/hwmon或/sys/class/thermal,gpu和硬盘温度需用nvidia-smi、hddtemp等专用工具。

sensors 命令没输出或只显示 “Adapter: Non-I2C bus” 怎么办
这不是工具坏了,而是内核没加载对应传感器驱动模块——coretemp(Intel)、k10temp(AMD)或nct6775(某些主板芯片组)这些模块必须被启用,sensors 才能读到真实数据。
- 运行
sudo sensors-detect时必须对所有提示按 YES,否则模块不会写入/etc/modules,重启后失效 - 检查是否已加载:运行
lsmod | grep -E "(coretemp|k10temp|nct6775)",空输出说明没加载 - 手动加载试试:
sudo modprobe coretemp(Intel)或sudo modprobe k10temp(AMD),再跑一次sensors - 云服务器、VMware/VirtualBox 虚拟机通常无物理传感器,
sensors必然为空,别浪费时间折腾
直接读 /sys/class/hwmon 是最稳的 fallback 方式
这个路径是内核原生暴露的硬件监控接口,不依赖用户态工具,适合脚本、容器或 sensors 失效时紧急排查。所有温度值单位统一为毫摄氏度(m°C),记得除以 1000。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- 先定位 CPU 对应的 hwmon 目录:
ls /sys/class/hwmon/,然后逐个查cat /sys/class/hwmon/hwmon*/name 2>/dev/null,找含coretemp或k10temp的目录 - 确认后读 Package 温度(封装总温):
cat /sys/class/hwmon/hwmon2/temp1_input→ 通常是temp1_input;核心温度可能从temp2_input开始,但命名因平台而异 - AMD 平台有时用
in*_input而非temp*_input,得实测;ARM 设备(如树莓派)走的是vcgencmd measure_temp,不是 hwmon - 一行命令快速看趋势:
watch -n 1 'cat /sys/class/hwmon/hwmon2/temp1_input 2>/dev/null | awk "{printf "Package: %.1f°C\n", $1/1000}"'
/sys/class/thermal 下的 thermal_zone 更易理解但需筛选
thermal_zone* 目录名带语义(比如 cpu-thermal、x86_pkg_temp),比 hwmon 更直观,但它面向热策略管理,并非每个 zone 都对应真实物理传感器。
- 列出所有 zone 类型和温度:
for z in /sys/class/thermal/thermal_zone*; do [ -f "$z/type" ] && echo "$(cat $z/type): $(cat $z/temp 2>/dev/null) m°C"; done - 重点筛含
cpu、pkg、processor的 type,例如cat /sys/class/thermal/thermal_zone3/type输出x86_pkg_temp,那cat /sys/class/thermal/thermal_zone3/temp就是封装温度 - 部分新主板或 Debian 云镜像默认禁用
acpi_enforce_resources=lax,会导致 thermal_zone 可见但数值恒为 0,此时得回退到 hwmon - 注意:有些 thermal_zone 是虚拟的(如
acpitz),读出来是主板南桥或固件模拟值,不准,优先信coretemp或k10temp对应的 zone
别忽略硬盘和 GPU 温度的独立路径
CPU 温度只是半截事。硬盘过热会丢数据,NVIDIA GPU 过热会降频甚至报错,它们不走同一套接口。
- SSD/HDD 温度用
hddtemp:先sudo hddtemp /dev/sda,注意它依赖 SMART 支持,NVMe 盘需用sudo smartctl -a /dev/nvme0n1 | grep Temperature - NVIDIA GPU 温度固定用
nvidia-smi:输出里Temp列就是摄氏度,watch -n 2 nvidia-smi实时刷 - 树莓派等 ARM 板载 SoC 温度只能用
vcgencmd measure_temp,返回类似temp=52.3'C - 别指望
sensors显示 GPU 或硬盘温度——它只管主板/CPU 附近传感器,其他设备得各走各的路
sensors 是首选,但只要它没输出,就得立刻切到 /sys/class/hwmon;/sys/class/thermal 看着友好,可得手动验证 zone 类型是否真实;GPU 和硬盘温度从来就不在同一个抽象层里,混用命令只会白忙活。










