巧妙地破碎比坦率地破碎更糟糕......
背景:
我已经在系统设置 -> 电源中禁用了挂起。
“暂停”选项仍然出现在齿轮菜单上(不是我预期它会消失),并且我键盘上的睡眠(月亮)按钮仍然会触发暂停。
正如其他人所指出的那样,#1 中的选项太容易每个月左右被错误击中一次。
似乎有 1% 的平台正确挂起,因为某个地方的某些驱动程序工程师忘记检查 PCIe 或 IO 空间寄存器 X 在唤醒时是否已恢复。所以这比坏更糟糕:醒来后一切通常看起来都很好,但事实并非如此。希望这些损坏的寄存器都不会以缓慢的方式影响可靠性,例如 ECC 配置或存储 FIFO 深度。但是他们通常以一种或另一种形式这样做,这就是一个原因,例如,为什么针对图形驱动程序的勘误表在它们在市场上首次亮相数年后无限地继续下去(“图形芯片 X 在从暂停中恢复后一小时挂起等等等等” )。
应该有一个自动化测试来查看在睡眠周期中哪些寄存器发生了变化,但很少有供应商有这样的测试。由于预期某些寄存器(例如定时器)会发生变化,因此该测试有些复杂。更糟糕的是,有时您必须以特定顺序或特定粒度读取寄存器,或者首先在其他地方写入读取索引。所以这个过程不能集中在行业中一个方便的地方,比如 Canonical 的办公室。除非以易于比较的方式重新定义 PCIe,否则它真的非常无望,而事实并非如此。
由于驱动程序开发的混乱状态,将永远不会编写#5 中的神奇测试套件。因此,在没有那个的情况下,我的问题。
我非常绝望,我不介意在 /etc/whatever_suspend_file 上进行黑客攻击,但是如果有一种“礼貌”的方式来做到这一点会很好,比如系统设置中不存在的复选框 -> 电源,上面写着“永久禁用暂停,因为它从第一天起就考虑不周。”
注意:我不是在这里谈论休眠,它不应该受到上述问题的影响,因为它涉及电源循环。虽然原则上,从永久存储中恢复寄存器可能有类似的问题。
jak*_*kar 28
根据Debian Wiki,您还可以通过 systemd 禁用它,如下所示:
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
Run Code Online (Sandbox Code Playgroud)
虽然我已经在我的机器上完成了这项工作,但我无法证明它的有效性。没有足够的勇气故意尝试一下。
小智 7
在 Ubuntu 16.* 上试试这个。
去:
点击:
亮度和锁定
不活动时关闭屏幕
将其设置为“从不”
希望能帮助到你 :)
运行以下命令打开要编辑的文件:
sudo -H gedit /var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla
Run Code Online (Sandbox Code Playgroud)
滚动到底部。检查以下信息是否存在,如果不存在则添加:
[Disable suspend]
Identity=unix-user:*
Action=org.freedesktop.upower.suspend
ResultActive=no
Run Code Online (Sandbox Code Playgroud)
这样做会使暂停在您单击它时不执行任何操作;重新启动计算机后,它将从菜单中消失。
您还可以运行此命令来防止计算机休眠:
gsettings set org.gnome.desktop.session idle-delay 0
Run Code Online (Sandbox Code Playgroud)