mirror of
https://github.com/smxi/inxi.git
synced 2024-11-16 16:21:39 +00:00
New version, new tarball. This is an attempt to make -s accurate more of the time,
particularly with fringe or broken sensors outputs. See inxi issue 58 for details. http://code.google.com/p/inxi/issues/detail?id=58 Added temp3, and an override to capture cases where temp3 is the actual cpu temp. Added PECI overrides for cases like msi/asus mobos have defective CPUTIN return data. Added core0 overrides as well, for cases where the temp returned is too low. It is absolutely 100% guaranteed that these changes will break some outputs that were working, but it's also certain that I believe that more wrong outputs will be corrected. With sensors, really the only way you can get reliable sensors is to use the lm-sensors config files for your motherboard, then set: CPU: temp and MB: temp explicitly. inxi will always use CPU: or MB: to override anything found.
This commit is contained in:
parent
41087ac9a3
commit
11b7ae3365
114
inxi
114
inxi
|
@ -1,8 +1,8 @@
|
|||
#!/usr/bin/env bash
|
||||
########################################################################
|
||||
#### Script Name: inxi
|
||||
#### Version: 2.1.23
|
||||
#### Date: 2014-04-27
|
||||
#### Version: 2.1.24
|
||||
#### Date: 2014-04-28
|
||||
#### Patch Number: 00
|
||||
########################################################################
|
||||
#### SPECIAL THANKS
|
||||
|
@ -1775,6 +1775,8 @@ debug_data_collector()
|
|||
df -H &> $debug_data_dir/bsd-df-H-no-excludes.txt
|
||||
df -k -T &> $debug_data_dir/bsd-df-k-T-no-excludes.txt
|
||||
df -k &> $debug_data_dir/bsd-df-k-no-excludes.txt
|
||||
atacontrol list &> $debug_data_dir/bsd-atacontrol-list.txt
|
||||
camcontrol devlist &> $debug_data_dir/bsd-camcontrol-devlist.txt
|
||||
# bsd tool
|
||||
mount &> $debug_data_dir/mount.txt
|
||||
btrfs filesystem show &> $debug_data_dir/btrfs-filesystem-show.txt
|
||||
|
@ -8192,7 +8194,8 @@ get_sensors_data()
|
|||
gawk -F ':' -v userCpuNo="$SENSORS_CPU_NO" '
|
||||
BEGIN {
|
||||
IGNORECASE=1
|
||||
core0Temp="" # only if all else fails...
|
||||
core0Temp="" # these only if all else fails...
|
||||
cpuPeciTemp="" # use if temps are missing or wrong
|
||||
cpuTemp=""
|
||||
cpuTempReal=""
|
||||
fanWorking=""
|
||||
|
@ -8207,6 +8210,8 @@ get_sensors_data()
|
|||
sysFanString=""
|
||||
temp1=""
|
||||
temp2=""
|
||||
temp3=""
|
||||
tempDiff=20 # for C, handled for F after that is determined
|
||||
tempFanType="" # set to 1 or 2
|
||||
tempUnit=""
|
||||
tempWorking=""
|
||||
|
@ -8235,6 +8240,8 @@ get_sensors_data()
|
|||
tempUnit=tempWorkingUnit
|
||||
}
|
||||
}
|
||||
# issue 58 msi/asus show wrong for CPUTIN so overwrite it if PECI 0 is present
|
||||
# http://www.spinics.net/lists/lm-sensors/msg37308.html
|
||||
/^CPU(.*)\+([0-9]+)(.*)[ \t°](C|F)/ && $2 ~ /^[ \t]*\+([0-9]+)/ {
|
||||
cpuTemp=gensub( /[ \t]+\+([0-9\.]+)(.*)/, "\\1", 1, $2 )
|
||||
tempWorkingUnit=gensub( /[ \t]+\+([0-9\.]+)[ \t°]+([CF])(.*)/, "\\2", 1, $2 )
|
||||
|
@ -8242,6 +8249,13 @@ get_sensors_data()
|
|||
tempUnit=tempWorkingUnit
|
||||
}
|
||||
}
|
||||
/^PECI[[:space:]]Agent[[:space:]]0(.*)\+([0-9]+)(.*)[ \t°](C|F)/ && $2 ~ /^[ \t]*\+([0-9]+)/ {
|
||||
cpuPeciTemp=gensub( /[ \t]+\+([0-9\.]+)(.*)/, "\\1", 1, $2 )
|
||||
tempWorkingUnit=gensub( /[ \t]+\+([0-9\.]+)[ \t°]+([CF])(.*)/, "\\2", 1, $2 )
|
||||
if ( tempWorkingUnit ~ /^C|F$/ && tempUnit == "" ){
|
||||
tempUnit=tempWorkingUnit
|
||||
}
|
||||
}
|
||||
/^(P\/S|Power)(.*)\+([0-9]+)(.*)[ \t°](C|F)/ && $2 ~ /^[ \t]*\+([0-9]+)/ {
|
||||
psuTemp=gensub( /[ \t]+\+([0-9\.]+)(.*)/, "\\1", 1, $2 )
|
||||
tempWorkingUnit=gensub( /[ \t]+\+([0-9\.]+)[ \t°]+([CF])(.*)/, "\\2", 1, $2 )
|
||||
|
@ -8249,6 +8263,7 @@ get_sensors_data()
|
|||
tempUnit=tempWorkingUnit
|
||||
}
|
||||
}
|
||||
# for temp1/2 only use temp1/2 if they are null or greater than the last ones
|
||||
$1 ~ /^temp1$/ && $2 ~ /^[ \t]*\+([0-9]+)/ {
|
||||
tempWorking=gensub( /[ \t]+\+([0-9\.]+)(.*)/, "\\1", 1, $2 )
|
||||
if ( temp1 == "" || tempWorking > 0 ) {
|
||||
|
@ -8269,10 +8284,20 @@ get_sensors_data()
|
|||
tempUnit=tempWorkingUnit
|
||||
}
|
||||
}
|
||||
|
||||
# temp3 is only used as an absolute override for systems with all 3 present
|
||||
$1 ~ /^temp3$/ && $2 ~ /^[ \t]*\+([0-9]+)/ {
|
||||
tempWorking=gensub( /[ \t]+\+([0-9\.]+)(.*)/, "\\1", 1, $2 )
|
||||
if ( temp3 == "" || tempWorking > 0 ) {
|
||||
temp3=tempWorking
|
||||
}
|
||||
tempWorkingUnit=gensub( /[ \t]+\+([0-9\.]+)[ \t°]+([CF])(.*)/, "\\2", 1, $2 )
|
||||
if ( tempWorkingUnit ~ /^C|F$/ && tempUnit == "" ){
|
||||
tempUnit=tempWorkingUnit
|
||||
}
|
||||
}
|
||||
# final fallback if all else fails, funtoo user showed sensors putting
|
||||
# temp on wrapped second line, not handled
|
||||
/^(core0|core 0)(.*)\+([0-9]+)(.*)[ \t°](C|F)/ && $2 ~ /^[ \t]*\+([0-9]+)/ {
|
||||
/^(core0|core 0|Physical id 0)(.*)\+([0-9]+)(.*)[ \t°](C|F)/ && $2 ~ /^[ \t]*\+([0-9]+)/ {
|
||||
tempWorking=gensub( /[ \t]+\+([0-9\.]+)(.*)/, "\\1", 1, $2 )
|
||||
if ( core0Temp == "" || tempWorking > 0 ) {
|
||||
core0Temp=tempWorking
|
||||
|
@ -8282,7 +8307,6 @@ get_sensors_data()
|
|||
tempUnit=tempWorkingUnit
|
||||
}
|
||||
}
|
||||
|
||||
# note: can be cpu fan:, cpu fan speed:, etc. Some cases have no space before
|
||||
# $2 starts (like so :1234 RPM), so skip that space test in regex
|
||||
/^CPU(.*)[ \t]*([0-9]+)[ \t]RPM/ {
|
||||
|
@ -8340,17 +8364,18 @@ get_sensors_data()
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
END {
|
||||
# first we need to handle the case where we have to determine which temp/fan to use for cpu and mobo:
|
||||
# note, for rare cases of weird cool cpus, user can override in their prefs and force the assignment
|
||||
# this is wrong for systems with > 2 tempX readings, but the logic is too complex with 3 variables
|
||||
# so have to accept that it will be wrong in some cases, particularly for motherboard temp readings.
|
||||
if ( temp1 != "" && temp2 != "" ){
|
||||
if ( userCpuNo != "" && userCpuNo ~ /(1|2)/ ) {
|
||||
tempFanType=userCpuNo
|
||||
}
|
||||
else {
|
||||
# first some fringe cases with cooler cpu than mobo: assume which is cpu temp based on fan speed
|
||||
# but only if other fan speed is 0
|
||||
# but only if other fan speed is 0.
|
||||
if ( temp1 >= temp2 && 1 in aFanDefault && 2 in aFanDefault && aFanDefault[1] == 0 && aFanDefault[2] > 0 ) {
|
||||
tempFanType=2
|
||||
}
|
||||
|
@ -8378,39 +8403,91 @@ get_sensors_data()
|
|||
tempFanType=1
|
||||
}
|
||||
}
|
||||
|
||||
# convert the diff number for F, it needs to be bigger that is
|
||||
if ( tempUnit == "F" ) {
|
||||
tempDiff = tempDiff * 1.8
|
||||
}
|
||||
if ( cpuTemp != "" ) {
|
||||
# specific hack to handle broken CPUTIN temps with PECI
|
||||
if ( cpuPeciTemp != "" && ( cpuTemp - cpuPeciTemp ) > tempDiff ){
|
||||
cpuTempReal=cpuPeciTemp
|
||||
}
|
||||
# then get the real cpu temp, best guess is hottest is real
|
||||
if ( cpuTemp != "" ){
|
||||
else {
|
||||
cpuTempReal=cpuTemp
|
||||
}
|
||||
else if ( tempFanType != "" ){
|
||||
}
|
||||
else {
|
||||
if ( tempFanType != "" ){
|
||||
# there are some weird scenarios
|
||||
if ( tempFanType == 1 ){
|
||||
if ( temp1 != "" && temp2 != "" && temp2 > temp1 ) {
|
||||
cpuTempReal=temp2
|
||||
}
|
||||
else {
|
||||
cpuTempReal=temp1
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ( temp1 != "" && temp2 != "" && temp1 > temp2 ) {
|
||||
cpuTempReal=temp1
|
||||
}
|
||||
else {
|
||||
cpuTempReal=temp2
|
||||
}
|
||||
}
|
||||
else {
|
||||
cpuTempReal=temp1
|
||||
}
|
||||
# if all else fails, use core0 temp if it is present and cpu is null
|
||||
if ( cpuTempReal == "" && core0Temp != "" ) {
|
||||
else {
|
||||
cpuTempReal=temp1 # can be null, that is ok
|
||||
}
|
||||
if ( cpuTempReal != "" ) {
|
||||
if ( temp3 != "" && temp3 > cpuTempReal ) {
|
||||
cpuTempReal=temp3
|
||||
}
|
||||
# there are some absurdly wrong temp1: acpitz-virtual-0 temp1: +13.8°C
|
||||
if ( core0Temp != "" && (core0Temp - cpuTempReal) > tempDiff ) {
|
||||
cpuTempReal=core0Temp
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
# if all else fails, use core0/peci temp if present and cpu is null
|
||||
if ( cpuTempReal == "" ) {
|
||||
if ( core0Temp != "" ) {
|
||||
cpuTempReal=core0Temp
|
||||
}
|
||||
# note that peci temp is known to be colder than the actual system
|
||||
# sometimes so it is the last fallback we want to use even though in theory
|
||||
# it is more accurate, but fact suggests theory wrong.
|
||||
else if ( cpuPeciTemp != "" ) {
|
||||
cpuTempReal=cpuPeciTemp
|
||||
}
|
||||
}
|
||||
# then the real mobo temp
|
||||
if ( moboTemp != "" ){
|
||||
moboTempReal=moboTemp
|
||||
}
|
||||
else if ( tempFanType != "" ){
|
||||
if ( tempFanType == 1 ) {
|
||||
if ( temp1 != "" && temp2 != "" && temp2 > temp1 ) {
|
||||
moboTempReal=temp1
|
||||
}
|
||||
else {
|
||||
moboTempReal=temp2
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ( temp1 != "" && temp2 != "" && temp1 > temp2 ) {
|
||||
moboTempReal=temp2
|
||||
}
|
||||
else {
|
||||
moboTempReal=temp1
|
||||
}
|
||||
}
|
||||
## NOTE: not safe to assume temp3 is the mobo temp, sad to say
|
||||
#if ( temp1 != "" && temp2 != "" && temp3 != "" && temp3 < moboTempReal ) {
|
||||
# moboTempReal= temp3
|
||||
#}
|
||||
}
|
||||
else {
|
||||
moboTempReal=temp2
|
||||
}
|
||||
|
@ -8427,7 +8504,6 @@ get_sensors_data()
|
|||
aFanDefault[2]=""
|
||||
}
|
||||
}
|
||||
|
||||
# then we need to get the actual numeric max array count for both fan arrays
|
||||
for (i = 0; i <= 29; i++) {
|
||||
if ( i in aFanMain && i > indexCountaFanMain ) {
|
||||
|
@ -8439,7 +8515,6 @@ get_sensors_data()
|
|||
indexCountaFanDefault=i
|
||||
}
|
||||
}
|
||||
|
||||
# clear out any duplicates. Primary fan real trumps fan working always if same speed
|
||||
for (i = 1; i <= indexCountaFanMain; i++) {
|
||||
if ( i in aFanMain && aFanMain[i] != "" && aFanMain[i] != 0 ) {
|
||||
|
@ -8450,7 +8525,6 @@ get_sensors_data()
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
# now see if you can find the fast little mobo fan, > 5000 rpm and put it as mobo
|
||||
# note that gawk is returning true for some test cases when aFanDefault[j] < 5000
|
||||
# which has to be a gawk bug, unless there is something really weird with arrays
|
||||
|
@ -8469,7 +8543,6 @@ get_sensors_data()
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
# then construct the sys_fan string for echo, note that iteration 1
|
||||
# makes: fanDefaultString separator null, ie, no space or ,
|
||||
for (j = 1; j <= indexCountaFanDefault; j++) {
|
||||
|
@ -8490,7 +8563,6 @@ get_sensors_data()
|
|||
if ( cpuTempReal != "" ) {
|
||||
cpuTempReal = cpuTempReal tempUnit
|
||||
}
|
||||
|
||||
# if they are ALL null, print error message. psFan is not used in output currently
|
||||
if ( cpuTempReal == "" && moboTempReal == "" && aFanMain[1] == "" && aFanMain[2] == "" && aFanMain[3] == "" && fanDefaultString == "" ) {
|
||||
print "No active sensors found. Have you configured your sensors yet?"
|
||||
|
|
|
@ -1,3 +1,31 @@
|
|||
=====================================================================================
|
||||
Version: 2.1.24
|
||||
Patch Version: 00
|
||||
Script Date: 2014-04-28
|
||||
-----------------------------------
|
||||
Changes:
|
||||
-----------------------------------
|
||||
New version, new tarball. This is an attempt to make -s accurate more of the time,
|
||||
particularly with fringe or broken sensors outputs. See inxi issue 58 for details.
|
||||
http://code.google.com/p/inxi/issues/detail?id=58
|
||||
|
||||
Added temp3, and an override to capture cases where temp3 is the actual cpu temp.
|
||||
|
||||
Added PECI overrides for cases like msi/asus mobos have defective CPUTIN return data.
|
||||
|
||||
Added core0 overrides as well, for cases where the temp returned is too low.
|
||||
|
||||
It is absolutely 100% guaranteed that these changes will break some outputs that were
|
||||
working, but it's also certain that I believe that more wrong outputs will be corrected.
|
||||
|
||||
With sensors, really the only way you can get reliable sensors is to use the lm-sensors
|
||||
config files for your motherboard, then set: CPU: temp and MB: temp explicitly.
|
||||
|
||||
inxi will always use CPU: or MB: to override anything found.
|
||||
|
||||
-----------------------------------
|
||||
-- Harald Hope - Mon, 28 Apr 2014 13:17:53 -0700
|
||||
|
||||
=====================================================================================
|
||||
Version: 2.1.23
|
||||
Patch Version: 00
|
||||
|
|
Loading…
Reference in a new issue