对于使用 systemd 的 Linux 发行版,这两个命令之间有实际区别吗?
systemctl suspend
pm-suspend
我应该使用哪个或更喜欢哪个?
答案1
简而言之,您通常应该更喜欢发行版集成的挂起模式。对于搭载 systemd 的发行版,通常是systemctl suspend
.
例如,Arch Linux 维基说:
systemd 提供用于挂起、休眠和混合挂起的本机命令,有关详细信息,请参阅“使用 systemd 进行电源管理”。这是 Arch Linux 中使用的默认界面。
有了 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 进一步支持挂起/休眠/恢复,因为:
- 您可以将 systemd 单元挂接到挂起/恢复过程中,例如在挂起之前或恢复之后运行它们。 (你可以找到很棒的食谱这里.)
- systemd 支持 D-Bus 接口,因此可以通过使用 D-Bus 调用而不是运行命令来触发挂起(尽管运行
systemctl suspend
当然仍然是一种选择)。通过 D-Bus 而不是运行命令来触发挂起通常是在桌面环境中很有用。 - systemd 有一个高级接口,用于通知用户空间应用程序并让它们在完成操作时延迟挂起,抑制剂界面,比hook脚本更加灵活方便。 (事实上,systemd 建议尽可能使用此接口而不是挂钩脚本。)
因此,即使两者以大致相同的方式pm-utils
实现systemd-suspend
系统的实际挂起,但与系统其他组件的集成使得调用哪个组件很重要......并且在发行 systemd 的发行版上,通常systemctl suspend
是打电话的正确人选。