我最近放弃了桌面环境,现在只使用窗口管理器 (i3) 和 X。一切都运行良好,我不会错过太多。除了一件事:关机按钮。我现在只能通过发出以下命令来关闭:
sudo shutdown -Ph now
从终端。这可行,但我想在 i3 中创建一个键绑定以通过单击 来关闭Mod+x
。我不确定如何实现这一目标。如果我在 say 中创建一个脚本~/shutdown
并引用它:
bindsym $mod+x exec ~/shutdown
那么这不起作用;我想是因为我以普通用户身份运行,并且我在这个脚本中执行 sudoing。我很乐意出现一个终端并提示我输入密码(尽管我希望这不需要密码,如果可能的话),但我不确定如何做到这一点。有什么办法可以做到这一点?
使用 Arch Linux。
答案1
如果你使用D-Bus 会话和控制台工具包(这是大多数现代桌面系统的默认组件,因此您可能已经安装了它),一个系统关机稍微干净一点sudo shutdown
并且不需要任何 root 权限的方法是:
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" \
/org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
同样,一个系统重新开始可以通过以下方式完成
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" \
/org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart
您可以将它们放入脚本中并添加快捷方式或菜单条目来调用它们。
答案2
根据文档,i3 允许您绑定键码或键符上。
因此,您可以在文件中添加一个条目sudoers
,例如:
plua ALL=(ALL) NOPASSWD:/sbin/shutdown
这将授权用户plua
能够在不发出密码的情况下关闭,然后创建一个达到该效果的密钥绑定,例如:
bind Mod+x exec /path/to/shutdownscript
答案3
一种方法是让 sudo 不提示输入密码。将以下内容添加到您的 /etc/sudoers 文件中(将 johndoe 替换为您的用户)
johndoe ALL = (root) NOPASSWD: /sbin/shutdown