[25459] in Source-Commits

home help back first fref pref prev next nref lref last post

Re: /svn/athena r24822 - trunk/debathena/config/gdm-config/debian

daemon@ATHENA.MIT.EDU (Geoffrey Thomas)
Wed Mar 2 19:41:03 2011

Date: Wed, 2 Mar 2011 19:40:56 -0500 (EST)
From: Geoffrey Thomas <geofft@MIT.EDU>
To: Jonathan D Reed <jdreed@mit.edu>
cc: source-commits@mit.edu
In-Reply-To: <201008162113.o7GLDFtW018631@drugstore.mit.edu>
Message-ID: <alpine.DEB.1.10.1103021938000.19401@lunatique.mit.edu>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed

On Mon, 16 Aug 2010, Jonathan D Reed wrote:

> Author: jdreed
> Date: 2010-08-16 17:13:14 -0400 (Mon, 16 Aug 2010)
> New Revision: 24822
>
> Added:
>   trunk/debathena/config/gdm-config/debian/debathena-nologin-monitor
>   trunk/debathena/config/gdm-config/debian/debathena-nologin-monitor.desktop
> Modified:
>   trunk/debathena/config/gdm-config/debian/changelog
>   trunk/debathena/config/gdm-config/debian/rules
> Log:
> In gdm-config:
>  * Add an applet to monitor /etc/nologin on new-GDM
>
>
> Modified: trunk/debathena/config/gdm-config/debian/changelog
> ===================================================================
> --- trunk/debathena/config/gdm-config/debian/changelog	2010-08-16 03:28:26 UTC (rev 24821)
> +++ trunk/debathena/config/gdm-config/debian/changelog	2010-08-16 21:13:14 UTC (rev 24822)
> @@ -1,3 +1,9 @@
> +debathena-gdm-config (1.23) UNRELEASED; urgency=low
> +
> +  * Add an applet to monitor /etc/nologin on new-GDM
> +
> + -- Jonathan Reed <jdreed@mit.edu>  Mon, 16 Aug 2010 17:12:59 -0400
> +
> debathena-gdm-config (1.22.1) unstable; urgency=low
>
>   * Fix typo in rules file
>
> Added: trunk/debathena/config/gdm-config/debian/debathena-nologin-monitor
> ===================================================================
> --- trunk/debathena/config/gdm-config/debian/debathena-nologin-monitor	                        (rev 0)
> +++ trunk/debathena/config/gdm-config/debian/debathena-nologin-monitor	2010-08-16 21:13:14 UTC (rev 24822)
> @@ -0,0 +1,95 @@
> +#!/usr/bin/python
> +#
> +# An applet to monitor /etc/nologin
> +
> +import gio
> +import dbus
> +import dbus.mainloop.glib
> +import gtk
> +import gobject
> +import sys
> +import os
> +
> +SM_DBUS_NAME = "org.gnome.SessionManager"
> +SM_DBUS_PATH = "/org/gnome/SessionManager"
> +SM_DBUS_INTERFACE = "org.gnome.SessionManager"
> +SM_CLIENT_DBUS_INTERFACE = "org.gnome.SessionManager.ClientPrivate"
> +APP_ID = "debathena-nologin-monitor"
> +
> +class GDMSucks:
> +    def __init__(self):
> +        self.sessionEnding = False
> +        self.sessionBus = dbus.SessionBus()
> +        try:
> +            self.register_with_sm()
> +            self.init_sm_client()
> +        except:
> +            print "Warning: Cannot register with session manager."
> +
> +        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
> +        self.label = gtk.Label()
> +        self.label.set_markup('<span font_desc="Sans Bold 24">This workstation is temporarily unavailable.  Please use another workstation.</span>')
> +        self.window.add(self.label)
> +        self.window.set_decorated(False)
> +        self.window.set_position(gtk.WIN_POS_CENTER)
> +        self.window.hide()
> +        self.gfile = gio.File("/etc/nologin")
> +        self.monitor = self.gfile.monitor_file(gio.FILE_MONITOR_NONE, None)
> +        self.monitor.connect("changed", self.directory_changed)
> +
> +    def directory_changed(self, monitor, file1, file2, evt_type):
> +        # type(evt_type) is <class 'gio._gio.FileMonitorEvent'>
> +        # Value is something like:
> +        #     <enum G_FILE_MONITOR_EVENT_CREATED of type GFileMonitorEvent>
> +        # However, those constants aren't available in Python, unless I'm missing something
> +        # So, we do this the stupid way:
> +        if str(evt_type) == "<enum G_FILE_MONITOR_EVENT_CREATED of type GFileMonitorEvent>":
> +            self.window.show_all()
> +        if str(evt_type) == "<enum G_FILE_MONITOR_EVENT_DELETED of type GFileMonitorEvent>":
> +            self.window.hide()

>>> import gio
>>> gio.FILE_MONITOR_EVENT_CREATED
<enum G_FILE_MONITOR_EVENT_CREATED of type GFileMonitorEvent>

Other than this, ACK

> +
> +   # Connect to the session manager, and register our client.
> +    def register_with_sm(self):
> +        proxy = self.sessionBus.get_object(SM_DBUS_NAME, SM_DBUS_PATH)
> +        sm = dbus.Interface(proxy, SM_DBUS_INTERFACE)
> +        autostart_id = os.getenv("DESKTOP_AUTOSTART_ID", default="")
> +        self.smClientId = sm.RegisterClient(APP_ID, autostart_id)
> +
> +    # Set up to handle signals from the session manager.
> +    def init_sm_client(self):
> +        proxy = self.sessionBus.get_object(SM_DBUS_NAME, self.smClientId)
> +        self.smClient = dbus.Interface(proxy, SM_CLIENT_DBUS_INTERFACE)
> +        self.smClient.connect_to_signal("QueryEndSession",
> +                                         self.sm_on_QueryEndSession)
> +        self.smClient.connect_to_signal("EndSession", self.sm_on_EndSession)
> +        self.smClient.connect_to_signal("CancelEndSession",
> +                                         self.sm_on_CancelEndSession)
> +        self.smClient.connect_to_signal("Stop", self.sm_on_Stop)
> +
> +     # Here on a QueryEndSession signal from the session manager.
> +    def sm_on_QueryEndSession(self, flags):
> +        self.sessionEnding = True
> +        # Response args: is_ok, reason.
> +        self.smClient.EndSessionResponse(True, "")
> +
> +    # Here on an EndSession signal from the session manager.
> +    def sm_on_EndSession(self, flags):
> +        self.sessionEnding = True
> +        # Response args: is_ok, reason.
> +        self.smClient.EndSessionResponse(True, "")
> +
> +    # Here on a CancelEndSession signal from the session manager.
> +    def sm_on_CancelEndSession(self):
> +        self.sessionEnding = False
> +
> +    # Here on a Stop signal from the session manager.
> +    def sm_on_Stop(self):
> +        gtk.main_quit()
> +
> +def main():
> +    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
> +    GDMSucks()
> +    gtk.main()
> +
> +if __name__ == '__main__':
> +    main()
>
>
> Property changes on: trunk/debathena/config/gdm-config/debian/debathena-nologin-monitor
> ___________________________________________________________________
> Added: svn:executable
>   + *
>
> Added: trunk/debathena/config/gdm-config/debian/debathena-nologin-monitor.desktop
> ===================================================================
> --- trunk/debathena/config/gdm-config/debian/debathena-nologin-monitor.desktop	                        (rev 0)
> +++ trunk/debathena/config/gdm-config/debian/debathena-nologin-monitor.desktop	2010-08-16 21:13:14 UTC (rev 24822)
> @@ -0,0 +1,6 @@
> +[Desktop Entry]
> +Type=Application
> +Name=Debathena /etc/nologin monitor widget
> +TryExec=/usr/lib/debathena-nologin-monitor/debathena-nologin-monitor
> +Exec=/usr/lib/debathena-nologin-monitor/debathena-nologin-monitor
> +OnlyShowIn=GNOME;
>
> Modified: trunk/debathena/config/gdm-config/debian/rules
> ===================================================================
> --- trunk/debathena/config/gdm-config/debian/rules	2010-08-16 03:28:26 UTC (rev 24821)
> +++ trunk/debathena/config/gdm-config/debian/rules	2010-08-16 21:13:14 UTC (rev 24822)
> @@ -45,6 +45,8 @@
> 	dh_install debian/debathena-branding usr/lib/debathena-branding
> 	dh_install debian/debathena-branding.glade usr/share/debathena-branding
> 	dh_install debian/debathena-branding.desktop usr/share/gdm/autostart/LoginWindow
> +	dh_install debian/debathena-nologin-monitor usr/lib/debathena-nologin-monitor
> +	dh_install debian/debathena-nologin-monitor.desktop usr/share/gdm/autostart/LoginWindow
>
>     binary-predeb/debathena-gdm-config:: debathena-gdm-config-substvars
>     debathena-gdm-config-substvars::
>
>

home help back first fref pref prev next nref lref last post