diff -urN xscreensaver-4.05/hacks/xmatrix.c xscreensaver-4.05-jon/hacks/xmatrix.c
--- xscreensaver-4.05/hacks/xmatrix.c	Sat Jun  1 00:28:18 2002
+++ xscreensaver-4.05-jon/hacks/xmatrix.c	Fri Sep  6 12:35:08 2002
@@ -45,6 +45,8 @@
 #include "xpm-pixmap.h"
 #include <stdio.h>
 #include <X11/Xutil.h>
+#include <pwd.h>
+#include <sys/types.h>
 
 #if defined(HAVE_GDK_PIXBUF) || defined(HAVE_XPM)
 # include "images/matrix0.xpm"
@@ -69,6 +71,9 @@
 #define PLAIN_MAP 1
 #define GLOW_MAP  2
 
+char *wakestr=NULL;
+char *knockstr=NULL;
+
 typedef struct {
            int glow    : 8;
   unsigned int glyph   : 9;  /* note: 9 bit characters! */
@@ -639,13 +644,13 @@
                  transmit_delay = True;
                  visible_cursor = True;
                  break;
-    case KNOCK0: s = "Wake up, Neo..."; break;
+    case KNOCK0: s = wakestr; break;
     case KNOCK1: s = ""; break;
     case KNOCK2: s = "The Matrix has you..."; typing_delay = True; break;
     case KNOCK3: s = ""; break;
     case KNOCK4: s = "Follow the white rabbit."; typing_delay = True; break;
     case KNOCK5: s = ""; break;
-    case KNOCK6: s = "Knock, knock, Neo."; break;
+    case KNOCK6: s = knockstr; break;
     case KNOCK7: s = ""; break;
 
     default: abort(); break;
@@ -962,6 +967,15 @@
 {
   m_state *state = init_matrix (dpy, window);
   int delay = get_integer_resource ("delay", "Integer");
+  struct passwd *pw;
+  char *name="Neo";
+  char *wake="Wake up, %s...";
+  char *knock="Knock, knock, %s."; 
+  if (NULL==knockstr) {if(NULL!=(pw=getpwuid(getuid()))){name=pw->pw_name;} }
+  if (NULL==(wakestr=malloc(strlen(wake)+strlen(name)))) { return; }
+  if (NULL==(knockstr=malloc(strlen(knock)+strlen(name)))) { return; }
+  sprintf(wakestr,wake,name); sprintf(knockstr,knock,name);
+
   while (1)
     {
       draw_matrix (state);
