diff -Nur -x '*.orig' -x '*~' gnome-screensaver-2.28.0/configure.ac gnome-screensaver-2.28.0.new/configure.ac
--- gnome-screensaver-2.28.0/configure.ac	2009-09-23 09:36:43.000000000 +0100
+++ gnome-screensaver-2.28.0.new/configure.ac	2009-12-22 00:28:18.749238542 +0000
@@ -914,6 +914,19 @@
 fi
 
 dnl ---------------------------------------------------------------------------
+dnl Check for XTest extension
+dnl ---------------------------------------------------------------------------
+
+have_xtest=no
+PKG_CHECK_MODULES(XTEST, xtst, have_xtest=yes, have_xtest=no)
+if test "$have_xtest" = yes; then
+    AC_DEFINE(HAVE_XTEST, 1, [Have the XTest extension library])
+fi
+AC_SUBST(HAVE_XTEST)
+AC_SUBST(XTEST_CFLAGS)
+AC_SUBST(XTEST_LIBS)
+
+dnl ---------------------------------------------------------------------------
 dnl Finish
 dnl ---------------------------------------------------------------------------
 
diff -Nur -x '*.orig' -x '*~' gnome-screensaver-2.28.0/src/gs-monitor.c gnome-screensaver-2.28.0.new/src/gs-monitor.c
--- gnome-screensaver-2.28.0/src/gs-monitor.c	2009-08-20 00:19:14.000000000 +0100
+++ gnome-screensaver-2.28.0.new/src/gs-monitor.c	2009-12-22 00:29:57.049235502 +0000
@@ -29,6 +29,12 @@
 #include <glib.h>
 #include <glib-object.h>
 
+#ifdef HAVE_XTEST
+#include <gdk/gdkx.h>
+#include <X11/keysym.h>
+#include <X11/extensions/XTest.h>
+#endif /* HAVE_XTEST */
+
 #include "gnome-screensaver.h"
 
 #include "gs-manager.h"
@@ -56,6 +62,12 @@
         GSFade         *fade;
         GSGrab         *grab;
         guint           release_grab_id;
+#ifdef HAVE_XTEST
+        gboolean        have_xtest;
+        int             keycode1;
+        int             keycode2;
+        int            *keycode;
+#endif /* HAVE_XTEST */
 };
 
 #define FADE_TIMEOUT 10000
@@ -186,7 +198,21 @@
 static void
 gs_monitor_simulate_user_activity (GSMonitor *monitor)
 {
-        /* FIXME: reset the xsync timer? */
+#ifdef HAVE_XTEST
+        if (monitor->priv->have_xtest) {
+                XLockDisplay (GDK_DISPLAY ());
+		XTestFakeKeyEvent (GDK_DISPLAY(), *monitor->priv->keycode,
+				True, CurrentTime);
+		XTestFakeKeyEvent (GDK_DISPLAY(), *monitor->priv->keycode,
+				False, CurrentTime);
+		XUnlockDisplay (GDK_DISPLAY());
+		/* Swap the keycode */
+		if (monitor->priv->keycode == &monitor->priv->keycode1)
+			monitor->priv->keycode = &monitor->priv->keycode2;
+		else
+			monitor->priv->keycode = &monitor->priv->keycode1;                 
+        }
+#endif /* HAVE_XTEST */
 
         /* request that the manager unlock -
            will pop up a dialog if necessary */
@@ -416,6 +442,9 @@
 static void
 gs_monitor_init (GSMonitor *monitor)
 {
+#ifdef HAVE_XTEST
+        int a, b, c, d;
+#endif /* HAVE_XTEST */
 
         monitor->priv = GS_MONITOR_GET_PRIVATE (monitor);
 
@@ -435,6 +464,27 @@
         connect_manager_signals (monitor);
 
         _gs_monitor_update_from_prefs (monitor, monitor->priv->prefs);
+
+#ifdef HAVE_XTEST
+	XLockDisplay (GDK_DISPLAY());
+	monitor->priv->have_xtest = (XTestQueryExtension (GDK_DISPLAY(), &a, &b, &c, &d) == True);
+	if (monitor->priv->have_xtest != FALSE)
+	{
+		monitor->priv->keycode1 = XKeysymToKeycode (GDK_DISPLAY(), XK_Alt_L);
+		if (monitor->priv->keycode1 == 0) {
+			g_warning ("monitor->priv->keycode1 not existant");
+		}
+		monitor->priv->keycode2 = XKeysymToKeycode (GDK_DISPLAY(), XK_Alt_R);
+		if (monitor->priv->keycode2 == 0) {
+			monitor->priv->keycode2 = XKeysymToKeycode (GDK_DISPLAY(), XK_Alt_L);
+			if (monitor->priv->keycode2 == 0) {
+				g_warning ("monitor->priv->keycode2 not existant");
+			}
+		}
+		monitor->priv->keycode = &monitor->priv->keycode1;
+	}
+	XUnlockDisplay (GDK_DISPLAY());
+#endif /* HAVE_XTEST */        
 }
 
 static void
diff -Nur -x '*.orig' -x '*~' gnome-screensaver-2.28.0/src/Makefile.am gnome-screensaver-2.28.0.new/src/Makefile.am
--- gnome-screensaver-2.28.0/src/Makefile.am	2009-08-20 00:19:14.000000000 +0100
+++ gnome-screensaver-2.28.0.new/src/Makefile.am	2009-12-22 00:28:18.749238542 +0000
@@ -213,6 +213,7 @@
 gnome_screensaver_LDADD =		\
 	$(GNOME_SCREENSAVER_LIBS)	\
 	$(SAVER_LIBS)			\
+	$(XTEST_LIBS)			\
 	$(NULL)
 
 gnome_screensaver_LDFLAGS = -export-dynamic
