Меню

Ubuntu регулировка скорости вентилятора ноутбука

Управление кулером Linux

Читаете, вы, сейчас эти строки и слышите равномерный, в меру громкий шум кулера. Однозначно слышите, иначе вас бы не заинтересовала эта статья. На самом деле громкая работа кулера в Linux довольно частая проблема недавно перешедших с Windows-пользователей. А ведь он не должен так шуметь.

В Windows, обороты вентилятора и многие другие параметры управляются автоматически в зависимости от нагрузки на систему и следовательно температуры оборудования, здесь же из коробки вентилятор всегда крутится на полную мощность, независимо от того, играете вы тяжелую игру, компилируете программу или просто просматриваете интернет страницы. Это нужно исправлять. В этой инструкции мы рассмотрим управление кулером Linux и настройку автоматической регуляции оборотов в зависимости от температуры.

Подготовка системы

Чтобы правильно управлять и ничего не спалить, ну на самом деле и ничего не сгорит, компьютер просто уйдет в перезагрузку, но все же… нам нужно знать температуру оборудования в данный момент. Для снятия показаний со всяких датчиков на материнской плате используется набор программ lm_sensors. Сначала настроим lm_sensors затем управление кулером linux.

Установка lm_sensors

Это, можно сказать, системный компонент, поэтому он есть в репозиториях всех дистрибутивов.

Для Ubuntu или Debian команда установки выглядит следующим образом:

sudo apt install lm-sensors

sudo yum installlm-sensors

Также для Gentoo в ядре необходимо будет включить следующие функции:

Device Drivers —>
-*- I2C support —>
I2C device interface
Hardware Monitoring support —>
//вообще говоря, лучше включить все драйвера оборудования а потом посмотреть какие загрузятся и отключить ненужные.
[M] Intel Core/Core2/Atom temperature sensor (coretemp)

Не забудьте пересобрать все пакеты с флагом lm_sensors

Настройка lm_sensors

Теперь нам нужно найти и записать информацию обо всех доступных сенсорах, для этого выполните:

После запуска команды нужно будет последовательно нажимать y, чтобы подтвердить сканирование следующей группы устройств, затем Enter:

Now follows a summary of the probes I have just done.
Just press ENTER to continue:

А потом опять y для сохранения собранной конфигурации в файл:

Do you want to overwrite /etc/conf.d/lm_sensors? Enter s to specify other file name?
(yes/NO/s):

Далее, добавляем сервис в автозагрузку:

sudo systemctl enable lm_sensors

sudo systemctl start lm_sensors

Уже можем посмотреть показания сенсоров:

В зависимости от драйвера здесь показаны не только температура, но и обороты кулера, а также напряжение. Но это не главное, у нас есть информация и мы можем переходить к следующему пункту.

Управление кулером Linux

Управление оборотами вентилятора linux выполняется с помощью сервиса fancontrol. Для установки в Ubuntu:

sudo apt install fancontrol

sudo yum install fancontrol

После установки переходим к настройке автоматического регулирования оборотов кулера. Сначала нужно программно связать каждый кулер с соответствующим ему датчиком температуры, и настроить допустимый уровень температур. Для этого выполните:

pwmconfig revision 6166 (2013-05-01)
This program will search your sensors for pulse width modulation (pwm)
controls, and test each one to see if it controls a fan on
your motherboard. Note that many motherboards do not have pwm
circuitry installed, even if your sensor chip supports pwm.
We will attempt to briefly stop each fan using the pwm controls.
The program will attempt to restore each fan to full speed
after testing. However, it is ** very important ** that you
physically verify that the fans have been to full speed
after the program has completed.

Сначала программа покажет доступные драйверы вентиляторов:

Found the following fan sensors:
hwmon1/device/fan1_input current speed: 3292 RPM
hwmon1/device/fan2_input current speed: 0 … skipping!
hwmon1/device/fan3_input current speed: 0 … skipping!

Здесь вы видите предупреждение о том что вентиляторы linux будут отключены на некоторое время (5 секунд), как прочитаете нажмите Enter. Дальше будет выполнено тестирование доступных скоростей кулера:

Testing pwm control hwmon1/device/pwm1 …
hwmon1/device/fan1_input … speed was 3292 now 1051
It appears that fan hwmon1/device/fan1_input
is controlled by pwm hwmon1/device/pwm1
Would you like to generate a detailed correlation (y)? y
Note: If you had gnuplot installed, I could generate a graphical plot.
PWM 255 FAN 3276
PWM 240 FAN 3169
PWM 225 FAN 3026

Дальше настроим максимальную, минимальную и рабочую температуры, сначала выберите кулер, например 1:

Select fan output to configure, or other action:
1) hwmon1/device/pwm3 3) Change INTERVAL 5) Save and quit
2) hwmon1/device/pwm1 4) Just quit 6) Show configuration

Теперь выберите датчик температуры для этого кулера:

Теперь укажите температуру, при которой вентилятор linux будет вращаться на минимальной скорости:

Enter the low temperature (degree C)
below which the fan should spin at minimum speed (20): 45

Затем температуру, при которой нужно переходить на максимальные обороты:

Enter the high temperature (degree C)
over which the fan should spin at maximum speed (60): 60

Далее, нужно указать минимальное значение оборотов pwm, можно узнать нажав кнопку t

Enter the minimum PWM value (0-255)
at which the fan STOPS spinning (press t to test) (100):2

Какое значение pwm использовать если температура превышает минимальную, по сути, это рабочие обороты:

Enter the PWM value (0-2) to use when the temperature
is below the low temperature limit 100

Какое значение использовать при превышении максимальной температуры:

Enter the PWM value (2-255) to use when the temperature
is over the high temperature limit (255): 255

Готово теперь, остается настроить таким же образом другие кулеры, если у вас их несколько и можно сохранять:

Select fan output to configure, or other action:
1) hwmon1/device/pwm3 3) Change INTERVAL 5) Save and quit
2) hwmon1/device/pwm1 4) Just quit 6) Show configuration
select (1-n): 5

Читайте также:  Регулировка тросика газа газель бизнес

Сохранить и выйти под номером 5. Добавте fancontrol в автозагрузку:

sudo systemctl enable fancontrol

sudo systemctl start fancontrol

Чувствуете? тишина… теперь fancontrol управляет вашими кулерами и шума без надобности больше не будет.

Ручное управление оборотами кулера

Меня всегда интересовало, как вручную выключить кулер. Сразу забегая на перед скажу, что ничего не сгорит, температура просто будет плавно расти. Если запущен fancontrol останавливаем, чтобы не мешал:

sudo systemctl stop fancontrol

Смотрим доступные устройства:

ls /sys/class/hwmon/hwmon1/device/ | grep pwm

Здесь pwm1, pwm2.. это файлы кулеров. Разрешаем ручное управление вентилятором linux, например, для pwm1:

echo 1 >>/sys/class/hwmon/hwmon1/device/pwm1_enable

Включаем на полную:

echo 255 >> /sys/class/hwmon/hwmon1/device/pwm1

А теперь на минимум:

echo 0 >> /sys/class/hwmon/hwmon1/device/pwm1

Выводы

Теперь вы достаточно знаете и управление кулером не вызовет у вас проблем. Вы можете заставить свой компьютер или ноутбук не шуметь и не мешать вам спать ночью. В современных системах это вовсе может не понадобится, там кулером управляет UEFI и не допускает того чтобы он крутился быстрее, чем это необходимо. Если остались вопросы, пишите их в комментариях!

Источник

Управление кулером в системе Linux

Эта функциональность зависит как от вашего оборудования, так и от программного обеспечения. Если ваше оборудование не поддерживает управление скоростью вращения вентилятора или не отображает их в ОС, очень вероятно, что вы не сможете использовать это решение. Если это так, но программное обеспечение (как ядро) не знает, как его контролировать, вам не повезло.

Но, если все в порядке то мы может приступить к тому, чтобы рассказать вам как управлять кулером в Linux.

Установка LM-Sensors

Установите lm-sensors и пакеты fancontrol.

Или с помощью команды для установки LM-Sensors в системе Ubuntu или Debian:

sudo apt-get install lm-sensors

sudo yim installlm-sensors

Для Gentoo нужно использовать эту команду:

Настройка lm-sensors

Управление кулером в Linux является очень простым. Но, перед эти нужно правильно установить и настроить программное обеспечение.

Введите «Yes», чтобы обнаружить датчики, вставить эти модули в / etc / modules или отредактировать / etc / modules самостоятельно.

Запустите sudo service module-init-tools restart. Это действие прочитает изменения, внесенные вами в / etc / modules на шаге 3, и вставьте новые модули в ядро.

Примечание. Если вы используете Ubuntu 13.04 или выше, эта команда 3-го шага должна быть заменена запуском sudo service kmod start.

Установка Fancontrol

Управление оборотами вентилятора вашего кулера происходит с помощью специальной программы. Эта программа очень просто устанавливается. Делается это также через командную строку как и в способе выше. Чтобы установить программу для операционной системы Ubuntu или Debian, нужно использовать эту команду:

sudo apt-get install fancontrol

для Fedora или RedHat

Настройка Fancontrol

В терминале типа sudo pwmconfig. Этот скрипт остановит каждый вентилятор в течение 5 секунд, чтобы узнать, какие вентиляторы можно контролировать, с помощью ручного управления PWM. После того, как скрипт будет проходить через все вентиляторы, вы можете настроить, какой вентилятор соответствует температуре.

В моем случае я установил интервал до 2 секунд. Если говорить про управление кулером в Linux то можно отметить автозапуск настроек. Об этом мы поговорим в следующем пункте нашего руководства.

Настройка службы fancontrol

Запустите sudo service fancontrol start. Это также приведет к автоматическому запуску службы fancontrol при запуске системы. Это сделает управление кулером в Linux полностью автоматизированным после указанных настроек.

Ручное управление оборотами кулера

Если вы хотите организовать управление оборотами кулера через терминал вручную, каждый раз вводя команду — то, мы расскажем как это сделать. Для начала введите команду для отключения Fancontrol:

sudo systemctl stop fancontrol

Далее просмартиваем список доступных устройств и выбираем нужное:

$ ls /sys/class/hwmon/hwmon1/device/ | grep pwm

Здесь будет значение pwm1 или pwm2 — это файлы кулеров. Далее, нужно разрешить ручное управление вентилятором Linux, например для pwm2:

Включаем кулер на всю мощь с помощью этой команды:

а теперь давайте сведем обороты в стандартный режим:

Выводы

Управление кулером в Linux является очень простым. Мы рассказали как это можно сделать с помощью программ самостоятельно через терминал. Но, если у вас есть вопросы — задавайте их в комментарии. Перед написание обязательно укажите каким дистрибутивом вы пользуетесь.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Управляем вентилятором ноутбука через DSDT в Linux и не только

Не знаю почему, но я всегда воспринимал системы охлаждения в ноутбуках как некий закрытый черный ящик. Тупость алгоритмов, по которым вентилятор начинал надрывно завывать при еще вполне холодном процессоре, изрядно раздражала во многих ноутбуках, но мне казалось, что все параметры там производители прибили гвоздями и поменять их можно разве что расковыряв BIOS или вообще только вставив какие-нибудь регулируемые резисторы в нужных местах. Ни тем, ни другим мне заниматься совершенно не хотелось, поэтому я об никогда всерьёз даже не задумывался.

Нет, конечно, я слышал про всякие программы, которые могут вмешиваться в управление охлаждением и вроде кто-то ими успешно пользуется, но лично мне с ними вечно не везло, точнее не везло с железом, на котором я пытался их завести. Например, какое-то время назад я пробовал настроить fancontrol на довольно старом ноутбуке HP nc8430 с Убунтой. В итоге, известный скрипт sensors-detect не смог найти ни одного вентилятора в системе, а без этого fancontrol не работает. На разных форумах периодически появляются люди с похожими проблемами, но никто им толком помочь не может.

Тогда я в очередной раз забросил эту тему и вернулся к ней только на днях, когда читал обзоры, подыскивая себе новый ноутбук, и уже вроде бы выбрал почти всем хороший Sony S15, как опять в одном из обзоров читаю про него, что вентилятор в нем вообще не останавливается никогда, даже когда точно можно. Постоянно шумящий ноутбук я больше не хочу, а выбирать как всегда особо не из чего, учитывая, что надо 15″, что TN матрицу я тоже больше не хочу, и бюджет ограничен. Ну сами знаете, как оно бывает. Может быть на нем все-таки заведется fancontrol и все будет хорошо, но а если нет? Никаких отчетов по его установке на этот ноутбук найти не удалось. Это побудило меня еще раз копнуть тему программного управления вентиляторами и пройти довольно непростой, но очень увлекательный квест.

Читайте также:  Регулировка холостого хода на пиле хускварна 236

Как оно в Windows

Я решил, что если мне удастся разобраться с охлаждением моего HP, то и с новым Sony скорее всего справлюсь. Если нет, придется искать другой ноутбук. Погуглив немного, удалось узнать, что под Windows есть замечательная программа Notebook Hardware Control, она бесплатная, её все хвалят. Что же, надо попробовать. Перезагрузился в Windows, скачал, запустил – программа действительно работает. Можно задать температуры, при которых вентилятор будет выключен совсем, работать на низких оборотах, средних и высоких, а самое главное можно задать мощности моторчика вентилятора в процентах для всех трех режимов. Именно мощности, а не обороты в секунду, но какая разница.

Оказалось, что в этом ноутбуке по умолчанию самым низким оборотам соответствует 55% мощности. Т. е. либо вентилятор молчит совсем, либо довольно громко гудит на своих 55%, а при повышении температуры еще громче: 70%, 80% и 100%. При этом молчит он только до 50 градусов, а потом сразу начинает работать. Процессор стоит довольно горячий – Core 2 Duo T7600, меньше 50 градусов он бывает только сразу после включения, потом температура быстро становится выше, даже при нулевой нагрузке, и уже ни в какую не хочет опускаться ниже 50 C, только если раскрутить вентилятор на полную и оставить так на несколько минут, и то когда в комнате не очень жарко. На дефолтных 55% у вентилятора просто нет никаких шансов охладить процессор обратно ниже 50 С. Хотя может быть надо просто попробовать термопасту поменять, но сейчас речь не об этом.

С помощью программы я просто установил минимальную мощность равной 30% и поднял минимальную температуру, при которой включается вентилятор до 60 С. Температура корпуса при этом на ощупь почти не изменилась, как было довольно горячо, так и осталось, а вот тише стало намного. Днем вентилятор на 30% мощности можно услышать только если поднести к нему ухо. Ночью в тихой комнате его вполне слышно, но терпимо. Это гораздо лучше, чем было. Если еще чуть-чуть поднять минимальную температуру и перевести процессор и видеокарту в режим энергосбережения, можно получить абсолютно тихий ноутбук, только жесткий диск слышно как вращается, но это решается только заменой его на SSD, что вобщем-то в любом случае хорошо бы сделать. Короче, оказывается возможность полностью контролировать температуру и шум есть. Тут бы и сказочки конец, но это же под Windows, а мне надо под Linux!

Как оно под Linux

Под Linux такой программы нет. И как она работает, я честно говоря до сих пор до конца не понимаю, а на тот момент я там только подсмотрел ключевые слова, которые потом очень пригодились: ACPI и DSDT. К ним я еще вернусь позже. А пока, я перезагрузился обратно в Ubuntu и начал внимательно изучать предварительно нагугленный путь в sysfs: /sys/class/thermal. Там оказалось вот что:

Целых 10 cooling_devices и 6 thermal_zones. С термальными зонами более менее все ясно, температуры CPU, GPU, какие-то еще три точки, не особо важно. А последняя thermal_zone5 – это вовсе не температура, как выяснилось опытным путем, а текущая мощность вентилятора. Браво HP! Теперь понятно почему sensors-detect ничего не нашел, тут такой бардак, что черт ногу сломит. Вот так вот просто записав какое-нибудь число в thermal_zone5/temp поменять мощность нельзя. Файл только для чтения, оно и понятно.

Теперь посмотрим на cooling_device*, зачем их 10? Внутри каждой папки примерно вот такое содержание:

В файлах type для cooling_device c 0 по 6 написано Fan, в 7-8 — Processor, а в 9 — LCD. Хм, я точно знаю, что у меня в ноутбуке только один вентилятор. Процессоров, можно сказать, действительно два и есть один LCD экран, это правда. Но это же не cooling devices, зачем они тут? Ладно, будем пробовать разбираться дальше в этом бардаке. В файлах cur_state бывает либо 0, либо 1. Ага, похоже на какую-то такую развесистую битовую маску. Если попробовать во все cur_state записать нули с помощью «echo 0 | sudo tee /sys/thermal/cooling_device*/cur_state», то вентилятор остановится. А если записать единицу в cooling_device3/cur_state, то вентилятор закрутится на 55%. Ура, у меня получилось управлять вентилятором вручную в Убунте. Тут бы можно было бы сколхозить какой-нибудь демон на Питоне, который бы ставил нужные мощности при определенных температурах, но во-первых, так можно установить только «стандартные» мощности из набора 0, 55, 70, 80, 100, а мне теперь надо 30. А во-вторых, что-то же еще в системе меняет эти биты. Надо бы попробовать разобраться, что именно этим занимается и как на это можно влиять. Иначе говоря, «we have to go deeper». Тут я вспомнил про первое ключевое слово подсказанное той программой под Windows: ACPI.

Вроде есть такой демон в Убунте acpid. Может это он управляет всем этим? Но нет, судя по описанию он только следит за нажатием на кнопку выключения, опусканием крышки и всем таким прочим. И действительно, даже если его остановить, вентилятор продолжит работать как ни в чём не бывало, точно также меняя мощность в зависимости от температуры. Но я же видел в той программе, что в ACPI есть много чего, в том числе некая таблица DSDT (Differentiated System Description Table), которая на самом деле не совсем таблица, а скорее код на языке, который называется AML (ACPI Machine Language). Точнее, код пишется на ASL (ACPI Source Language), а потом компилируется в AML, т. е. AML — это байт-код, его, в свою очередь, легко декомпилировать обратно в ASL. Надеюсь я вас не запутал, уважаемые читатели. Кроме DSDT есть и другие таблицы — SSDT и т.д., в них тоже AML-код и данные, но самое интересное обычно содержится в DSDT. В коде этих таблиц находится описание всех устройств компьютера и алгоритмы управления их питанием, в том числе, конечно же, и вентилятора.

Читайте также:  Двигатель а 01 алтаец регулировка клапанов

Раз есть байт-код, значит где-то должен быть интерпретатор, который будет его исполнять. И действительно, ядро каждой ОС, которая поддерживает ACPI, должно содержать виртуальную машину для выполнения AML-кода DSDT и других таблиц. Есть она и в Linux. Вот и нашлось то, что меняет эти битики в файлах cur_state, это само ядро.

При этом могут вылезти ошибки и предупреждения, причем в тех строках, которые вы и не трогали. Все говорят, что происходит это потому что почти все производители биосов пользуются компилятором от Microsoft, а он просто игнорирует многие ошибки, интеловский гораздо строже. Но у меня есть версия, что программисты просто отказываются нормально писать на этом дурацком языке. Помимо прочего, я в своем DSDT нашел довольно досадную опечатку в названии метода, который возвращает текущий уровень подсветки экрана из-за этого ядро при загрузке всегда ругалось «[Firmware Bug]: ACPI: No _BQC method, cannot determine initial brightness», и при выходе из сна настройки подсветки всегда сбивались. Так что даже если с охлаждением у вас все в порядке, повод посмотреть на свой DSDT все равно есть. В сети полно рецептов, как исправлять те или иные ошибки в DSDT, здесь я не буду на этом подробно останавливаться.

Получается, что если мы можем декомпилировать, редактировать и компилировать обратно в байт-код DSDT и другие таблицы, то мы можем делать всё что угодно с питанием любых устройств. Теперь надо только как-то подсунуть ядру патченный DSDT. Делать это опасно, можно что-нибудь сжечь по неосторожности, поэтому 100 раз подумайте нужно ли оно вам, прежде чем делать что-либо из описанного ниже.

Как заставить ядро выполнять пропатченный DSDT

Весь AML-код хранится в BIOS и ядро, по умолчанию, берет его оттуда. Первое, что приходит в голову, сделать свой образ BIOS с патченной DSDT и прошить его. Риск получить кирпич очень велик, зато при удачном исходе все изменения будут доступны сразу во всех ОС, которые вы используете. Но, конечно, есть способы получше и побезопаснее.

Перед тем, как писать эту статью поискал, что есть на Хабре на эту тему и очень позавидовал тому, как просто это делается во FreeBSD.
Для Linux во всяких HowTo чаще всего советуют пересобрать ядро из исходников интегрировав туда свой DSDT. Таких инструкций много, там ничего сложного, на Хабре тоже про это есть, так что не буду про это ещё раз.

Раньше, до версии ядра 2.6, был удобный способ загрузки через initrd, но потом пришел Линус и сказал, что так делать плохо, а надо либо хорошо, либо никак, и способ убрали. Линусу придется поверить, раз он говорит, что так надо, значит надо.
Говорят, что ещё можно через GRUB2 ядру передать нужный DSDT. Ядро мне пересобирать очень не хотелось и я решил попробовать. Сначала я прописывал в конфиг груба только DSDT, у автора той статьи так работало, но ядро вообще его не грузило, в логе было примерно следующее:

Соответственно, ACPI вообще не работал. Страшное дело, между прочим. Wi-fi у меня при этом не работал, кнопка выключения выключала все сразу, а не запускала нормальный shutdown. Короче, пользоваться совсем нельзя. Потом я еще попробовал вообще все таблицы передать в параметрах, получилось так:

На этот раз была попытка загрузить DSDT, но там видимо есть какая-то ссылка на таблицу FACS, которую в данном окружении не получается разрешить. Немного помучившись с этим, раз 20 перезагрузив систему, мне так и не удалось заставить все работать этим способом. Плюнув на всё, поставил пересобираться ядро и лег спать, с утра все заработало как надо:

Можно было бы открывать шампанское и праздновать успех, но в голове свербила мысль, что можно же сделать как-то лучше. Ведь та программа под Windows позволяла все менять вообще на ходу. Оказывается и в Linux так тоже можно сделать, вот документация. Об этом способе на форумах почти не пишут, а способ на самом деле замечательный. Обычно-то и надо переопределить один-два метода, а если при этом ещё и перезагружаться не надо, то это же вообще красота.

Исходники ядра у меня уже были, поэтому по инструкции я собрал, поставил и включил модуль custom_method. Теперь все работало просто прекрасно.

Осталось как следует, а не по диагонали почитать спецификацию ACPI на досуге и подумать, что еще можно улучшить в ноутбуке. Программных проблем в системах охлаждения ноутбуков я теперь точно не боюсь. Надеюсь, что и вы теперь тоже, если вдруг боялись раньше.

Источник