问题描述
我想在关闭盖子或从菜单中选择”Suspend”时使用混合挂起方法而不是挂起。
我可以想象更改pm-suspend脚本以自动执行此操作,但可能有更可维护/更简单的方法。
最佳解决办法
间接混合睡眠
这是较旧的方法:首先暂停,然后在延迟(默认为15分钟)后唤醒休眠。在3.6之前的Linux内核中使用它,或者如果你喜欢它,它在15分钟后不再使用任何电源。
添加文件/etc/pm/config.d/00-use-suspend-hybrid
:
# Always use suspend_hybrid instead of suspend
if [ "$METHOD" = "suspend" ]; then
METHOD=suspend_hybrid
fi
# The delay after which hibernation gets triggered (default: 900 seconds, 15 minutes):
PM_HIBERNATE_DELAY=900
You might want to make sure that the hybrid method is supported on your system via the following code. If it says “0” it should work:
sudo pm-is-supported --suspend-hybrid && echo $?
真正的混合使用Linux 3.6+暂停
如果您有Linux 3.6内核,则可以使用以下内容,它将从头开始挂起到磁盘和RAM。
添加文件/etc/pm/config.d/00-use-suspend-hybrid
:
# WORKAROUND: always set the default hibernate mode first (normal mode)
# (not required if you have the patch mentioned by Rohan below (http://askubuntu.com/a/344879/169))
HIBERNATE_MODE=platform
# Always use hibernate instead of suspend, but with "suspend to both"
if [ "$METHOD" = "suspend" ]; then
METHOD=hibernate
HIBERNATE_MODE=suspend
fi
# Make sure to use the kernel's method, in case uswsusp is installed etc.
SLEEP_MODULE=kernel
这将始终将图像写入磁盘,然后暂停到RAM,具有恢复的好处总是很快(只要电池没电),并且机器不会在短时间内唤醒(在PM_HIBERNATE_DELAY之后)冬眠是真的。
缺点是该过程需要更长时间(因为它总是休眠到磁盘),并且您的电池可能会长时间耗尽(例如12小时后)。
次佳解决办法
Ubuntu 18.04是一个定时选项
在Ubuntu 18.04中有一个新的定时选项。在systemd
中可用新模式suspend-then-hibernate
。这将从睡眠模式开始,然后在固定时间后转换到休眠模式。
在hybrid-sleep
模式下,只有当电池电量严重不足且系统关闭时,休眠部分才会生效。
要开始使用此功能,您需要创建一个带有下一个内容的文件/etc/systemd/sleep.conf
:
[Sleep]
HibernateDelaySec=3600
睡眠1小时后,这将从睡眠状态变为休眠状态。您可以编辑HibernateDelaySec
以将延迟更改为休眠。
首先,测试suspend-then-hibernate是否使用systemd工作
按Ctrl
+ Alt
+ T
打开终端并输入:
sudo systemctl suspend-then-hibernate
如果它的工作原理使其永久化。
-
当我关上盖子时,以下工作。
使用首选编辑器打开文件/etc/systemd/logind.conf
。您需要通过sudo
,gksudo
或pkexec
调用您的管理权限来编辑此文件。
找到两行:
#HandleSuspendKey=suspend
#HandleLidSwitch=suspend
注意,这些行在它们前面用#
注释掉。 suspend
是默认操作。删除#
并在这两行中将suspend
更改为suspend-then-hibernate
,使它们看起来像这样:
HandleSuspendKey=suspend-then-hibernate
HandleLidSwitch=suspend-then-hibernate
保存文件。通过以下命令注销并重新登录或重新启动logind
服务:
systemctl restart systemd-logind.service
警告!您的用户会话将重新启动
资料来源:Lid Closed Suspend then Hibernate
Ubuntu 16.04及以上版本
蓝眼为Linux 3.6+的Real混合暂停的解决方案对我不起作用。我怀疑这是因为Ubuntu 16.04使用systemd
并且不使用文件/etc/pm/config.d/00-use-suspend-hybrid
。
首先,测试hibernate和hybrid-sleep是否使用systemd工作
按Ctrl
+ Alt
+ T
打开终端并输入:
sudo systemctl hibernate
这应该让你的计算机休眠。要尝试hybrid-sleep,请输入:
sudo systemctl hybrid-sleep
如果它的工作原理使其永久化。
-
当我关上盖子时,以下工作。
使用首选编辑器打开文件/etc/systemd/logind.conf
。您需要通过sudo
,gksudo
或pkexec
调用您的管理权限来编辑此文件。
找到两行:
#HandleSuspendKey=suspend
#HandleLidSwitch=suspend
注意,这些行在它们前面用#
注释掉。 suspend
是默认操作。删除#
并在这两行中将suspend
更改为hybrid-sleep
,使它们看起来像这样:
HandleSuspendKey=hybrid-sleep
HandleLidSwitch=hybrid-sleep
保存文件。退出并重新登录。
注意:
-
除
suspend
或hybrid-sleep
外,还有第三种选择,hibernate
。 -
我的笔记本电脑没有物理睡眠按钮。所以我无法测试它。
-
从cog菜单中单击
Suspend
可使计算机正常挂起而不是hybrid-sleep。
我希望这有帮助
第三种解决办法
在12.04中,我注意到当触发休眠时(使用PM_HIBERNATE_DELAY=XX
),恢复/解冻shell脚本不会取消设置grub recordfail变量。因此grub不会自动引导。
超时设置为-1,等待用户选择。我猜这需要在/etc/pm/sleep.d/10_grub-common
中编辑脚本。我不是新手,所以我还没有想到要弄清楚确切的变化。
第四种办法
这个问题在Google中经常出现,我觉得值得一试。这里描述的方法是(imo)不是混合暂停。它是“在暂停X分钟后休眠”。 True混合挂起将RAM写入磁盘,然后进入low-power状态(睡眠模式)。虽然需要更长的时间,但是当机器剩余电量时,恢复是即时的,否则恢复形成硬盘。这种行为是大多数人所知的混合睡眠,并且在较新的Windows和Mac笔记本电脑中默认使用。
以下是如何启用真正的混合暂停:
-
按照最佳答案的第一部分。这将覆盖”suspend”调用以在pm-utils中执行”hybrid_suspend”。
% cat /etc/pm/config.d/00-use-suspend-hybrid
# Always use suspend_hybrid instead of suspend
if [ "$METHOD" = "suspend" ]; then
METHOD=suspend_hybrid
fi
-
备份/usr /lib /pm-utils /pm-functions
-
从这里获取补丁:https://bugs.freedesktop.org/attachment.cgi?id=68712
-
此补丁启用混合挂起(如果可用)(即在内核3.6+上)
-
-
使用’patch -p0’应用它,或者如果失败则手动合并它
这个方法适用于我的Sony Vaio SVS。
PS:如果将来删除文件,请在此处重新生成补丁:
diff --git a/pm/pm-functions.in b/pm/pm-functions.in
--- a/pm/pm-functions.in
+++ b/pm/pm-functions.in
@@ -316,8 +316,28 @@ if [ -z "$HIBERNATE_MODULE" ] && \
{
[ -n "${HIBERNATE_MODE}" ] && \
grep -qw "${HIBERNATE_MODE}" /sys/power/disk && \
+ HIBERNATE_MODE_SAVE=$(cat /sys/power/disk) && \
+ HIBERNATE_MODE_SAVE="${HIBERNATE_MODE_SAVE##*[}" && \
+ HIBERNATE_MODE_SAVE="${HIBERNATE_MODE_SAVE%%]*}" && \
echo -n "${HIBERNATE_MODE}" > /sys/power/disk
echo -n "disk" > /sys/power/state
+ RET=$?
+ echo -n "$HIBERNATE_MODE_SAVE" > /sys/power/disk
+ return "$RET"
+ }
+fi
+
+# for kernels that support suspend to both (i.e. hybrid suspend)
+# since kernel 3.6
+if [ -z "$SUSPEND_HYBRID_MODULE" ] && \
+ [ -f /sys/power/disk ] && \
+ grep -q disk /sys/power/state && \
+ grep -q suspend /sys/power/disk; then
+ SUSPEND_HYBRID_MODULE="kernel"
+ do_suspend_hybrid()
+ {
+ HIBERNATE_MODE="suspend"
+ do_hibernate
}
fi
资料来源: