如何配置休眠按钮以在执行休眠时不询问密码(针对 Ubuntu 20.04 的 Simpler Off Menu 扩展)

如何配置休眠按钮以在执行休眠时不询问密码(针对 Ubuntu 20.04 的 Simpler Off Menu 扩展)

我按照描述配置了休眠状态这里并安装Simpler Off Menugnome-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
  • 注销并登录

相关内容