В /usr/sbin/ есть консольный fancontrol. Должен быть установлен lm_sensors.
Он как раз и управляет вентиляторами в зависимости от температуры.
По этому принципу сделал свой скрипт для регулировки процессорного вентилятора:
#!/usr/bin/perl
# Файл значения оборотов вентилятора
$CpuFanFile="/sys/class/hwmon/hwmon0/device/fan1_input";
# Файл разрешения управлением вентилятором
$CpuFanFileEnable="/sys/class/hwmon/hwmon0/device/pwm1_enable";
# Файл задания оборотов вентилятора
$CpuFanSetFile="/sys/class/hwmon/hwmon0/device/pwm1";
# Файл значения температуры
$CpuTempFile="/sys/class/hwmon/hwmon0/device/temp2_input";
# Верхняя граница установки оборотов
$CpuSetMax=255;
# Нижняя граница установки оборотов
$CpuSetMin=110;
# Верхняя граница температуры
$CpuTempMax=70;
# Нижняя граница температуры
$CpuTempMin=45;
# Предыдущее значение температуры
$TempPrev=0;
# Включение управления вентилятором
open (CpuFanEnF , ">>".$CpuFanFileEnable) or die "Ошибка записи в файл $CpuFanFileEnable: $!\n";
print CpuFanEnF "1";
close CpuFanEnF;
while (1<2){
# Получение значения оборотов
sysopen (CpuFanF, $CpuFanFile, O_RDONLY);
$CpuFan=
close (CpuFanF);
# Получение значения температуры
sysopen (CpuTempF, $CpuTempFile, O_RDONLY);
$CpuTemp=
$CpuTemp=$CpuTemp / 1000;
close (CpuTempF);
if ($TempPrev == 0) {$TempPrev=$CpuTemp;}
$DeltaTemp=abs ($CpuTemp-$TempPrev);
if ($DeltaTemp>0){
# Вычисление
$CpuFanRange=$CpuSetMax-$CpuSetMin;
$CpuTempRange=$CpuTempMax-$CpuTempMin;
$CpuKoeff=$CpuFanRange / $CpuTempRange;
$CpuDeltaTemp=$CpuTemp-$CpuTempMin;
$CpuFanDeltaSet=$CpuDeltaTemp * $CpuKoeff;
$CpuFanSet=$CpuFanDeltaSet+$CpuSetMin;
# Проверка выхода из диапазона
if ($CpuFanSet<$CpuSetMin) {$CpuFanSet=$CpuSetMin;}
if ($CpuFanSet>$CpuSetMax) {$CpuFanSet=$CpuSetMax;}
# Установка оборотов (запись в файл)
open (CpuFanSetF , ">>".$CpuFanSetFile);
print CpuFanSetF $CpuFanSet;
close CpuFanSetF;
$FanPercent=int ($CpuFanSet / 2.55);
# print ("Изменение температуры с $TempPrev°C на $CpuTemp°C. Обороты установлены на $FanPercent%\n");
$TempPrev=$CpuTemp;
}
sleep 1;
}
Запускаю его из /etc/rc.d/rc.local
Комментариев нет:
Отправить комментарий