PyShutdownBox / PyShutdownBox.py

#!/usr/bin/env python2

import os
import ConfigParser

import dbus
import pygtk
import gtk

pygtk.require("2.0")

class DbusConsoleKitManager(object):
    def __init__(self):
        bus = dbus.SystemBus()
        manager = bus.get_object('org.freedesktop.ConsoleKit', '/org/freedesktop/ConsoleKit/Manager')
        self.manager_interface = dbus.Interface(manager, dbus_interface='org.freedesktop.ConsoleKit.Manager')

    def Restart(self):
        self.manager_interface.Restart()

    def Stop(self):
        self.manager_interface.Stop()

class PyShutdownBox(object):
    def __init__(self):
        # create or read from our config file
        self.rc_shutdown = 'None'

        config_dir = os.path.join(os.getenv('XDG_CONFIG_HOME'), 'PyShutdownBox')
        config_file = os.path.join(config_dir, 'PyShutdownBoxrc')

        # define sections name
        command_run = 'Command to run before shutdown.'
        logout_command = 'Command used to logout.'
        restart_command = 'Restart command. Specify "dbus" to use dbus to restart.'
        shutdown_command = 'Shutdown command. Specify "dbus" to use dbus to shutdown.'

        config = ConfigParser.RawConfigParser()

        if os.path.isfile(config_file):
            config.read(config_file)

            self.rc_shutdown = config.get(command_run, 'command')
            self.logout_cmd = config.get(logout_command, 'logout_command')
            self.restart_cmd = config.get(restart_command, 'restart_command')
            self.shutdown_cmd = config.get(shutdown_command, 'shutdown_command')

        else:
            if not os.path.isdir(config_dir):
                os.mkdir(config_dir)

            config.add_section(command_run)
            config.set(command_run, 'command', 'None')

            config.add_section(logout_command)
            config.set(logout_command, 'logout_command', 'None')

            config.add_section(restart_command)
            config.set(restart_command, 'restart_command', 'dbus')

            config.add_section(shutdown_command)
            config.set(shutdown_command, 'shutdown_command', 'dbus')

            with open(config_file, 'wb') as configfile:
                config.write(configfile)

        # create and connect to our UI
        builder = gtk.Builder()
        builder.add_from_file("PyShutdownBox.glade")
        builder.connect_signals(
            {
                #"on_exit_button_clicked" : gtk.main_quit,
                "on_exit_button_clicked" : self.exit,
                "on_logout_button_clicked" : self.logout,
                "on_restart_button_clicked" : self.restart,
                "on_shutdown_button_clicked" : self.shutdown
            }
        )

        self.window = builder.get_object("MainWindow")
        self.window.stick()
        self.window.set_keep_above(True)
        #self.window.show()

        self.pwm = DbusConsoleKitManager()

    def logout(self, widget):
        if not self.rc_shutdown == 'None':
            os.system(self.rc_shutdown)

        os.system(self.logout_cmd)

    def restart(self, widget):
        if not self.rc_shutdown == 'None':
            os.system(self.rc_shutdown)

        if self.restart_cmd == "dbus":
            self.pwm.Restart()
        else:
            os.system(self.restart_cmd)

    def shutdown(self, widget):
        if not self.rc_shutdown == 'None':
            os.system(self.rc_shutdown)

        if self.shutdown_cmd == "dbus":
            self.pwm.Stop()
        else:
            os.system(self.shutdown_cmd)

    def exit(self, widget):
        gtk.main_quit()
        print 'Command to run before shutdown: {0}'.format(self.rc_shutdown)

if __name__ == "__main__":
    app = PyShutdownBox()
    app.window.show()

    gtk.main()
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.