--- xscreensaver-4.23/driver/demo-Gtk.c.root 2005-10-22 07:36:52.000000000 +0200 +++ xscreensaver-4.23/driver/demo-Gtk.c 2005-11-21 11:12:25.000000000 +0100 @@ -890,8 +890,13 @@ flush_dialog_changes_and_save (s); xscreensaver_command (GDK_DISPLAY(), XA_EXIT, 0, False, NULL); sleep (1); + if (getuid() == 0) { + if (system ("TEMPXAUTHORITY=`su - nobody -c \"/bin/mktemp /tmp/xscreensaver.XXXXXX\"` && xauth extract $TEMPXAUTHORITY $DISPLAY && XAUTHORITY=$TEMPXAUTHORITY xscreensaver -nosplash && rm -f $TEMPXAUTHORITY &") < 0) + fprintf (stderr, "%s: fork error\n", blurb()); + } else { if (system ("xscreensaver -nosplash &") < 0) fprintf (stderr, "%s: fork error\n", blurb()); + } await_xscreensaver (s); } @@ -4745,7 +4750,12 @@ if (init_results == 1) { - system ("xscreensaver -nosplash &"); + if (getuid() == 0) { + system ("TEMPXAUTHORITY=`su - nobody -c \"/bin/mktemp /tmp/xscreensaver.XXXXXX\"` && xauth extract $TEMPXAUTHORITY $DISPLAY && XAUTHORITY=$TEMPXAUTHORITY xscreensaver -nosplash && rm -f $TEMPXAUTHORITY &"); + } + else { + system ("xscreensaver -nosplash &"); + } return 0; }