基于 s2ram 实现挂起

挂起到底需要什么?以前一直以为要 acpi 的东西,其实不需要的。挂起的真正方案只有两种,一个是 s2ram,一个是 tuxonice,后者需要对内核打补丁,而前者是纯粹的用户空间程序。

Debian 的 s2ram 在 uswsusp 软件包中。

首先找出你的系统怎样挂起才能正常唤醒。如果仅仅 s2ram 就可以挂起并且能正常醒来的话,那就最好了,但如果你的机器是 unknown,用 s2ram 的话来说你的机器不再白名单之列,那么就需要附加参数以使 s2ram 正常工作。首先你得试试 s2ram -f,如果可行,那就没问题了,如果不行,那就按照下面的命令逐一试验,知道可以为止,这可是一个很伤机器的过程,但愿第一个命令就成功。

1
2
3
4
5
6
7
8
9
10
s2ram -f -a 3
s2ram -f -a 2
s2ram -f -a 1
s2ram -f -p -m
s2ram -f -p -s
s2ram -f -m
s2ram -f -s
s2ram -f -p
s2ram -f -a 1 -m
s2ram -f -a 1 -s

如果成功了,那么以后挂起就需要增加这些参数。当然这时相当麻烦的,而且直接用 s2ram 来挂起计算机也是很低阶的。

建立于 s2ram 之上

s2ram 很低阶,有许多实用脚本是建立在 s2ram 之上的,这里我们使用 pm-utils, 它可以自行配置。现在你已经知道了 s2ram 需要增加的参数,那么要让 pm-suspend 能正常工作,就需要让 pm-suspend 向 s2ram 传递必要的参数,我们将 pm-utils 的配置写在 /etc/pm/config.d/ 里,文件名随意,比如 config。

我们需要写上 ADD_PARAMETERS=""

双引号里写要附加的参数,具体那些参数可以用 pm-suspend --help 查看。这些参数对应的是哪个 s2ram 的参数,可以看看 man s2ram,很容易对应起来的。
完后,pm-suspend 也可以正常挂起了。

到目前为止,挂起都还仅先于 root 用户,要让普通用户挂起,我们需要一些图形界面程序,kde 下可以用 kpowersave,gnome 可以用 gnome-power-manager,此外,普通用户还必须是 powerdev 组的成员。在没有其他电源管理脚本的情况下,上面的两个程序都会去调用 pm-utils 的。

这样,挂起的问题就解决了,我们根本不需要 acpi。