启用 Polkit 后,在 13.10 菜单中仍然缺少休眠选项。如何启用?

我知道自从12.04版本以来,我们需要添加一个policykit规则来启用休眠(请参考问题如何启用休眠?官方文档)。
我可以成功地将我的笔记本电脑置于休眠模式,使用sudo pm-hibernatesudo s2disk命令,所以规则已经生效,但是菜单中仍然缺少休眠选项。
通过查看indicator-session软件包的源代码(虽然不完全理解整个代码),我可以看到代码中仍然有一个休眠菜单选项,并且当系统能够进入休眠状态时应该显示出来。如果你对此感到愤怒,请冷静下来。这很不可能是一个阴谋,而更可能是一个更深层次的错误/退化,当你移动代码或替换代码时会发生这种情况。
问题:在13.10版本中,如何正确告诉indicator-session系统可以进入休眠状态?
可能重复:休眠仍不可用 - 没有活动,因为当时Saucy正在开发中,所以超出了AskUbuntu的范围。
相关的错误报告:https://bugs.launchpad.net/ubuntu/+source/indicator-session/+bug/1232814

关于同样的问题,我的问题是:http://askubuntu.com/questions/361058/ - pileofrocks
@pileofrocks 抱歉,今天在我的订阅阅读器中可能忽略了你的信息。 - LiveWireBT
虽然你的措辞更好,而且更加技术性(在我还不知道这个错误之前就提出了我的问题),如果只能关闭一个,那应该关闭我提出的那个。:P - pileofrocks
4个回答

14.04及以后版本
Mitch在他对14.04和16.04的回答中指出,在修改任何内容之前,您应该检查10-vendor.d/com.ubuntu.desktop.pkla。还要检查是否已禁用安全启动,如果是,则会恢复菜单选项。
重新启用菜单中的休眠选项
要在菜单中重新启用休眠选项,您的/etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla应该被修改为以下内容(适用于saucy 13.10):
[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate
ResultActive=yes

然后重新启动或在您的会话中运行killall indicator-session-service,您应该能够恢复休眠功能/菜单选项。如果文件不存在,请创建该文件。

来自错误报告的调查

引用Jeffery To在Launchpad上的帖子Bug Report #1232814

For Saucy, indicator-session was updated to use logind (org.freedesktop.login1) instead of upower.

If you check /var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla, you'll see that hibernate is disabled by default in both upower and logind.

So the first step to re-enable the Hibernate option is to edit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla to something like:

[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate
ResultActive=yes

After rebooting, the login screen session menu should have a Hibernate option.

[...]

所有的感谢和赞誉都归功于杰弗里!
为什么要禁用休眠?
在launchpad上有一个错误报告建议禁用挂起/休眠,而不是跟踪哪些硬件“认证”哪种电源模式。据称这是一种更可扩展的方法。
另外需要提到的是,使用UEFI安全启动和休眠似乎是可能的,但可能会绕过前者的风险。(链接1,链接2)提醒一下,当你使用休眠时,你将所有内容存储在未加密的磁盘中的RAM中,包括加密文件系统和容器的密码。
在某个时候,我不得不禁用安全启动功能才能使我的笔记本电脑进入休眠状态。在我的情况下,我使用了uswsusp,并且通过s2disk进行测试返回了以下消息。这可能会给你一个提示,为什么你无法进入休眠状态,尽管其他一切都已经准备就绪,与安全启动有关。
s2disk: Could not open the snapshot device. Reason: Operation not permitted 

然而,请理解这不是抱怨的地方,请友善对待。

相关问题


3谢谢你的方法,但是在重启和执行'killall indicator-session-service'之后,我仍然没有成功。不过,你提到了“或者在重启后进行其他故障排除”,所以我想我属于这个情况。在经历了这么多次操作系统迭代之后,发现如此重要的功能仍然不被支持,真是非常奇怪。但目前我只能抱着希望,继续使用sudo pm-hibernate。 - cdaddr
3一对问题:为什么世界上要禁用休眠?这样做是否可以在电源设置中使用休眠选项?我不需要在菜单中的“齿轮”中有休眠选项,而是希望我的笔记本在电池电量低到关键水平时能够进入休眠状态。感谢您的回答! - Oxwivi
我对这个变化不负责,但是在AskUbuntu上的初始问题中包含了一个指向错误报告的链接,该报告建议禁用挂起/休眠而不是跟踪哪些硬件“认证”适用于什么电源模式,因为这种方法似乎更具可扩展性。我更愿意责怪制造商。在我的台式机上,我有一个选项可以在电池电量严重不足时选择要执行的操作,但是在我的虚拟机中无法复制这个情况以添加适当的英文截图。 - LiveWireBT
1我甚至在这之后也无法进入休眠状态!:( 请帮忙!休眠功能在我的电脑上是正常的...但是菜单中没有显示出来... - Nirmik
我是从13.04升级的,没有这样的文件:➜ ~ sudo ls /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla ls: 无法访问/etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla:没有那个文件或目录。我应该创建它吗? - Michael Pankov
1@constantius 是的,你应该创建它。 - LiveWireBT
无法修复电源设置中缺少休眠选项 :( - salmatron
@SalmanPK 你试过其他答案吗? - Seth
@Seth,是的,毫无结果。 - salmatron
1@SalmanPK 你可以再问一个问题。还要确保你有足够的SWAP空间。 - Seth
@Seth 实际上,我刚刚尝试了一下"相关问题"的方法,很有效,谢谢!现在我的笔记本电脑在合上盖子时会进入休眠状态。\o/ - salmatron
@SalmanPK 我可以知道是哪一个吗? - Seth
@Seth 这个链接是关于当我关闭笔记本盖子时,如何告诉Ubuntu不做任何操作的问题。实际上,它是关于在关闭盖子时什么都不做,但我将其修改为休眠模式。 - salmatron
这在14.04版本上是必要的吗? - John Scott
嗨,感謝提供食譜。我想在修改中留下一些註解。你知道怎麼在pkla檔案中添加註解嗎? - Mathieu Dubois
@MathieuDubois 你试过使用 # 吗?它似乎对于 PolicyKit 的 .conf 文件是有效的,比如 /etc/polkit-1/localauthority.conf.d/50-localauthority.conf; 也可能有效或值得尝试,因为格式看起来类似于 INI 文件。 - LiveWireBT
谢谢你的回答。不幸的是,INI文件定义得相对宽松。无论如何,我已经用#添加了一些注释以进行测试。你知道如何查看是否存在问题(日志文件等)吗? - Mathieu Dubois
关于“Sleep”有类似的方法吗?一旦您点击关机,睡眠选项就会消失。 - Rápli András
@RápliAndrás 听起来像是另一个错误,应该报告。 - LiveWireBT
这在14.04版本的Xfce下同样适用... - landroni
1谢谢您提供有关“安全启动”的提示。您应该将该部分加粗显示。在克隆硬盘后,我一直在疯狂地想弄清楚为什么我不能休眠。 - mcchots
我完全忘记了要确保我的安全启动被禁用,直到看到这个答案。 - J3soon

如果你在使用Hibernate时仍然遇到问题,请查看此错误报告中的评论#58

I found a workaround on ubuntu gnome 13.10: just install hibernate:

sudo apt-get install hibernate

The only problem is that apport will issue three errors when starting up after normal Power Off. For this you can disable apport:

sudo -H gedit /etc/default/apport

Then change enabled=0.

To change settings from hibernate edit files in /etc/hibernate.

安装Hibernate软件包似乎对我在Ubuntu Gnome 13.10 x64上进行的正确更改非常有效。

在这里,我想要补充一件事,那就是我所记得的未挂载交换分区。如果交换分区没有被挂载,无论休眠设置如何,都不会显示/启用休眠选项。

而且,如果交换分区没有自动挂载,则休眠会话将会丢失。


如果你按照之前的步骤操作了,但仍然没有起作用, 我建议你将/etc/pm/sleep.d/20_custom-ehci_hcd更改为以下内容:
[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate
ResultActive=yes

要使其工作,然后按照上述步骤启用休眠选项。这对我真的起作用。
最后,你会有两个文件被编辑为"[重新启用休眠...]"。试试这个方法吧。如果你使用的是Ubuntu 13.10,它肯定会起作用。