13 releases

0.3.1 Sep 13, 2024
0.3.0 Jun 14, 2024
0.2.2 Mar 27, 2024
0.2.0 Oct 9, 2023
0.1.3 Nov 27, 2021

#270 in Unix APIs

MIT license

155KB
3.5K SLoC

crates.io docs.rs license

Hardware monitoring in Linux based on LM Sensors

lm-sensors provides user-space support for the hardware monitoring drivers in Linux.

This crate is Linux-specific. Building it for non-Linux platforms, or for the Linux kernel, results in an empty crate.

This crate links to libsensors, and requires it to be installed. Linking to libsensors happens transitively through depending on the sensors-sys crate. The sensors-sys crate documentation illustrates, among other things, how to install libsensors and control aspects of this linking.

Listing all available sensors

// Initialize LM sensors library.
let sensors = lm_sensors::Initializer::default().initialize()?;

// Print all chips.
for chip in sensors.chip_iter(None) {
    if let Some(path) = chip.path() {
        println!("chip: {} at {} ({})", chip, chip.bus(), path.display());
    } else {
        println!("chip: {} at {}", chip, chip.bus());
    }

    // Print all features of the current chip.
    for feature in chip.feature_iter() {
        let name = feature.name().transpose()?.unwrap_or("N/A");
        println!("    {}: {}", name, feature);

        // Print all sub-features of the current chip feature.
        for sub_feature in feature.sub_feature_iter() {
            if let Ok(value) = sub_feature.value() {
                println!("        {}: {}", sub_feature, value);
            } else {
                println!("        {}: N/A", sub_feature);
            }
        }
    }
}
# Ok::<(), lm_sensors::errors::Error>(())

The following is an example output of the sample above:

chip: iwlwifi_1-virtual-0 at Virtual device (/sys/class/hwmon/hwmon8)
    temp1: temp1
        temp1_input: N/A
chip: pch_cometlake-virtual-0 at Virtual device (/sys/class/hwmon/hwmon6)
    temp1: temp1
        temp1_input: 67 C
chip: ucsi_source_psy_USBC000:001-isa-0000 at ISA adapter (/sys/class/hwmon/hwmon10)
    in0: in0
        in0_input: 5 V
        in0_min: 5 V
        in0_max: 5 V
    curr1: curr1
        curr1_input: 0 A
        curr1_max: 1.5 A
chip: coretemp-isa-0000 at ISA adapter (/sys/class/hwmon/hwmon4)
    temp1: Package id 0
        temp1_input: 71 C
        temp1_max: 100 C
        temp1_crit: 100 C
        temp1_crit_alarm:
    temp2: Core 0
        temp2_input: 62 C
        temp2_max: 100 C
        temp2_crit: 100 C
        temp2_crit_alarm:
    temp3: Core 1
        temp3_input: 63 C
        temp3_max: 100 C
        temp3_crit: 100 C
        temp3_crit_alarm:
    temp4: Core 2
        temp4_input: 63 C
        temp4_max: 100 C
        temp4_crit: 100 C
        temp4_crit_alarm:
    temp5: Core 3
        temp5_input: 71 C
        temp5_max: 100 C
        temp5_crit: 100 C
        temp5_crit_alarm:
    temp6: Core 4
        temp6_input: 62 C
        temp6_max: 100 C
        temp6_crit: 100 C
        temp6_crit_alarm:
    temp7: Core 5
        temp7_input: 63 C
        temp7_max: 100 C
        temp7_crit: 100 C
        temp7_crit_alarm:
    temp8: Core 6
        temp8_input: 61 C
        temp8_max: 100 C
        temp8_crit: 100 C
        temp8_crit_alarm:
    temp9: Core 7
        temp9_input: 61 C
        temp9_max: 100 C
        temp9_crit: 100 C
        temp9_crit_alarm:
chip: nvme-pci-0200 at PCI adapter (/sys/class/hwmon/hwmon2)
    temp1: Composite
        temp1_input: 52.85 C
        temp1_max: 84.85 C
        temp1_min: -273.15 C
        temp1_crit: 84.85 C
        temp1_alarm:
    temp2: Sensor 1
        temp2_input: 52.85 C
        temp2_max: 65261.85 C
        temp2_min: -273.15 C
    temp3: Sensor 2
        temp3_input: 45.85 C
        temp3_max: 65261.85 C
        temp3_min: -273.15 C
chip: acpitz-acpi-0 at ACPI interface (/sys/class/hwmon/hwmon0)
    temp1: temp1
        temp1_input: 61 C
        temp1_crit: 128 C
chip: thinkpad-isa-0000 at ISA adapter (/sys/class/hwmon/hwmon7)
    fan1: fan1
        fan1_input: 2657 RPM
    fan2: fan2
        fan2_input: 2583 RPM
    temp1: CPU
        temp1_input: 61 C
    temp2: GPU
        temp2_input: 58 C
    temp3: temp3
        temp3_input: 64 C
    temp4: temp4
        temp4_input: 1 C
    temp5: temp5
        temp5_input: 60 C
    temp6: temp6
        temp6_input: 65 C
    temp7: temp7
        temp7_input: 68 C
    temp8: temp8
        temp8_input: 0 C
chip: ucsi_source_psy_USBC000:002-isa-0000 at ISA adapter (/sys/class/hwmon/hwmon11)
    in0: in0
        in0_input: 0 V
        in0_min: 0 V
        in0_max: 0 V
    curr1: curr1
        curr1_input: 0 A
        curr1_max: 0 A
chip: nvme-pci-5500 at PCI adapter (/sys/class/hwmon/hwmon3)
    temp1: Composite
        temp1_input: 51.85 C
        temp1_max: 83.85 C
        temp1_min: -273.15 C
        temp1_crit: 84.85 C
        temp1_alarm: 
    temp2: Sensor 1
        temp2_input: 51.85 C
        temp2_max: 65261.85 C
        temp2_min: -273.15 C
    temp3: Sensor 2
        temp3_input: 48.85 C
        temp3_max: 65261.85 C
        temp3_min: -273.15 C
chip: BAT0-acpi-0 at ACPI interface (/sys/class/hwmon/hwmon1)
    in0: in0
        in0_input: 12.255 V

Versioning

This project adheres to Semantic Versioning. The CHANGELOG.md file details notable changes over time.

Dependencies

~0.7–8MB
~75K SLoC