PM-приостановить против systemctl приостановить?

10

Для дистрибутивов Linux, использующих systemd, есть ли практическая разница между этими двумя командами?

  • systemctl suspend
  • pm-suspend

Что я должен использовать или предпочитать?

Эван Кэрролл
источник

Ответы:

16

Короче говоря, вы должны предпочитать режим приостановки, встроенный в ваш дистрибутив. Для дистрибутивов, которые поставляют systemd, это типично systemctl suspend.

Например, вики Linux Arch говорит :

systemd предоставляет собственные команды для приостановки, гибернации и гибридной приостановки, подробности см. в разделе «Управление питанием с помощью systemd». Это интерфейс по умолчанию, используемый в Arch Linux.

И для Debian Джесси :

С systemd, pm-utilsи его перехватчики больше не используются, вместо этого есть systemd-suspend.


Причина, по которой вы хотите придерживаться того, что использует ваш дистрибутив, заключается в том, что их пакеты, которые заботятся о приостановке / возобновлении, будут поставлять скрипты ловушек, которые интегрируются либо с pm-utils( /usr/lib/pm-utils/sleep.d), либо systemd( /usr/lib/systemd/system-sleep/), поэтому вы должны использовать один и тот же интерфейс, чтобы иметь все нужные крючки работают как положено.

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


Оба pm-suspendи systemd-suspendобычно используют одни и те же интерфейсы, чтобы фактически перевести компьютер в спящий режим.

Оба по умолчанию используют драйвер приостановки ядра (записывая в /sys/power/state) и оба поддерживают внешние драйверы приостановки (например uswsusp, см. Здесь для получения подробной информации о том, как подключить его к systemd.)

Они оба поддерживают файлы конфигурации и скрипты ловушек, которые вызываются в процессе приостановки или возобновления, основное отличие заключается в расположении файлов (API ловушек очень похож):

  • pm-utilsчитает его конфигурацию из файлов /etc/pm/config.dи выполняет перехваты из обоих /etc/pm/sleep.dи /usr/lib/pm-utils/sleep.dкаталогов.
  • systemd-suspendчитает его конфигурацию из /etc/systemd/sleep.confфайла (или файлов в sleep.conf.dкаталоге) и выполняет перехваты из /usr/lib/systemd/system-sleep/.

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

Но systemd идет дальше в своей поддержке suspend / hibernate / resume, так как:

  • Вы можете подключить системные модули к процессу приостановки / возобновления, например, запустив их перед приостановкой или после возобновления. (Вы можете найти отличные рецепты здесь .)
  • systemd поддерживает интерфейс D-Bus, поэтому можно инициировать приостановку с помощью вызова D-Bus, а не с помощью команды (хотя запуск systemctl suspendвсе же, конечно, вариант.) Обычно запуск приостановки через D-Bus, а не с помощью команды полезно из рабочего стола.
  • systemd имеет расширенный интерфейс для уведомления и задержки приложений в пользовательском пространстве, которые приостанавливают работу во время выполнения операций, интерфейс ингибитора , который является более гибким и удобным, чем сценарии ловушек. (На самом деле, systemd рекомендует использовать этот интерфейс, а не подключать скрипты всякий раз, когда это возможно.)

Таким образом, несмотря на то, что и то, pm-utilsи другое systemd-suspendобеспечивает реальное приостановление работы системы примерно одинаковыми способами, интеграция с другими компонентами системы делает так, что важно, какой из них называется ... А в дистрибутивах, поставляющих systemd, systemctl suspendобычно право позвонить.

filbranden
источник
1
Это действительно отличный ответ, который охватывает все основы. Спасибо за фон! Я не вижу Xubuntu, использующего pm-suspend, поэтому, возможно, в предсистемные дни я установил его и никогда не удалял, и я был единственным, кто использовал его. Debian отлично справляется с задачей, сообщая вам, когда есть новый способ что-то сделать.
Эван Кэрролл
1
+1. Играл ли systemctl роль в проблемах, с которыми я здесь столкнулся? unix.stackexchange.com/questions/435168/… ?
Тим
1
Интересно, что Ubuntu 18.04 не pm-utilsустановлен по умолчанию и, похоже, на него полагается systemctl, но в нем /usr/lib/pm-utils/sleep.d/есть что-то и /usr/lib/systemd/system-sleep/его нет. Тем не менее, я вижу /lib/systemd/system-sleep/и еще несколько /snap/, все из которых имеют один или два файла в них.
Изката