在深度睡眠和空闲睡眠之间动态切换

在深度睡眠和空闲睡眠之间动态切换

我通常会定期让笔记本电脑进入睡眠状态,有两种不同的情况:

  1. 当我阅读/讨论某事时的短暂时间(几分钟)
  2. 午餐和通勤期间长时间(一个小时或更长时间)

我想知道是否有一个工具或脚本可以决定当我让笔记本电脑进入睡眠状态时,睡眠应该是deeps2idle,就像制作suspend_to_idlesuspend_to_deep设置命令一样。

基本上我可以编写一个/sys/power/mem_sleep在这两个选项之间切换的脚本,但是a)需要sudo和b)我不确定是否立即考虑对文件的更改(我想是的,但我不知道在哪里检查,所以如果有人知道,我会很感激该信息)。

编辑:其基本原理显然是用于s2idle短期睡眠期间,以避免笔记本电脑从deep睡眠状态中苏醒时出现 15-30 秒的迟缓行为,同时在较长的睡眠期间仍使用后者来节省电池。

答案1

我最终编写了一个脚本来进行切换,/sys/power/mem_sleep以便我可以确认更改是否立即得到考虑;这有点乏味,但很有效。

fcontent=$(cat /sys/power/mem_sleep)

if [ "$fcontent" = "s2idle [deep]" ]; then
        echo "s2idle" | sudo tee /sys/power/mem_sleep
else
        echo "deep" | sudo tee /sys/power/mem_sleep
fi;

答案2

作为主要答案的替代或补充:

我创建了两个单独的脚本(在~/bin)和两个相应的启动器:

suspend_deep.sh

#!/bin/sh

echo deep | sudo tee -a /sys/power/mem_sleep

suspend idle

#!/bin/sh

echo s2idle | sudo tee -a /sys/power/mem_sleep

发射器位于~/.local/share/applications

[Desktop Entry]
Exec=pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true ~/bin/suspend_deep.sh
Icon=system-suspend
Name[en_US]=Suspend deep
Name=Suspend deep
Type=Application
Terminal=false

和:

[Desktop Entry]
Exec=pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true ~/bin/suspend_idle.sh
Icon=system-suspend
Name[en_US]=Suspend idle
Name=Suspend idle
Type=Application
Terminal=false

与仅更改当前状态的开关相比,当当前状态未知或未按预期工作时,此解决方案非常有用,如下所示这发生在我身上

答案3

如果您的主板和内核同时支持 s2idle 和 s2ram,您可以运行这些命令以立即触发挂起并达到您想要的状态。

对于 s2ram:

echo "mem" > /sys/power/state

对于 s2idle:

echo "freeze" > /sys/power/state

您的系统中可能会有所不同。只需检查您有哪些选择:

cat /sys/power/state

但我找不到一种方法可以在没有 root 权限的情况下实现这一点。

相关内容