Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

I have recently given up my Desktop Environment and am now only using a Window Manager (i3) and X. It all works very well and I do not miss much. Except for one thing: the shutdown button. I can now only shutdown by issuing:

sudo shutdown -Ph now

from a terminal. This works, but I want to create a keybinding in i3 to shutdown by clicking Mod+x. And I am not sure how this can be achieved. If I create a script in say ~/shutdown and refer to this with:

bindsym $mod+x exec ~/shutdown

Then this does not work; I figure because I am running as a regular user and I am sudoing in this script. I would be fine with having a terminal appear and prompting me for the password (although I prefer this to not require a password, if possible), but am not sure how to do this. What is a way to get this done?

Using Arch Linux.

share|improve this question
add comment

3 Answers 3

up vote 6 down vote accepted

If you use D-Bus sessions and ConsoleKit (which is a default component of most modern desktop systems, so you may already have it installed), a system poweroff approach that is slightly cleaner than sudo shutdown and that does not require any sort of root privilege is:

dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" \
 /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

Similarly, a system restart can be accomplished with

dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" \
  /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart

You can put those in scripts and add shortcuts or menu entries to call them.

share|improve this answer
1  
While a bit more complicated than a sudo command, I agree this is the cleanest solution. –  Patrick Jan 6 '12 at 12:59
add comment

According to the documentation, i3 allows you to bind either on keycodes or on keysyms.

So, you could put an entry in your sudoers file, like:

plua  ALL=(ALL) NOPASSWD:/sbin/shutdown

which would authorize user plua to be able to shutdown without issuing a password, and then create a key bind to that effect, such as:

bind Mod+x exec /path/to/shutdownscript
share|improve this answer
add comment

One way to do this is to have sudo not prompt for the password. Add the following to your /etc/sudoers file (replacing johndoe with your user)

johndoe ALL = (root) NOPASSWD: /sbin/shutdown
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.