#!/usr/bin/env bash # associative array to map sensors to names declare -A SENSORS function map_sensors() { for d in $(find ${1} -mindepth 1 -maxdepth 1 -type d -name 'hwmon*'); do SENSORS[$(cat ${d}/name)]=${d/${1}/} done } # map sensors from the following sysfs directories map_sensors "/sys/devices/platform/coretemp.0/hwmon/" map_sensors "/sys/devices/virtual/hwmon/" # generate and replace configuration cat > /etc/thinkfan.conf << EOF ###################################################################### # WARNING: Do not modify. Generated by ${0}. ###################################################################### # # IBM/Lenovo Thinkpads (thinkpad_acpi, /proc/acpi/ibm) # ==================================================== # # IMPORTANT: # # To keep your HD from overheating, you have to specify a correction value for # the sensor that has the HD's temperature. You need to do this because # thinkfan uses only the highest temperature it can find in the system, and # that'll most likely never be your HD, as most HDs are already out of spec # when they reach 55 °C. # Correction values are applied from left to right in the same order as the # temperatures are read from the file. # # For example: # tp_thermal /proc/acpi/ibm/thermal (0, 0, 10) # will add a fixed value of 10 °C the 3rd value read from that file. Check out # http://www.thinkwiki.org/wiki/Thermal_Sensors to find out how much you may # want to add to certain temperatures. # use legacy fan control tp_fan /proc/acpi/ibm/fan # disable using sysfs pwm # pwm_fan /sys/devices/platform/thinkpad_hwmon/pwm1 # coretemp-isa-0000 # Adapter: ISA adapter # Package id 0: +38.0°C (high = +100.0°C, crit = +100.0°C) hwmon /sys/devices/platform/coretemp.0/hwmon/${SENSORS['coretemp']}/temp1_input # Core 0: +35.0°C (high = +100.0°C, crit = +100.0°C) hwmon /sys/devices/platform/coretemp.0/hwmon/${SENSORS['coretemp']}/temp2_input # Core 1: +34.0°C (high = +100.0°C, crit = +100.0°C) hwmon /sys/devices/platform/coretemp.0/hwmon/${SENSORS['coretemp']}/temp3_input # pch_skylake-virtual-0 hwmon /sys/devices/virtual/hwmon/${SENSORS['pch_skylake']}/temp1_input # acpitz-virtual-0 # subtract fixed 5 °C from this value, otherwise switching between levels # 1 and would happen quite often hwmon /sys/devices/virtual/hwmon/${SENSORS['acpitz']}/temp1_input (-5) # iwlwifi-virtual-0 hwmon /sys/devices/virtual/hwmon/${SENSORS['iwlwifi']}/temp1_input # Syntax: # (LEVEL, LOW, HIGH) # LEVEL is the fan level to use (0-7 with thinkpad_acpi) # LOW is the temperature at which to step down to the previous level # HIGH is the temperature at which to step up to the next level # All numbers are integers. # (0, 0, 55) (1, 48, 60) (2, 50, 61) (3, 52, 63) (4, 56, 65) (5, 59, 66) (7, 63, 32767) EOF