商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 系统应用 > Ubuntu如何配置具体的系统硬件传感器读数监控视图

Ubuntu如何配置具体的系统硬件传感器读数监控视图

  发布于2026-08-16 阅读(0)

扫一扫,手机访问

想直接拿到 /sys/class/hwmon 里的原始温度值,其实不复杂:先执行 cat /sys/class/hwmon/hwmon/name,找到名称里带 coretemp 或 k10temp 的目录;接着读取对应的 temp_input 文件。这里拿到的数值单位是毫摄氏度,最后再除以 1000,才是真实温度。

Ubuntu如何配置具体的系统硬件传感器读数监控视图

怎么直接从 /sys/class/hwmon 读取原始温度值

其实不用额外安装任何工具,只要系统已经把传感器驱动加载好了,比如 coretempk10temp,温度数据就可以直接读取。核心路径就在 /sys/class/hwmon/hwmon*/temp*_input:这些文件里存的是“毫摄氏度”的整数值,像 42500 这样的数字,换算过来就是 42.5°C。

常见操作步骤:

  • 先确认哪个 hwmon* 是 CPU:运行 cat /sys/class/hwmon/hwmon*/name,输出含 coretempk10temp 的那个就是
  • 进入对应目录,比如 /sys/class/hwmon/hwmon0,再执行 ls temp*_input 查看可用通道(temp1_inputtemp2_input 等)
  • cat temp1_input 读值,注意结果要除以 1000 才是真实温度
  • 如果报 Permission denied,说明当前用户没权限读 sysfs —— 不要加 sudo cat,而是把用户加入 videoroot 组,或改 /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 图形界面里为什么找不到 GPU 温度

Psensor 默认只显示 lm-sensors 能识别的设备,而 NVIDIA GPU 温度需要 XNVCtrl 库支持,AMD GPU 则依赖 amdgpu 驱动暴露的 sysfs 接口(如 /sys/class/hwmon/hwmon*/device/temp1_input)。

启用 GPU 监控的必要条件:

  • NVIDIA 用户必须安装 nvidia-settingslibxnvctrl-dev(Ubuntu 源里叫 libxnvctrl1),否则 Psensor 根本看不到 GPU 条目
  • 确保 X server 正在运行且当前用户有权限访问 /dev/nvidiactl(常见权限错误表现为 “No NVIDIA GPU found”)
  • AMD 用户检查 amdgpu 是否已加载(lsmod | grep amdgpu),并确认 /sys/class/hwmon/hwmon*/name 中有 amdgpu 字样
  • Psensor 启动后需手动勾选 GPU 对应 sensor,它不会自动启用 —— 在 Preferences → Sensors 里展开 “NVIDIA GPU” 或 “AMD GPU”,再打勾

监控脚本里用 watch -n 1 为什么温度刷新不准

watch 是简单轮询,但硬件传感器更新频率本身受内核驱动限制,有些芯片(如 it87)默认每 2 秒才更新一次 temp*_inputwatch -n 1 只是强行重读,不是实时采样。

更可靠的做法:

  • 查清传感器最大更新频率:读 /sys/class/hwmon/hwmon*/update_interval(单位毫秒),多数 Intel CPU 是 2000,即 2 秒一次
  • 避免高频轮询:频繁读 temp*_input 可能触发内核限频保护,反而延迟响应
  • 若需亚秒级精度(比如做风扇控制),得换用 libsensor 的事件机制,或直接监听 inotify on temp*_input(但大多数 hwmon 设备不支持 inotify)

真正影响读数准确性的,往往不是脚本写法,而是传感器芯片本身的采样周期和内核驱动实现 —— 这一点容易被忽略。

本文转载于:https://www.php.cn/faq/2993949.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注