Года два назад ко мне в руки попал подержаный MacBook White, которым я пользуюсь по сей день. Тогда на нем еще стояла WinXP и он жутко грелся из-за того, что кулер никак не хотел раскручиваться на полную, так что я, подумав некоторое время, установил родную для него MacOS(чтобы обновить UEFI), но принятое мною решение не оправдалось. Стало ясно, что проблема явно аппаратная, а менять что-то в ноуте было затратно да и неинтересно, поэтому оставалось единственное верное решение, которое, я был уверен, даст свои плоды — установка на ноут дистрибутива линукс, а именно lubuntu, которая мне приглянулась из-за простоты своего облегченного интерфейса. Таким образом и началось мое тесное знакомство с данной осью.
Разумеется, сразу после установки никакой магии не случилось и весь шаманский обряд пришлось проводить самому. Для начала, с помощью sensors я убедился, что кулер действительно работает на минимальных оборотах. Устанавливается пакет так:
Выводит sensors примерно следующее:
Нынешний вывод, конечно же, отличается(тогда min=1500 RPM, а значения max вообще не было). Вывод навел меня на мысль, что раз уж есть значение min, то стало быть его можно задать. После нескольких часов гугления и раскуривания манов, я таки наткнулся на статью(какую уже не вспомню), что конфиги кулера можно найти здесь, данные о температуре:
А минимум выставляется здесь:
Кстати, хранится в этой директории множество полезностей, в частности, информация о температуре, которая тоже пригодилась.
Наткнувшись на такую находку, я проверил свою теорию, изменил значение на более высокое и через мгновение услышал, что кулер «зашевелился». Это обнадежило, получалось, что все не так уж и плохо. Оставалось лишь автоматизировать весь процесс и навсегда забыть о перегревах. Тогда для меня было проще всего написать программу на си. Исходники у меня, к сожалению, потерялись, но если вдруг они кого-то заинтересуют, то я постараюсь их написать по памяти. А теперь к самому процессу.
Для начала я извлек данные из
Спасибо за внимание.
Разумеется, сразу после установки никакой магии не случилось и весь шаманский обряд пришлось проводить самому. Для начала, с помощью sensors я убедился, что кулер действительно работает на минимальных оборотах. Устанавливается пакет так:
#apt-get install lm-sensors
Выводит sensors примерно следующее:
$ sensors
applesmc-isa-0300
Adapter: ISA adapter
Exhaust : 4957 RPM (min = 4992 RPM, max = 6200 RPM)
TB0T: +24.2°C
TC0D: +49.2°C
TC0P: +47.0°C
TM0P: +47.8°C
TN0P: +47.0°C
TN1P: +46.5°C
TTF0: +70.0°C
Th0H: +45.0°C
Th0S: +44.8°C
Th1H: +44.8°C
Ts0P: +40.8°C
Нынешний вывод, конечно же, отличается(тогда min=1500 RPM, а значения max вообще не было). Вывод навел меня на мысль, что раз уж есть значение min, то стало быть его можно задать. После нескольких часов гугления и раскуривания манов, я таки наткнулся на статью(какую уже не вспомню), что конфиги кулера можно найти здесь, данные о температуре:
/sys/devices/platform/applesmc.768/
А минимум выставляется здесь:
/sys/devices/platform/applesmc.768/fan1_min
Кстати, хранится в этой директории множество полезностей, в частности, информация о температуре, которая тоже пригодилась.
Наткнувшись на такую находку, я проверил свою теорию, изменил значение на более высокое и через мгновение услышал, что кулер «зашевелился». Это обнадежило, получалось, что все не так уж и плохо. Оставалось лишь автоматизировать весь процесс и навсегда забыть о перегревах. Тогда для меня было проще всего написать программу на си. Исходники у меня, к сожалению, потерялись, но если вдруг они кого-то заинтересуют, то я постараюсь их написать по памяти. А теперь к самому процессу.
Для начала я извлек данные из
/sys/devices/platform/applesmc.768/temp2_input
. Значение температуры там задано умноженным на 1000, так что в программе было уместно использовать целочисленный тип. После чего нужно было, основываясь на полученных данных, поправить значение в /sys/devices/platform/applesmc.768/fan1_min
. В программе это действие реализовывлось так: создавался sh файл, в который записывалась строка в формате echo 5274 | sudo tee /sys/devices/platform/applesmc.768/fan1_min
, где 5724, количество оборотов, зависящее от температуры процессора. Теперь подробнее об этой зависимости. Мне сразу пришло в голову менять их в зависимости от процента нагревания. То есть я выбрал нормальную температуру процессора(около 42 градусов), сравнивал текущее значение с выбранным, переводил в проценты и увеличивал количество оборотов кулера ровно на столько же процентов, не забыв о минимальном значении оборотов(в моем случае 1500). Бесконечный цикл я реализовал внутри программы, но этот вариант мне не понравился, так как нагружал проц, поэтому было решено запускать программу sh скриптом каждые 6 секунд. Завершающим этапом было записать все в крон так, чтобы «контроллер» загружался вместе с системой. На этом все. Надеюсь, что кому-то пост принесет пользу. Спасибо за внимание.