#! Crunchbang Statler - Enable Suspend Button on Exit

Posted by pirolocito on Jun 28, 2011 5:27 AM EDT
LinuxMadeasy; By Ricardo Perry
Mail this story
Print this story

A few moons ago, I posted how to create a button for #! for suspend the computer on exit, but in those days, Crunchbang was based on Ubuntu, and the software worked different. In the present time, Crunchbang is debian based, so things change a little

A few moons ago, I posted how to create a button for #! for suspend the computer on exit, but in those days, Crunchbang was based on Ubuntu, and the software worked diferent.

In the present time, Crunchbang is debian based, so things change a little

The "Exit" command on the openbox main menu opens several buttons so one can choose, those command are:

Cancel, Logout, Reboot and Shutdown

So suspend is out of the list.... those commands are all commands for gdm-control, but gdm-control for suspend is only possible after doing logout, but I wanted to suspend inside the session, so we have to do the trick in other way...



After taking a look at xfce-power-manager, it has suspend function, and after a litle dbus introspection, I found the correct message (http://ubuntuforums.org/archive/index.php/t-410570.html) for dbus that does the trick once xfce-power-manager api supports freedesktop directives (I'm not an expert on any of these things, I just catched some lines here and there)



dbus-send --session --dest=org.freedesktop.PowerManagement --type=method_call --print-reply --reply-timeout=2000 /org/freedesktop/PowerManagement org.freedesktop.PowerManagement.Suspend

So, for our How-to....

1 - on a command line sudo gedit /usr/bin/openbox-logout

2 - Change the file where bold text is the new text to add

-----------------------------------

#!/usr/bin/env python



import pygtk

pygtk.require('2.0')

import gtk

import os



class DoTheLogOut:



# Cancel/exit

def delete_event(self, widget, event, data=None):

gtk.main_quit()

return False



# Logout

def logout(self, widget):

os.system("openbox --exit")



# Reboot

def reboot(self, widget):

os.system("gdm-control --reboot && openbox --exit")



# Shutdown

def shutdown(self, widget):

os.system("gdm-control --shutdown && openbox --exit")



# Suspend

def suspend(self, widget):

os.system("dbus-send --session --dest=org.freedesktop.PowerManagement --type=method_call --print-reply --reply-timeout=2000 /org/freedesktop/PowerManagement org.freedesktop.PowerManagement.Suspend")



def __init__(self):

# Create a new window

self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)

self.window.set_title("Exit? Choose an option:")

self.window.set_resizable(False)

self.window.set_position(1)

self.window.connect("delete_event", self.delete_event)

self.window.set_border_width(20)



# Create a box to pack widgets into

self.box1 = gtk.HBox(False, 0)

self.window.add(self.box1)



# Create cancel button

self.button1 = gtk.Button("_Cancel")

self.button1.set_border_width(10)

self.button1.connect("clicked", self.delete_event, "Changed me mind :)")

self.box1.pack_start(self.button1, True, True, 0)

self.button1.show()



# Create logout button

self.button2 = gtk.Button("_Log out")

self.button2.set_border_width(10)

self.button2.connect("clicked", self.logout)

self.box1.pack_start(self.button2, True, True, 0)

self.button2.show()



# Create reboot button

self.button3 = gtk.Button("_Reboot")

self.button3.set_border_width(10)

self.button3.connect("clicked", self.reboot)

self.box1.pack_start(self.button3, True, True, 0)

self.button3.show()



# Create shutdown button

self.button4 = gtk.Button("_Shutdown")

self.button4.set_border_width(10)

self.button4.connect("clicked", self.shutdown)

self.box1.pack_start(self.button4, True, True, 0)

self.button4.show()



# Create suspend button

self.button5 = gtk.Button("Sus_pend")

self.button5.set_border_width(10)

self.button5.connect("clicked", self.suspend)

self.box1.pack_start(self.button5, True, True, 0)

self.button5.show()





self.box1.show()

self.window.show()



def main():

gtk.main()



if __name__ == "__main__":

gogogo = DoTheLogOut()

main()

3 - Save the file, and there you go

--------------------

Hope this is any good for anyone, as it is for me... You can always configure xfce-power-manager to suspend when you do some action, as "close lid" "press power button" etc, etc....

Full Story

  Nav
» Read more about: Groups: Linux, Xfce

« Return to the newswire homepage

Subject Topic Starter Replies Views Last Post
Suspend Button Error JRuff 0 1,288 Jun 28, 2011 11:10 AM

You cannot post until you login.