如何从Suspend自动进入Hibernate?

Modified on: Sat, 09 Jun 2018 13:17:23 +0800

是否有可能让Ubuntu从Suspend进入Hibernate状态,又名“Suspend Sedation”?

例如,我的笔记本电脑设置为在我关闭盖子后进入暂停状态。如果那时我不使用它一整天,电池就会变平,因为即使在挂起模式下,硬件仍会消耗少量电量,电池最终会放电。
我想要的是能够告诉Ubuntu,即使它被暂停,它仍然需要在几个小时不活动后进入Hibernate。

Windows可以做到这一点。
可以将Ubuntu编程为在计时器上进入待机 Hibernate,但不能同时进入两者。

更新

我想我需要更加具体。我要找的是这个:
当我关上盖子时,笔记本电脑将进入暂停状态。然后,在预定时间后(即使电池电量很强)如果我仍然不使用它,它应该进入休眠状态以节省电池电量。

最佳答案

解决方法很简单。首先,在暂停和恢复时,pm-suspend程序在/etc/pm/sleep.d/usr/lib/pm-utils/sleep.d

  1. 暂停时,记录当前时间并使用rtcwake注册唤醒事件。
  2. 恢复后,根据上面记录的时间检查当前时间。如果已经过了足够的时间,那么我们可能会因为rtc计时器事件而醒来。否则,我们会因用户事件(例如打开笔记本电脑屏幕)而提前醒来。
  3. 如果我们因rtc计时器而醒来,请立即发出“pm-hibernate”命令进入休眠状态。
  4. 醇>

    这是一个执行此操作的脚本。将其命名为0000rtchibernate并将其放在/etc/pm/sleep.d目录中(0000很重要,以便脚本在暂停时首先执行,并在最后恢复时执行)。

    #!/bin/bash
    # Script name: /etc/pm/sleep.d/0000rtchibernate
    # Purpose: Auto hibernates after a period of sleep
    # Edit the "autohibernate" variable below to set the number of seconds to sleep.
    curtime=$(date +%s)
    autohibernate=7200
    echo "$curtime $1" >>/tmp/autohibernate.log
    if [ "$1" = "suspend" ]
    then
        # Suspending.  Record current time, and set a wake up timer.
        echo "$curtime" >/var/run/pm-utils/locks/rtchibernate.lock
        rtcwake -m no -s $autohibernate
    fi
    
    if [ "$1" = "resume" ]
    then
        # Coming out of sleep
        sustime=$(cat /var/run/pm-utils/locks/rtchibernate.lock)
        rm /var/run/pm-utils/locks/rtchibernate.lock
        # Did we wake up due to the rtc timer above?
        if [ $(($curtime - $sustime)) -ge $autohibernate ]
        then
            # Then hibernate
            rm /var/run/pm-utils/locks/pm-suspend.lock
            /usr/sbin/pm-hibernate
        else
            # Otherwise cancel the rtc timer and wake up normally.
            rtcwake -m no -s 1
        fi
    fi
    

    希望此代码在此留言板上显示(这是我的第一篇帖子)。

    在顶部编辑超时值autohibernate=7200,然后在进入休眠状态之前要休眠多少秒。上面的当前值是2小时。请注意,当笔记本电脑执行休眠功能时,笔记本电脑将在此时唤醒几秒钟。

    因此,如果您打算将笔记本电脑放在机箱中,请不要暂停,而是暂停休眠。否则你的笔记本电脑可能会过热。如果它是在一个紧密的滑动箱(虽然它只会持续几秒到一分钟)。

    在过去的几天里,我一直在使用这种方法,到目前为止它已经成功(并且今天下午让我免于死电)。享受。

    对于使用systemd和更新的Ubuntu版本的其他Linux发行版,如果将脚本放在/usr/lib/systemd/system-sleep而不是/etc/pm/sleep.d。另外,用/usr/sbin/pm-hibernate替换systemctl hibernate命令。


相关问答

添加新评论