Содержание
В этой статье я хочу рассказать, как автоматизировать процесс перевода вашего ноутбука/нетбука из режима питания от сети в автономный режим и обратно, не используя каждый раз что-нибудь на подобии PowerTop и других утилит. Всё, что вам понадобится, это желание продлить время работы от батареи, консоль, текстовый редактор (я рассматриваю в качестве примера Gedit для среды Gnome и Kate для KDE, но вы можете использовать свой). И так, начнём!
Для начала, прошу прочитать эти 2 статьи:
Данные и решения, приведённые в этих инструкциях будут использоваться в данной статье.
1 метод (стандартный): Power.sh
В Ubuntu есть скрипт, который выполняется каждый раз, когда вы переключаете режимы питания (подключаете/отключаете сеть). Найти его можно в /etc/acpi/ Мы можем вписать в него инструкцию, которая будет применяться в момент смены режима.
В языке Bash имеется функция «on_ac_power», которая возвращает «true», если сеть подключена и «false» в обратном случае. Воспользуемся этим:
Конструкция №1.
if on_ac_power; then # выполняется, если компьютер питается от сети ## НАЧАЛО ## КОНЕЦ else # выполняется, если компьютер в автономном режиме ## НАЧАЛО ## КОНЕЦ fi
Надеюсь, вы прочитали ссылки, приведённые выше? Они нам сейчас понадобятся! Теперь откроем наш скрипт power.sh и внесём изменения:
sudo gedit /etc/acpi/power.sh
Для KDE:
sudo kate /etc/acpi/power.sh
Другие DE:
sudo nano /etc/acpi/power.sh
Вносим данную конструкцию сразу после строки «#!/bin/sh». Теперь, вносим в наш код команды из статьи «Оптимизация энергопотребления». В качестве примера привожу свой файл /etc/acpi/power.sh:
Содержимое файла /etc/acpi/power.sh
#!/bin/sh ####################################################### if on_ac_power; then # для питания от сетевого адаптера # модифицируйте для своей конфигурации ################################################# echo 1 > /proc/sys/vm/laptop_mode echo max_performance > /sys/class/scsi_host/host0/link_power_management_policy echo max_performance > /sys/class/scsi_host/host1/link_power_management_policy echo max_performance > /sys/class/scsi_host/host2/link_power_management_policy echo max_performance > /sys/class/scsi_host/host3/link_power_management_policy echo max_performance > /sys/class/scsi_host/host4/link_power_management_policy echo max_performance > /sys/class/scsi_host/host5/link_power_management_policy echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor echo ondemand > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor echo 0 > /sys/devices/system/cpu/sched_mc_power_savings echo 0 > /sys/module/snd_hda_intel/parameters/power_save echo 5 > /proc/sys/vm/dirty_background_ratio echo 6000 > /proc/sys/vm/dirty_writeback_centisecs echo default > /sys/module/pcie_aspm/parameters/policy ################################################# else ################################################# # параметры для автономной работы # модифицируйте для своей конфигурации ################################################# echo 5 > /proc/sys/vm/laptop_mode echo min_power > /sys/class/scsi_host/host0/link_power_management_policy echo min_power > /sys/class/scsi_host/host1/link_power_management_policy echo min_power > /sys/class/scsi_host/host2/link_power_management_policy echo min_power > /sys/class/scsi_host/host3/link_power_management_policy echo min_power > /sys/class/scsi_host/host4/link_power_management_policy echo min_power > /sys/class/scsi_host/host5/link_power_management_policy echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor echo powersave > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor echo 1 > /sys/devices/system/cpu/sched_mc_power_savings echo 10 > /sys/module/snd_hda_intel/parameters/power_save echo 1 > /proc/sys/vm/dirty_background_ratio echo 60000 > /proc/sys/vm/dirty_writeback_centisecs echo powersave > /sys/module/pcie_aspm/parameters/policy ################################################# fi ####################################################### test -f /usr/share/acpi-support/key-constants || exit 0 . /usr/share/acpi-support/policy-funcs if [ -z "$*" ] && ( [ `CheckPolicy` = 0 ] || CheckUPowerPolicy ); then exit; fi pm-powersave $*
Сохраняем изменения в файле. Всё! Теперь вы спокойной можете ожидать от своего ноутбука/нетбука прироста времени работы. В моём случае он составляет окло 20-30 минут.
Плюсы данного метода:
- Скрипт системный. Никакого лишнего мусора.
Минусы:
- Данный скрипт может не выполняться на некоторых машинах.
- Не выполняется при выходе из спящего и ждущего режимов.
2 метод: Switch Mode Power Supply (SMPS)
Этот метод разработан мной. Он является не «стандартным», но имеет некоторые преимущества. В этом методе мы будем использовать демон, который будет загружаться вместе с компьютером, висеть в памяти и проверять через каждые N секунд состояние адаптера. Собственно, сам демон:
Демон «Switch Mode Power Supply»
#!/bin/sh # Автор Кровавый # http://forum.ubuntu.ru/index.php?action=profile;u=58102 # скрипт распространяется по лицензии GPLver.2 # выходим из текущей консоли exec > /dev/null exec 2> /dev/null exec < /dev/null sleep 10; ##################################### # запускаем конфигуратор сразу, дабы выставить нужные параметры sh /etc/smps/smps_config.sh; ##################################### # получаем статус адаптера сейчас if on_ac_power; then StateOld="1"; else StateOld="0"; fi ##################################### # запускаем вечный цикл, проверяя, что сейчас и что в файле ( # если необходимо, чтобы на просто SIGTERM не реагировал # trap "" TERM while /bin/true; do # пауза, да бы не загружать процессор sleep 10; # статус адаптера на данный момент if on_ac_power; then StateNow="1"; else StateNow="0"; fi # сравниваем с новым if [ "$StateNow" != "$StateOld" ]; # переписываем состояние и меняем состояние в конфигурационных файлах then StateOld=$StateNow; sh /etc/smps/smps_config.sh; fi done ) & # форкнулись и на этом всё... работа демона завершена
Сам демон будет лежать в каталоге /usr/bin/, а настройки, которые он производит мы положим в /etc/smps/. Во-первых, так мы сможем исключить дублирование в коде демона, во-вторых, облегчим настройку.
Поместим нашего демона в /usr/bin/:
sudo mkdir /usr/bin/smps
sudo gedit /usr/bin/smps/smps.sh
Для KDE:
sudo kate /usr/bin/smps/smps.sh
Другие DE:
sudo nano /usr/bin/smps/smps.sh
Вписываем код в открывшееся окно и сохраняем изменения в файле. Теперь сделаем файл исполняемым:
sudo chmod +x /usr/bin/smps/smps.sh
Теперь создадим скрипт, который будет меня значения:
sudo mkdir /etc/smps
sudo gedit /etc/smps/smps_config.sh
Для KDE:
sudo kate /etc/smps/smps_config.sh
Другие DE:
sudo nano /etc/smps/smps_config.sh
В открывшееся окно вписываем в качестве первой строки «#!/bin/sh». А дальше конструкцию №1, добавив в неё свой код. У вас должно получиться что-то вроде этого:
Содержимое файла /etc/smps/smps_config.sh
#!/bin/sh ####################################################### if on_ac_power; then # для питания от сетевого адаптера # модифицируйте для своей конфигурации ################################################# echo 1 > /proc/sys/vm/laptop_mode echo max_performance > /sys/class/scsi_host/host0/link_power_management_policy echo max_performance > /sys/class/scsi_host/host1/link_power_management_policy echo max_performance > /sys/class/scsi_host/host2/link_power_management_policy echo max_performance > /sys/class/scsi_host/host3/link_power_management_policy echo max_performance > /sys/class/scsi_host/host4/link_power_management_policy echo max_performance > /sys/class/scsi_host/host5/link_power_management_policy echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor echo ondemand > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor echo 0 > /sys/devices/system/cpu/sched_mc_power_savings echo 0 > /sys/module/snd_hda_intel/parameters/power_save echo 5 > /proc/sys/vm/dirty_background_ratio echo 6000 > /proc/sys/vm/dirty_writeback_centisecs echo default > /sys/module/pcie_aspm/parameters/policy ################################################# else ################################################# # параметры для автономной работы # модифицируйте для своей конфигурации ################################################# echo 5 > /proc/sys/vm/laptop_mode echo min_power > /sys/class/scsi_host/host0/link_power_management_policy echo min_power > /sys/class/scsi_host/host1/link_power_management_policy echo min_power > /sys/class/scsi_host/host2/link_power_management_policy echo min_power > /sys/class/scsi_host/host3/link_power_management_policy echo min_power > /sys/class/scsi_host/host4/link_power_management_policy echo min_power > /sys/class/scsi_host/host5/link_power_management_policy echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor echo powersave > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor echo 1 > /sys/devices/system/cpu/sched_mc_power_savings echo 10 > /sys/module/snd_hda_intel/parameters/power_save echo 1 > /proc/sys/vm/dirty_background_ratio echo 60000 > /proc/sys/vm/dirty_writeback_centisecs echo powersave > /sys/module/pcie_aspm/parameters/policy ################################################# fi
Сохраняем изменения и даём права на исполнение:
sudo chmod -x /etc/smps/smps_config.sh
Теперь настроим запуск нашего демона при старте системы:
sudo gedit /etc/rc.local
Для KDE:
sudo kate /etc/rc.local
Другие DE:
sudo nano /etc/rc.local
Теперь добавьте перед строкой «exit 0» добавьте следующий код:
sh /usr/bin/smps/smps.sh
Сохраняем изменения в файле и перезагружаем компьютер. При следующей перезагрузке демон «Switch Mode Power Supply» будет запущен автоматически и будет каждые 10 секунд проверять состояние адаптера и, в случае, если оно изменилось с момента последней проверки, изменит параметры системы на установленные вами.
Плюсы данного метода:
- Постоянно проверяет состояние, гарантирует изменение режима в 99.9% случаях, в том числе, после выхода из спящего или ждущего режимов.
- Выполняется на всех операционных системах, где есть поддержка ACPI и Bash.
Минусы:
- Скрипт не системный, а значит займёт лишние ~70 килобайт вашей ОЗУ.
Заключение
И так, мы узнали, как можно автоматизировать процесс переключения между режимами электропитания, не прибегая к вводу команд в терминал при каждом отключении кабеля питания или запуску PowerTop. В моём случае, данные решения помогли облегчить мне жизнь и продлить жизнь моего ноутбука в автономном режиме с 1 часа 40 минут до 2 часов и нескольких минут в режиме сёрфинга по интернету и до 2 часов 30 минут в режиме просмотра HD видео в полно экранном режиме.
Для составления этой статьи использовались следующие ресурсы: