Pm-utils (Русский)

From ArchWiki
Jump to: navigation, search

Tango-preferences-desktop-locale.pngЭта страница нуждается в сопроводителеTango-preferences-desktop-locale.png

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

pm-utils — инфраструктура управления питанием нового поколения, которая была разработана как замена набору скриптов из пакета powersave

pm-utils представляет собой коллекцию скриптов для взаимодействия с подсистемой управления питания ядра. Скрипты позволяют облегчить задачу управлением питания для различного оборудования, в том числе за счет возможности указания отдельных сценариев для случая, когда драйверы оборудования содержат ошибки, или, вообще, не имеют собственного функционала по управлению питанем. Коллекция скриптов является свободно модифицируемой. Изменения могут вноситься как вручную - администратором системы, так и автоматически - в результате установки/удаления отдельных пакетов программ, функционирование которых зависит от изменения режимов питания оборудования.

Также существует менее распространенный инструмент, имеющий схожую функциональность: Laptop Mode Tools

Совместно с acpid и cpufrequtils pm-utils представляет собой полноценный инструмент управления питанием ноутбука / стационарного компьютера.

Основные функциональные возможности

Концепция очень проста: основной скрипт (pm-action, вызываемый через символическую ссылку как pm-suspend или pm-hibernate) выполняет так называемые “hooks”, скрипты, расположенные в /etc/pm/hooks в алфавитном порядке, с параметрами suspend (suspend to RAM) или hibernate (suspend to disk). Как только все “hooks” сделаны, компьютер отправляется в “сон”. После того, как машина снова пробудилась, все “крюки” выполняются в обратном порядке с параметром resume (resume from RAM) или thaw (resume from disk). “Крюки” делают различные вещи, например, готовят bootloader, останавливают подсистему bluetooth или выгружают критические модули.

Обычно pm-suspend и pm-hibernate вызываются HAL’ом, который в свою очередь вызывается апплетами Рабочего Стола, такими как gnome-power-manager или kpowersave (powerdevil).

Установка

Пакет pm-utils доступен в репозитории Extra

# pacman -S pm-utils
Примечание: Если у вас возникли проблемы в работе с видеоадаптером после выхода из энергосберегающего режима, возможно, вам будет необходимо установить vbetool из [extra].
Примечание: Если вы настраиваете систему "с нуля", убедитесь в том, что установлен пакет acpi.

Для проверки можно выполнить команду pm-suspend или pm-hibernate от имени пользователя root. Процесс выполнения соответствующих скриптов заносится в журнал /var/log/pm-suspend.log.

Конфигурация

Hibernation (suspend2disk)

Чтобы гибернация заработала, необходимо отредактировать файл /boot/grub/menu.lst от root и добавить resume=/path/to/swap/drive (напрмиер, /dev/sda2) в опции ядра, напрмиер:

# (0) Arch Linux
title  Arch Linux
root   (hd0,0)
kernel /vmlinuz26 root=/dev/sda3 resume=/dev/sda2 ro vga=0
initrd /kernel26.img

Если вы используете UUID для устройств, восопльзуйтесь следующим примером:

# (0) Arch Linux
title  Arch Linux
root   (hd0,0)
kernel /vmlinuz26 cryptdevice=/dev/sda2:main root=/dev/mapper/main-root resume=/dev/disk/by-uuid/1d893194-b151-43cd-a89e-6f89bd8b9f99 ro
initrd /kernel26.img

Дополнительные настройки

Основной файл конфигурации — /usr/lib/pm-utils/defaults. Дополнительные файлы могут быть расположены в /etc/pm/config.d. Необходимо отметить, что файлы конфигурации и скрипты должны быть исполняемыми файлами (иметь установленный бит “x”).

Переменные в /etc/pm/config

   SUSPEND_MODULES=”button uhci_hcd” # список модулей, которые должны быть выгружены до остановки

Поиск неисправностей

Если suspend или hibernate не сработают корректно, вы вероятно сможете найти некоторую информацию в лог-файле /var/log/pm-suspend.log, например, какие hook'и были запущены и каков был их выход.

Создание собственных hook'ов

Если вы хотите сделать нечто специфического во время выполния suspend/hibernate, вы можете легко поместить ваш собственный скрипт в /etc/pm/hooks. Скрипты в этой директории будут вызываться по очереди в алфавитном порядке во время выполнения suspend (в этом причина того, что их название начинается с двух цифр, чтобы сделать порядок выполнения более явным) и в обратном порядке во время выполнения resume.

Для демонстрации приведём довольно бесполезный скрипт, который просто поместит некоторую информацию в ваш лог-файл:

#!/bin/sh
 case $1 in
   hibernate)
   echo “Hey guy, we are going to suspend to disk!”
   ;;
   suspend)
   echo “Oh, this time we’re doing a suspend to RAM. Cool!”
   ;;
   thaw)
   echo “Oh, suspend to disk is over, we are resuming…”
   ;;
   resume)
   echo “Hey, the suspend to RAM seems to be over…”
   ;;
   *) echo “somebody is calling me totally wrong.”
   ;;
esac

Поместите его в /etc/pm/hooks/66dummy, сделайте chmod +x /etc/pm/hooks/66dummy и оно будет помещать некоторые ссобщения в течение работы suspend/resume.

Внимание: Все скрипты запускаются от пользователя root. Это означает, что вы должны быть осторожны, создавая временные файлы, проверьте, чтобы переменные PATH были установлены корректно и т.д., чтобы избежать проблем с безопасностью.

Устранение неисправностей

  • Некоторые ноутбуки могут входить в спящий режим слишком медленно (до пяти минут). Одной из причин может быть некорректная работа встроенного Wi-Fi-модуля. Вы можете убедиться в этом, если отключите его в BIOS и попробуете войти в спящий режим еще раз.
  • Бывает, что после пробуждения не включается bluetooth.

Bluetooth
Кроме аппаратного отключения данных беспроводных модулей с помощью кнопки на панели ноутбука, существует также программное отключение. Мониторинг состояния и программный контроль работы беспроводных устройств осуществляется с помощью rfkill. Таким образом, для корректного входа и выхода из спящего режима в данном случае необходимо программно выключать и включать устройства. Сделаем это для Bluetooth: создадим специальный скрипт. Устанавливаем rfkill, если он еще не установлен.

# pacman -S rfkill

Создадим пустой файл с именем 10_wireless.

# touch /etc/pm/sleep.d/10_wireless

Присвоим ему соответствующие права:

# chmod 0755 /etc/pm/sleep.d/10_wireless

И отредактируем, добавив в него следующий скрипт:

# nano /etc/pm/sleep.d/10_wireless
#!/bin/bash

. /usr/lib/pm-utils/functions

case "$1" in
    hibernate|suspend)
    rfkill block bluetooth
    ;;
    thaw|resume)
    rfkill unblock bluetooth
    ;;
    *)
    ;;
esac

exit

Как вы могли заметить, скрипт в процессе работы вызывает выполнение команды rfkill (un)block bluetooth, то есть выключает/включает bluetooth. За подробностями обратитесь к man rfkill.

Wifi
Для того, чтобы ноутбук переходил в спящий/ждущий режим быстро (а не в течение 5 минут), и, что немаловажно, возобновлял работу с сетью, нужно создать конфигурационный файл и добавить в него несколько модулей: Копируем файл конфигурации по умолчанию:

# cp /usr/lib/pm-utils/defaults /etc/pm/config.d/config

Присваиваем право на исполнение:

# chmod +x /etc/pm/config.d/config

В данном случае используется драйвер b43 и нам необходимо выгрузить его модули. Выясним, какие модули он использует:

$ lsmod | grep b43
b43                   316457  0 
ssb                    48367  1 b43
mmc_core               73353  2 b43,ssb
pcmcia                 36097  2 b43,ssb
mac80211              216021  1 b43
cfg80211              160740  2 b43,mac80211

Далее нам нужно добавить проблемные модули в секцию SUSPEND_MODULES.

# nano /etc/pm/config.d/config

Пример секции:

/usr/lib/pm-utils/defaults
# If you need to unload any modules to suspend/resume, add them here.
SUSPEND_MODULES="button uhci_hcd b43 mac80211 cfg80211 bluetooth"

Различные tips & tricks

Вызов suspend вручную

Если вы хотите вызвать suspend вручную для отладки, без использования HAL или других структур, вызывайте pm-suspend или pm-hibernate от имени пользователя root.

Внимание: Это полезно для отладки. И было бы хорошо, если бы вы знали, что делаете, используя это.

Использования suspend-to-RAM на машинах, не входящих в whitelist s2ram

Если вы хотите вызвать suspend-to-RAM, вам необходимо добавить -f к переменной S2RAM_OPTS в /etc/pm/config. Вы также должны поместить все другие варианты, которые вам необходимы, в эту переменную. Например:

S2RAM_OPTS=”-f -a 3″

Это может быть хорошей идеей, чтобы сообщить о вашей машине, как о прописанной в S2RAM-Page, так чтобы вам не пришлось этого делать в дальнейшем.

Отключение “hook'а”

Если вам не нравится, как работает “крюк”, или он бесполезен, или даже вреден, мы бы оценили bugreport от вас по этому поводу. Вы можете однако просто отключить “крюк”, удалив бит “x” из файла при помощи

chmod -x /etc/pm/hooks/the_hook