发布于2026-08-16 阅读(0)
扫一扫,手机访问
想直接拿到 /sys/class/hwmon 里的原始温度值,其实不复杂:先执行 cat /sys/class/hwmon/hwmon/name,找到名称里带 coretemp 或 k10temp 的目录;接着读取对应的 temp_input 文件。这里拿到的数值单位是毫摄氏度,最后再除以 1000,才是真实温度。

/sys/class/hwmon 读取原始温度值其实不用额外安装任何工具,只要系统已经把传感器驱动加载好了,比如 coretemp 或 k10temp,温度数据就可以直接读取。核心路径就在 /sys/class/hwmon/hwmon*/temp*_input:这些文件里存的是“毫摄氏度”的整数值,像 42500 这样的数字,换算过来就是 42.5°C。
常见操作步骤:
hwmon* 是 CPU:运行 cat /sys/class/hwmon/hwmon*/name,输出含 coretemp 或 k10temp 的那个就是/sys/class/hwmon/hwmon0,再执行 ls temp*_input 查看可用通道(temp1_input、temp2_input 等)cat temp1_input 读值,注意结果要除以 1000 才是真实温度Permission denied,说明当前用户没权限读 sysfs —— 不要加 sudo cat,而是把用户加入 video 或 root 组,或改 /sys/class/hwmon/hwmon*/device 下的 udev 规则sensors 命令输出不稳定?常见干扰和过滤技巧sensors 本身只是个封装工具,底层还是读 /sys/class/hwmon,但它会尝试解析所有芯片,容易因某个传感器 I/O 错误导致整行输出中断,比如出现 ERROR: Can't get value of subfeature temp*_min: I/O error。
稳定提取温度的方法:
sensors 2>&1 | grep -E 'Core [0-9]|Package id|temp[0-9]+_input' 过滤有效行awk 提取冒号后数值,例如 sensors 2>&1 | awk -F': ' '/Core 0/ {print $2}' | sed 's/°C.*//'acpitz 输出单位是千分之一摄氏度但不带单位标识,需统一处理逻辑,不能只靠字符串匹配Psensor 默认只显示 lm-sensors 能识别的设备,而 NVIDIA GPU 温度需要 XNVCtrl 库支持,AMD GPU 则依赖 amdgpu 驱动暴露的 sysfs 接口(如 /sys/class/hwmon/hwmon*/device/temp1_input)。
启用 GPU 监控的必要条件:
nvidia-settings 和 libxnvctrl-dev(Ubuntu 源里叫 libxnvctrl1),否则 Psensor 根本看不到 GPU 条目/dev/nvidiactl(常见权限错误表现为 “No NVIDIA GPU found”)amdgpu 是否已加载(lsmod | grep amdgpu),并确认 /sys/class/hwmon/hwmon*/name 中有 amdgpu 字样watch -n 1 为什么温度刷新不准watch 是简单轮询,但硬件传感器更新频率本身受内核驱动限制,有些芯片(如 it87)默认每 2 秒才更新一次 temp*_input,watch -n 1 只是强行重读,不是实时采样。
更可靠的做法:
/sys/class/hwmon/hwmon*/update_interval(单位毫秒),多数 Intel CPU 是 2000,即 2 秒一次temp*_input 可能触发内核限频保护,反而延迟响应libsensor 的事件机制,或直接监听 inotify on temp*_input(但大多数 hwmon 设备不支持 inotify)真正影响读数准确性的,往往不是脚本写法,而是传感器芯片本身的采样周期和内核驱动实现 —— 这一点容易被忽略。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9