LINUX.ORG.RU

История изменений

Исправление intelfx, (текущая версия) :

Тогда:

  • файл /sys/devices/platform/coretemp.0/temp1_input содержит температуру процессора (кристалла) в миллиградусах Цельсия
  • костыль для управления вентилятором выглядит так:
    #!/bin/bash
    
    TEMPERATURE_FILE="/sys/devices/platform/coretemp.0/temp1_input"
    
    TIMEOUT=10 # в секундах
    
    function write_fan() {
        if [[ "$1" ]]; then
            ec_access -w D5 -v "$1"
        fi
    }
    
    declare -A FAN_PROFILES
    FAN_PROFILES=(
        [0]="значение для отключенного вентилятора"
        [30000]="значение для минимальной скорости на 30°"
        [60000]="значение для средней скорости на 60°"
        [90000]="значение для максимальной скорости на 90°"
    )
    
    TEMPERATURE_LAST=-1
    
    while true; do
        [[ -r "$TEMPERATURE_FILE" ]] || { echo "Can't read CPU temperature, exiting" >&2; exit 1; }
        TEMPERATURE_INPUT="$(< "$TEMPERATURE_FILE" )"
    
        # найдём максимальный профиль, не превышающий текущей температуры
        TEMPERATURE_CHOSEN=0
        for profile in "${!FAN_PROFILES[@]}"; do
            if (( profile <= TEMPERATURE_INPUT )) &&
               (( TEMPERATURE_CHOSEN < profile )); then
                TEMPERATURE_CHOSEN="$profile"
            fi
        done
    
        if (( TEMPERATURE_CHOSEN != TEMPERATURE_LAST )); then
            echo "debug: profile transition \"$TEMPERATURE_LAST\" -> \"$TEMPERATURE_CHOSEN\"" >&2
            TEMPERATURE_LAST="$TEMPERATURE_CHOSEN"
            write_fan "${FAN_PROFILES["$TEMPERATURE_CHOSEN"]}"
        fi
    
        sleep "$TIMEOUT"
    done
    

Как-то так (не тестировал ни разу, но вроде бы должно работать).
ec_control надо кинуть в /usr/local/bin (или куда-нибудь ещё, но тогда в write_fan() придётся прописать полный путь до файла), скрипт кинуть куда угодно (сделав ему chmod +x, естественно) и добавить в автозапуск.

Как последнее делается в апстарте - понятия не имею, но может сработать добавление в /etc/rc.local строки вида <полный_путь_до_скрипта> &.

Исходная версия intelfx, :

Тогда:

  • файл /sys/devices/platform/coretemp.0/temp1_input содержит температуру процессора (кристалла) в миллиградусах Цельсия
  • костыль для управления вентилятором выглядит так:
    #!/bin/bash
    
    TEMPERATURE_FILE="/sys/devices/platform/coretemp.0/temp1_input"
    
    TIMEOUT=10 # в секундах
    
    function write_fan() {
        if [[ "$1" ]]; then
            ec_access -w D5 -v "$1"
        fi
    }
    
    declare -A FAN_PROFILES
    FAN_PROFILES=(
        [0]="значение для отключенного вентилятора"
        [30000]="значение для минимальной скорости на 30°"
        [60000]="значение для средней скорости на 60°"
        [90000]="значение для максимальной скорости на 90°"
    )
    
    TEMPERATURE_LAST=-1
    
    while true; do
        [[ -r "$TEMPERATURE_FILE" ]] || { echo "Can't read CPU temperature, exiting" >&2; exit 1; }
        TEMPERATURE_INPUT="$(< "$TEMPERATURE_FILE" )"
    
        # найдём максимальный профиль, не превышающий текущей температуры
        TEMPERATURE_CHOSEN=0
        for profile in "${!FAN_PROFILES[@]}"; do
            if (( profile <= TEMPERATURE_INPUT )) &&
               (( TEMPERATURE_CHOSEN < profile )); then
                TEMPERATURE_CHOSEN="$profile"
            fi
        done
    
        if (( TEMPERATURE_CHOSEN != TEMPERATURE_LAST )); then
            echo "debug: profile transition \"$TEMPERATURE_LAST\" -> \"$TEMPERATURE_CHOSEN\""
            TEMPERATURE_LAST="$TEMPERATURE_CHOSEN"
            write_fan "${FAN_PROFILES["$TEMPERATURE_CHOSEN"]}"
        fi
    
        sleep "$TIMEOUT"
    done
    

Как-то так (не тестировал ни разу, но вроде бы должно работать).
ec_control надо кинуть в /usr/local/bin (или куда-нибудь ещё, но тогда в write_fan() придётся прописать полный путь до файла), скрипт кинуть куда угодно (сделав ему chmod +x, естественно) и добавить в автозапуск.

Как последнее делается в апстарте - понятия не имею, но может сработать добавление в /etc/rc.local строки вида <полный_путь_до_скрипта> &.