我按照描述配置了休眠状态这里并安装Simpler Off Menu
gnome-shell 扩展在...的帮助下这说明。
Hibernate
按钮可以工作,但每次都需要密码才能允许休眠。如何配置它以不询问密码并立即执行休眠,就像suspend
按钮执行暂停一样?
答案1
在 Ubuntu 18,19,20 中执行
system hibernate
命令需要:sudo
“systemctl suspend” 与 “systemctl hibernate” 权限
要禁用密码提示systemctl hibernate
命令,应该将其添加到 sudoers 列表中(/etc/sudoers.tmp
)使用sudo visudo
命令并在文件末尾添加以下行:
<user_name> ALL=NOPASSWD: /usr/bin/systemctl hibernate
但是现在扩展中有一个 bug。HibernateSimpler Off Menu
在其中是通过 执行的systemctl hibernate
,而不是sudo systemctl hibernate
按要求通过 执行的。此实现在文件中[email protected]/extension.js
我为该扩展创建了相应的问题: Ubuntu 20.04 中的错误:按 [休眠] 按钮要求在执行休眠之前输入密码
最后一次提交大约是在 1 年前。因此扩展尚未得到积极支持。
以下是该问题的完整详细信息及解决方法:
预期行为
按下Hibernate
按钮执行sudo systemctl hibernate
。如果 sudoers 列表中有合适的用户(/etc/sudoers.tmp
由 编辑sudo visudo
):
<user_name> ALL=NOPASSWD: /usr/bin/systemctl hibernate
按下按钮后立即执行休眠操作Hibernate
。
实际结果
按 [休眠] 按钮要求输入用户密码以执行该操作的授权。在系统日志 ( less /var/log/syslog
) 中有一个错误 - “无法通过 logind 休眠系统:访问被拒绝”:
02:51:06 gnome-shell[1983]: st_widget_get_theme_node called on the widget [0x564b127af6f0 Gjs_ui_popupMenu_PopupSubMenuMenuItem.popup-menu-item popup-submenu-menu-item:last-child ("")] which is not in the stage.
02:51:06 Tgnome-shell[1983]: st_widget_get_theme_node called on the widget [0x564b127b6d00 StWidget:last-child] which is not in the stage.
02:51:06 gnome-shell[1983]: st_widget_get_theme_node called on the widget [0x564b12781480 StBoxLayout ("")] which is not in the stage.
02:51:13 systemd[1735]: Started Application launched by gnome-shell.
02:51:13 gnome-shell[5729]: Failed to hibernate system via logind: Access denied
02:51:27 gnome-shell[5729]: Failed to start hibernate.target: Access denied
02:51:27 gnome-shell[5729]: See system logs and 'systemctl status hibernate.target' for details.
输入密码后,休眠操作可能由其他命令执行systemctl hibernate
。我不确定,但可能是由pm-hibernate
命令hibernate
执行的 - 不推荐。
“pm-hibernate” 和 “systemctl hibernate” 之间的区别
对此的一个简短回答是,systemd 得到了积极维护,而 pm-utils 则没有。事实上,pm-utils 自 2010 年以来就没有更新过,所以我认为这个软件既古老又过时。建议从现在开始使用 systemctl。
“systemctl hibernate”和“hibernate”之间的区别:
hibernate 命令已被 systemctl hibernate 取代。建议使用 systemctl hibernate。出于兼容性原因,hibernate 命令在系统中仍然可用。
在 Ubuntu 18,19,20 中执行
system hibernate
命令需要:sudo
“systemctl suspend” 与 “systemctl hibernate” 权限
SimplerOffMenu
在按钮扩展的实现中,Hibernate
处理程序使用
systemctl hibernate
,而不是sudo systemctl hibernate
修复此问题所需的。
使固定
更改extension.js
文件如下:
function FuncHibernate(widget, event) {
Main.overview.hide(); try {
//fix start: added sudo
//Util.trySpawnCommandLine('systemctl hibernate');
Util.trySpawnCommandLine('sudo systemctl hibernate');
//fix end
} catch (err) {
Main.notify("Error " + err);
}
}
固定extension.js
文件是这里。
解决方法
为了在 Ubuntu 20.04 中修复此问题,在扩展安装后需要执行以下操作:
更改在此处安装的扩展的 JS 脚本:
/home/<your_user_name>/.local/share/gnome-shell/extensions/[email protected]/extension.js
extension.js
(您可以通过 找到文件的位置sudo find /* -name "extension.js"
)
然后按照上面的修复方法添加sudo
并保护文件。
要应用修复,可能只需保存文件就足够了。我以防万一执行了这里:
- 禁用并启用扩展,按下配置按钮扩展页面
- 按
Alt
+F2
,输入r
并按下Enter
- 注销并登录