使用lm-sensors设置温度阈值后高温(high)与临界温度(crit)始终相同的问题咨询
看起来你遇到了lm-sensors配置里一个容易混淆的点,我来帮你拆解下问题所在,以及怎么解决:
首先先明确你的操作和现象:
你在lm-sensors的配置中添加了针对coretemp-isa-0000的compute规则:
chip "coretemp-isa-0000" compute temp1 99,100 compute temp2 100,99 compute temp3 @-2,@-1 compute temp4 @-1,@-2
重启服务后运行sensors,发现所有核心的high和crit温度值完全一致:
coretemp-isa-0000 Adapter: ISA adapter Package id 0: +99.0°C (high = +99.0°C, crit = +99.0°C) Core 0: +100.0°C (high = +100.0°C, crit = +100.0°C) Core 1: +42.0°C (high = +98.0°C, crit = +98.0°C) Core 2: +44.0°C (high = +99.0°C, crit = +99.0°C) Core 3: +46.0°C (high = +100.0°C, crit = +100.0°C)
问题根源:误解了compute指令的作用
你可能搞错了compute指令的用途——它不是用来设置high/crit阈值的,而是用来定义传感器原始值到显示值的线性转换规则。格式是compute <feature> <slope>,<offset>,或者@<slope>,@<offset>表示反向转换。
当你给某个温度条目设置了compute规则后,lm-sensors会用同样的转换公式去处理该条目的high和crit原始阈值,这就导致转换后的显示值出现了high和crit相同的情况(比如你的temp1规则,可能刚好把原始的high和crit值转换成了同一个数)。
正确的解决方法:用set指令单独设置阈值
如果你的需求是分别设置high和crit温度,应该使用set指令,而不是compute。如果确实需要保留温度转换规则,也可以同时结合两者:
修改后的配置示例:
chip "coretemp-isa-0000" # 如果你需要温度转换,保留compute规则 compute temp1 99,100 # 单独设置temp1的high和crit阈值 set temp1_high 95 set temp1_crit 100 compute temp2 100,99 set temp2_high 96 set temp2_crit 101 compute temp3 @-2,@-1 set temp3_high 97 set temp3_crit 99 compute temp4 @-1,@-2 set temp4_high 96 set temp4_crit 100
如果你的目的只是调整阈值,不需要修改温度显示数值,那可以直接去掉所有compute指令,只保留set规则即可。
验证步骤
修改配置后,重启lm-sensors服务:
sudo service lm-sensors restart
然后再次运行sensors命令,查看各个温度条目的high和crit是否已经分开显示为你设置的数值。
另外要注意:coretemp传感器的部分条目(比如Package id)可能和核心温度共享硬件阈值,不一定能单独修改,这取决于你的硬件和驱动支持情况。
备注:内容来源于stack exchange,提问作者porton

