Пример настройки thinkfan
thinkfan - небольшой демон, позволяющий управлять вентилятором в системном блоке. Демон читает информацию о температуре с одного или нескольких датчиков и управляет указанным вентилятором. Ниже приводится описание настройки в Debian Linux на примере моего десктопа.
Разбираемся с датчиками
В моей системе оказалось 2 интерфейса для мониторинга железа - датчик в процессоре Athlon 64 и чип, работающий с модулем it87 (оба находятся командой sensors-detect). Вот вывод команды sensors:
sensors it8716-isa-0290 Adapter: ISA adapter in0: +1.36 V (min = +0.00 V, max = +4.08 V) in1: +1.81 V (min = +0.00 V, max = +4.08 V) in2: +3.28 V (min = +0.00 V, max = +4.08 V) in3: +2.99 V (min = +0.00 V, max = +4.08 V) in4: +3.02 V (min = +0.00 V, max = +4.08 V) in5: +0.05 V (min = +0.00 V, max = +4.08 V) in6: +0.00 V (min = +0.00 V, max = +4.08 V) ALARM in7: +2.99 V (min = +0.00 V, max = +4.08 V) Vbat: +3.02 V fan1: 0 RPM (min = 0 RPM) fan2: 1767 RPM (min = 10 RPM) fan3: 2288 RPM (min = 10 RPM) temp1: +26.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor temp2: -9.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor temp3: +40.0°C (low = +127.0°C, high = +70.0°C) sensor = thermal diode cpu0_vid: +1.350 V k8temp-pci-00c3 Adapter: PCI adapter Core0 Temp: +51.0°C Core1 Temp: +54.0°C
В sysfs тоже 2 отдельных каталога, соответствующих этим интерфейсам:
root@mws64:~# ls -l /sys/class/hwmon/ итого 0 lrwxrwxrwx 1 root root 0 Дек 19 2009 hwmon0 -> ../../devices/platform/it87.656/hwmon/hwmon0 lrwxrwxrwx 1 root root 0 Дек 19 2009 hwmon1 -> ../../devices/pci0000:00/0000:00:18.3/hwmon/hwmon1
Если заглянуть в /sys/class/hwmon/hwmon0/device/, то можно увидеть множество различных файлов - это датчики и интерфейсы управления для it87. В /sys/class/hwmon/hwmon1/device/ файлов поменьше, из них интересны только temp*_input - в них содержится информация о текущей температуре процессора:
root@mws64:~# cat /sys/class/hwmon/hwmon1/device/temp1_input 52000 root@mws64:~# cat /sys/class/hwmon/hwmon1/device/temp3_input 56000
От it87 нам нужно только управление вентиляторами, делается это через файлы pwmN, где N - число, соответствующее своему вентилятору. Значение в файле определяет частоту вращения вентилятора: 0 соответствует выключенному, а 255 - работающему на максимальных оборотах. В моем случае единственным управляемым вентилятором оказался процессорный, ему соответствовал файл /sys/class/hwmon/hwmon0/device/pwm1. Небольшой скрипт ниже поможет определить стартовое значение для данного конкретного вентилятора (кстати, подобная процедура делается в некоторых BIOS'ах):
echo 0 > /sys/class/hwmon/hwmon0/device/pwm1
sleep 5
for i in {0..255}
do
if [ "$(sensors | grep fan1 | awk '{print $2}')" == '0' ]
then
echo $i > /sys/class/hwmon/hwmon0/device/pwm1
else
echo $i - запуск
break
fi
sleep .2
done
У меня стартовое значение оказалось равным 63. Для круглого счета и надежности запуска возьмем 65.
С интерфейсами разобрались, переходим к настройке демона.
/etc/thinkfan.conf
В файле /etc/thinkfan.conf по умолчанию не прописаны пути к датчикам и вентилятору, а в качестве интерфейса управления вентилятором используется так называемый IBM-way. Комментируем его, раскомментируем sysfs-way и добавляем определенные выше пути.
Теперь необходимо подправить таблицу значений температур процессора и частот вращений вентилятора. В моем случае она получилась такая:
(0, 0, 50) (65, 45, 52) (80, 50, 54) (120, 52, 56) (150, 54, 58) (180, 56, 60) (210, 58, 62) (255, 60, 64)
Первое значение является значением в файле pwmN, второе - температура возврата на предыдущую ступень, третье - температура перехода на следующую ступень. Первая строка соответствует полностью выключенному вентилятору, вторая - начальному запуску (обратите внимание на значение 65 в первой колонке - это его мы определяли скриптом), последняя - полностью работающему вентилятору. Остальные строки являются промежуточными и их может быть любое необходимое количество.
По логике работы вентилятор будет выключен до температуры 50 градусов, после чего запустится на минимальных оборотах. При достижении 52 градусов вентилятор увеличит частоту вращения и так далее до достижения максимальных оборотов. При охлаждении вентилятор переключится на минимальные обороты при температуре ниже 50 градусов и отключится полностью при достижении температуры ниже 45 градусов.
Очевидно, что значение температуры охлаждения должно быть меньше температуры перехода на более высокую ступень предыдущей строки. Иначе говоря, последовательность
(65, 45, 52) (80, 53, 55)
является неправильной - температура опустится до 53 градусов, вентилятор перейдет на нижнюю ступень и тут же вернется на более высокую, так как 53>52.
Финальный конфиг у меня выглядел так:
sensor /sys/class/hwmon/hwmon1/device/temp1_input sensor /sys/class/hwmon/hwmon1/device/temp3_input fan /sys/class/hwmon/hwmon0/device/pwm1 (0, 0, 50) (65, 45, 52) (80, 50, 54) (120, 52, 56) (150, 54, 58) (180, 56, 60) (210, 58, 62) (255, 60, 64)
Запуск
Для запуска демона в Debian меняем в /etc/default/thinkfan значение параметра START с no на yes, сохраняем файл и перезапускаем демон командой /etc/init.d/thinkfan restart, после чего проверяем корректную работу, наблюдая параметры командой sensors.