使用32位的Ubuntu,本来是11.10,3月初为了尝鲜安装了12.04 Beta1,安装后关闭菜单中的休眠(Hibernate)不见了。这个问题不止出现在Unity中,换Gnome classic、KDE也没有。使用pm-hibernate命令可以休眠,但是有时候报空间不足,于是我发现可能是swap空间不够。如果朋友们的swap空间>=RAM,直接参考二。没有swap或swap小的,从一开始比较稳妥。(注:目前Gnome3 shell不支持(可能因为它不支持Canonical的状态栏通知器),故还不知道如何添加)
一、先是swap空间不够:我有3G的RAM,但是swap只有2.7G,一般来说开启休眠swap>=RAM(鬼知道原来11.10的时候怎么就可以),于是
1. LiveCD下使用gparted重新分了一个6G的swap,过程因简单略去
2. 由于swap换了一个,所以UUID变了,使用blkid命令重新获得UUID并记录下
/dev/sdb10: UUID="80dd945a-ae46-4acb-b5be-e57d44dcc450" TYPE="swap"
3. 使用UUID更新/etc/fstab中的swap:
# swap was on /dev/sda10 during installation
UUID=80dd945a-ae46-4acb-b5be-e57d44dcc450 none swap sw 0 0
4. 根据官方社区帮助,编辑/etc/default/grub, 找到GRUB_CMDLINE_LINUX="",将引号插入红色部分
GRUB_CMDLINE_LINUX="resume=UUID=80dd945a-ae46-4acb-b5be-e57d44dcc450"
然后命令:sudo update-grub,更新grub。
5. 编辑/etc/initramfs-tools/conf.d/resume,将UUID替换成新的:
RESUME=UUID=80dd945a-ae46-4acb-b5be-e57d44dcc450
然后命令:sudo update-initramfs -u生成新的内存镜像
二、这样做了之后,虽然菜单没有出现,但是pm-hibernate在内存使用高时没发现再报错。
于是查资料,终于发现是因为新版本的policykit设置的问题,编辑文件/etc/polkit-1/localauthority/50-local.d/com.ubuntu.desktop.pkla
填入以下内容:
[Re-enable hibernate by default]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes
然后重启,休眠菜单就回来了。
参考资料:
https://help.ubuntu.com/community/SwapFaq
http://askubuntu.com/questions/94754/how-to-modify-policykit-to-allow-hibernation-in-upower