[25459] in Source-Commits
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::
>
>