Index: gnome-session-3.4.2.1/configure.ac
===================================================================
--- gnome-session-3.4.2.1.orig/configure.ac	2012-05-23 15:53:21.000000000 +0200
+++ gnome-session-3.4.2.1/configure.ac	2012-09-11 21:07:30.154242183 +0200
@@ -73,6 +73,40 @@ PKG_CHECK_MODULES(EGG_SMCLIENT, gtk+-3.0
 PKG_CHECK_MODULES(GL_TEST, xcomposite gl)
 
 dnl ====================================================================
+dnl Check for libnotify
+dnl ====================================================================
+AC_ARG_ENABLE([libnotify],
+              AS_HELP_STRING([--enable-libnotify], [Use libnotify]),
+              [enable_libnotify=$enableval],
+              [enable_libnotify=auto])
+
+PKG_CHECK_MODULES(LIBNOTIFY,
+                  [libnotify >= 0.7],
+                  [have_libnotify=yes], [have_libnotify=no])
+
+AC_MSG_CHECKING([whether to use libnotify])
+
+if test x$enable_libnotify = xauto ; then
+        if test x$have_libnotify = xno ; then
+                enable_libnotify=no
+        else
+                enable_libnotify=yes
+        fi
+fi
+
+AC_MSG_RESULT($enable_libnotify)
+
+if test x$enable_libnotify = xyes; then
+        if test x$have_libnotify = xno; then
+                AC_MSG_ERROR([Libnotify support explicitly required, but headers not found])
+        fi
+        AC_DEFINE(HAVE_LIBNOTIFY, 1, [Define if libnotify is used instead of error dialogs])
+fi
+
+AC_SUBST(LIBNOTIFY_CFLAGS)
+AC_SUBST(LIBNOTIFY_LIBS)
+
+dnl ====================================================================
 dnl Check for systemd
 dnl ====================================================================
 AC_ARG_ENABLE([systemd],
Index: gnome-session-3.4.2.1/gnome-session/Makefile.am
===================================================================
--- gnome-session-3.4.2.1.orig/gnome-session/Makefile.am	2012-05-17 20:26:07.000000000 +0200
+++ gnome-session-3.4.2.1/gnome-session/Makefile.am	2012-09-11 21:08:33.586552239 +0200
@@ -73,6 +73,7 @@ gnome_session_CPPFLAGS =			\
 	$(ICE_CFLAGS)				\
 	$(XEXT_CFLAGS)				\
 	$(GCONF_CFLAGS)				\
+	$(LIBNOTIFY_CFLAGS)			\
 	$(SYSTEMD_CFLAGS)			\
 	-I$(top_srcdir)/egg			\
 	-DLOCALE_DIR=\""$(datadir)/locale"\"	\
@@ -92,6 +93,7 @@ gnome_session_LDADD =				\
 	$(XEXT_LIBS)				\
 	$(GNOME_SESSION_LIBS)			\
 	$(GCONF_LIBS)				\
+	$(LIBNOTIFY_LIBS)			\
 	$(SYSTEMD_LIBS)				\
 	$(EXECINFO_LIBS)
 
Index: gnome-session-3.4.2.1/gnome-session/gsm-manager.c
===================================================================
--- gnome-session-3.4.2.1.orig/gnome-session/gsm-manager.c	2012-09-11 20:45:31.199794108 +0200
+++ gnome-session-3.4.2.1/gnome-session/gsm-manager.c	2012-09-11 22:51:08.960644337 +0200
@@ -42,6 +42,10 @@
 
 #include <gtk/gtk.h> /* for logout dialog */
 
+#ifdef HAVE_LIBNOTIFY
+#include <libnotify/notify.h>
+#endif
+
 #include "gsm-manager.h"
 #include "gsm-manager-glue.h"
 
@@ -1368,6 +1372,43 @@ end_session_or_show_shell_dialog (GsmMan
 
 }
 
+#ifdef HAVE_LIBNOTIFY
+
+static void
+on_link_clicked (NotifyNotification *notif,
+                             char *action,
+                             gpointer data)
+{
+        gtk_show_uri (NULL, (char *)data, GDK_CURRENT_TIME, NULL);
+}
+
+static gboolean
+notification_show_timeout (gpointer data)
+{
+        NotifyNotification *notif = (NotifyNotification *) data;
+        notify_notification_show (notif, NULL);
+        g_object_unref (G_OBJECT (notif));
+        return FALSE;
+}
+
+static void
+show_fallback_dialog (const char *title,
+                      const char *description,
+                      const char *link_text,
+                      const char *uri)
+{
+        NotifyNotification *notif;
+
+        notify_init ("GNOME");
+        notif = notify_notification_new (title, description, GSM_ICON_COMPUTER_FAIL);
+        notify_notification_set_timeout (notif, 15*1000);
+        notify_notification_add_action (notif, "link-click", link_text, NOTIFY_ACTION_CALLBACK (on_link_clicked), (gpointer) uri, NULL);
+        /* Give the notification daemon a chance to finish initialization */
+        g_timeout_add_seconds (2, (GSourceFunc) notification_show_timeout, (gpointer) notif);
+}
+
+#else /* HAVE_LIBNOTIFY */
+
 static void
 show_fallback_dialog (const char *title,
                       const char *description,
@@ -1411,6 +1452,8 @@ show_fallback_dialog (const char *title,
                           NULL);
 }
 
+#endif /* HAVE_LIBNOTIFY */
+
 static void
 possibly_show_fallback_dialog (GsmManager *manager)
 {
