在没有桌面环境的情况下从 X 关闭

在没有桌面环境的情况下从 X 关闭

我最近放弃了桌面环境,现在只使用窗口管理器 (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

相关内容