Pm-utils
目录
基本功能
把钩子放到 Pm-utils 的目录里可以很容易地扩展它。这个工作可以由系统管理员来做,或者这些钩子可能是一些软件包安装的,特别是那些在挂起和电源状态改变的时候需要“特别照顾”的软件包。
概念是相当简单的:
- 主脚本 pm-action(由符号链接 pm-suspend、pm-hibernate 或 pm-suspend-hybrid 调用)按字母顺序,执行那些“钩子”,传递参数 suspend(挂起到 RAM)或 hibernate(挂起到磁盘)给脚本并执行它们。
- 当所有的钩子全部执行完了之后,就使机器进入睡眠状态。在机器醒来之后,所有的钩子会带着参数 resume(从 RAM 恢复)或thaw(从磁盘恢复)反向执行一遍。
- 钩子可以做很多事情,比如准备启动管理器、停止蓝牙子系统或者把主要模块卸载掉。
pm-suspend 和 pm-hibernate 都是由 HAL 来调用的,可以由桌面小程序 gnome-power-manager 或者 kpowersave 等来调用。
也可以以此把机器设为“性能优先”或者“省电优先”模式,只要额外传递一个 true 或 false 参数给 pm-powersave 就好了。
挂起过程的钩子文件位于
- /usr/lib/pm-utils/sleep.d(由发行版或软件包提供的钩子)
- /etc/pm/sleep.d(由系统管理员添加的钩子)
电源状态的钩子位于
- /usr/lib/pm-utils/power.d(由发行版或软件包提供的钩子)
- /etc/pm/power.d(由系统管理员添加的钩子)
/etc/pm/ 里的钩子优先级是比 /usr/lib/pm-utils/ 里的高的,所以系统管理员可以超驰发行版的默认设置。
配置
主配置文件是 /usr/lib/pm-utils/defaults。你不应该编辑这个文件,因为软件包升级之后它会被覆盖,恢复成默认的设置。你应该把你的配置文件放在 /etc/pm/config.d/ 里。 你可以只建一个简单的文本文件,里面有如下内容
SUSPEND_MODULES="button uhci_hcd"
保存为 modules 或者 config 文件,放在 /etc/pm/config.d 里,然后它就可以超驰系统级的配置文件了。
配置文件里的变量
挂起前需要卸载的模块的列表
SUSPEND_MODULES="button" # 挂起前需要卸载的模块的列表
SUSE 特有的变量
HIBERNATE_METHOD={userspace,kernel} # 选择挂起到磁盘的模式,默认是 userspace。 S2RAM_OPTS="" # 传递给 s2ram 的参数。查看 挂起到 RAM 页面获取更多信息。
创建你自己的钩子
如果你想在挂起或休眠的过程中执行一些操作的话,你可以把你自己的钩子放在 /etc/pm/sleep.d 目录中。这个目录里的钩子将会在挂起的时候以字母序被执行(这就是为什么他们是都是以两个数字开头的——为了控制顺序)并且在恢复的时候以反序再执行一遍。
这个有一个没啥用的展示性钩子,用来把一些提示性的语句写到你的日志文件里:
#!/bin/bash case $1 in hibernate) echo "Hey guy, we are going to suspend to disk!" ;; suspend) echo "Oh, this time we're doing a suspend to RAM. Cool!" ;; thaw) echo "oh, suspend to disk is over, we are resuming..." ;; resume) echo "hey, the suspend to RAM seems to be over..." ;; *) echo "somebody is calling me totally wrong." ;; esac
把这个保存成 /etc/pm/sleep.d/66dummy 里,并且 chmod +x /etc/pm/sleep.d/66dummy 然后它就会在挂起和恢复的时候输出一些没用的文字了……
一些提示和技巧 / 常见问题
人工触发挂起
如果你想为了侦错而人工触发挂起的话,是用不着 HAL 和其他的框架工具的,只要用 root 调用 pm-suspend 或者 pm-hibernate 就好了。
在那些不包括在 s2ram 白名单里的机器上使用挂起到 RAM
如果你想强制挂起到 RAM,你需要把 -f 加到 /etc/pm/config.d/ 里配置文件的 S2RAM_OPTS 变量里,可以参考一下 配置。你也需要把其他你需要的选项也写进去,比如这样:
S2RAM_OPTS="-f -a 3"
如果你的机器不受支持,你可以把你的机器按 s2ram 页面所述报上去,这样你以后就不需要这样强制执行了。
禁用一个钩子
如果你有钩子不想运行或者你觉得运行了甚至是有害的,那么我们很期待你的 Bug 报告。 但是,你可以很容易地通过在 /etc/pm/sleep.d/ 里创建与钩子同名的空文件的方法来禁用一个钩子。比如你要禁用掉 /usr/lib/pm-utils/sleep.d/45pcmcia 这个钩子,你可以这样:
touch /etc/pm/sleep.d/45pcmcia
别在这个傀儡钩子上设置可执行属性。
重启鼠标
在有些笔记本电脑上,挂起过程基本成功,但是鼠标会挂掉,有一种解决方法是通过 /etc/pm/hooks 里的钩子强制重新初始化 PS/2 驱动(这里是 i8042),参见 创建你自己的钩子
#!/bin/sh echo -n "i8042" > /sys/bus/platform/drivers/i8042/unbind echo -n "i8042" > /sys/bus/platform/drivers/i8042/bind
看起来啥也没发生 / 日志文件在哪里
如果通过桌面小程序调用的时候,啥也没发生的话,那么可以 试试从 root 终端里手工调用 pm-suspend 或 pm-hibernate。也许你可以从输出信息里看到问题所在。 挂起脚本的日志记录在 日志文件 /var/log/pm-suspend.log 里。
问题排查
如果挂起或者休眠工作不正常,你可能需要从 /var/log/pm-suspend.log 里找问题,比如有哪些钩子运行了,它们的输出又是什么。
参见
外部链接
- [http://sourceforge.net/projects/suspend/ Sourceforge 上的 Linux 挂起项目