Use inxi to identify temperatures reported by lm-sensors/sensors

With lm-sensors installed and properly configured, the output of the sensors command can be confusing in that it doesn’t identify which temperature is the CPU, motherboard, etc. For example, when run on my system, I get four temperatures reported to me:

ecellingsworth@MD1-LMDE ~ $ sensors
k10temp-pci-00c3Adapter:
 PCI adaptertemp1:        +35.5°C  (high = +70.0°C)

w83627dhg-isa-0290Adapter:
ISA adapter
Vcore:        +1.41 V  (min =  +0.00 V, max =  +1.74 V)
in1:          +0.30 V  (min =  +1.86 V, max =  +0.57 V)  ALARM
AVCC:         +2.72 V  (min =  +2.98 V, max =  +3.63 V)  ALARM
+3.3V:        +2.75 V  (min =  +2.98 V, max =  +3.63 V)  ALARM
in4:          +1.39 V  (min =  +1.78 V, max =  +1.26 V)  ALARM
in5:          +1.58 V  (min =  +0.98 V, max =  +1.78 V)
in6:          +1.79 V  (min =  +0.70 V, max =  +0.51 V)  ALARM
3VSB:         +3.02 V  (min =  +2.98 V, max =  +3.63 V)
Vbat:         +3.07 V  (min =  +2.70 V, max =  +3.30 V)
fan1:        3835 RPM  (min = 1308 RPM, div = 8)
fan2:        3183 RPM  (min = 1240 RPM, div = 8)
fan3:        4115 RPM  (min =  774 RPM, div = 8
)fan5:           0 RPM  (min = 2636 RPM, div = 128)  ALARM
temp1:        +32.0°C  (high = +111.0°C, hyst = -29.0°C)  sensor = thermistor
temp2:        +43.0°C  (high = +80.0°C, hyst = +75.0°C)  sensor = thermistor
temp3:        +92.0°C  (high = +114.0°C, hyst = +114.0°C)  sensor = thermistor
cpu0_vid:    +0.375 V
intrusion0:  ALARM

The first module, k10temp, is related to my motherboard, an ASRock 890GM Pro3. The kernel documentation for k10temp says the following:

There is one temperature measurement value, available as temp1_input in sysfs. It is measured in degrees Celsius with a resolution of 1/8th degree. Please note that it is defined as a relative value; to quote the AMD manual: Tctl is the processor temperature control value, used by the platform to control cooling systems. Tctl is a non-physical temperature on an arbitrary scale measured in degrees. It does _not_ represent an actual physical temperature like die or case temperature. Instead, it specifies the processor temperature relative to the point at which the system must supply the maximum cooling for the processor’s specified maximum case temperature and maximum thermal power dissipation.

So, it’s unclear where that temperature is measured or if it is even accurate. I will be ignoring it here. The second entry comes from module w83627dhg. If you google this you will find that this comes from a WinBond chip found on many different motherboards. The number and type of temperature sensors used and their physical locations depends on how the motherboard was designed and will vary between manufacturers and models. So, to identify “temp1”, etc., one can use a script called inxi. This script can be used to list all sorts of information about one’s system. A Debian package is available on the website and the script is pre-installed in many popular distributions (Mint, Crunchbang, Arch, etc.). The full output looks like this:

ecellingsworth@MD1-LMDE ~ $ inxi -F
System:    Host MD1-LMDE Kernel 3.12.0-031200-generic x86_64 (64 bit) Distro Linux Mint Xfce Edition
CPU:       Dual core AMD Athlon II X2 250 (-MCP-) cache 2048 KB flags (lm nx sse sse2 sse3 sse4a svm) bmips 12023.7
            Clock Speeds: (1) 3005.932 MHz (2) 3005.932 MHz
Graphics:  Card ATI RS880 [Radeon HD 4290] X.Org 1.11.4 Res: 1280x1024@60.0hz            GLX Renderer Gallium 0.4 on AMD RS880 GLX Version 2.1 Mesa 7.10.3 Direct Rendering Yes
Audio:     Card-1 ATI SBx00 Azalia (Intel HDA) driver snd_hda_intel BusID: 00:14.2
           Card-2 ATI RS880 Audio Device [Radeon HD 4200] driver snd_hda_intel BusID: 01:05.1
          Sound: Advanced Linux Sound Architecture Version k3.12.0-031200-generic
Network:   Card Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller driver r8169 v: 2.3LK-NAPI at port e800 BusID: 03:00.0
Disks:     HDD Total Size: 570.1GB (-) 1: /dev/sda WDC_WD2500BEVT 250.1GB
            2: /dev/sdb WDC_WD3200BEVT 320.1GB Partition: ID:/ size: 230G used: 97G (45%) fs: ext4
Sensors:   System Temperatures: cpu: 43.0C mobo: 32.0C
            Fan Speeds (in rpm): cpu: 3183 fan-1: 3750 fan-3: 4115 fan-5: 0
Info:      Processes 184 Uptime 1:01 Memory 724.5/3700.9MB Runlevel 2 Client Shell inxi 1.4.23

Issuing the -s option will give just the sensors information. By comparing the values of the temperatures listed here to those listed from sensors it is possible to determine the identity of the sensors read by sensors. Here I’ve identified the sensor “temp1” reported by sensors is actually my system (motherboard) temp while “temp2” is somewhere on or near the cpu. The value of “temp3” suggests that no sensor is actually installed to this input on the WinBond chip so I can ignore it. I’ve seen other configurations that label it as AUX or a case temperature. Regardless, with the identities in hand, it’s possible to setup a proper sensors.conf configuration or to configure the output displayed in panel applets that depend on lm-sensors.

 

panel screenshot showing sensors

 

*Edit 03/13/14: In case you’re wondering, yes, that 3.3 V rail is WAY low. I later discovered this was the cause of frequent freezes on booting and upon plugging in USB devices. Why is the 3.3 V rail low? I have a loose wire on the motherboard power connector. One of the more difficult symptoms I’ve ever had to diagnose for sure.