I took the liberty of enabling debug in gdm.conf and relevant bits of log files are attached.
Meanwhile, my C isn't up to an awful lot, much less gtk glib and so on. However, looking in the source I can see that the greeter failing error message is only in one place, from a condition in the gdm_slave_greeter() function in slave.c daemon/slave.c:2611: if G_UNLIKELY (d->try_different_greeter) { /* ... call gdm_error_box with the failure message ... */ Following that, d->try_different_greeter is only set in the gdm_cleanup_children() function in gdm.c when the exit status is DISPLAY_GREETERFAILED (defined as 65 in gdm.h line 76), in this block: daemon/gdm.c:847: if (status == DISPLAY_GREETERFAILED) { if (d->managetime + 10 >= time (NULL)) { d->try_different_greeter = TRUE; } else { d->try_different_greeter = FALSE; } /* now just remanage */ status = DISPLAY_REMANAGE; } else { d->try_different_greeter = FALSE; } It looks like it is giving up after 10 seconds, so perhaps it is a timing thing? Anyway, I grepped for things that exit with a DISPLAY_GREETERFAILED code and found these: daemon/slave.c:4692: exit_code_to_use = DISPLAY_GREETERFAILED; daemon/slave.c:4698: exit_code_to_use = DISPLAY_GREETERFAILED; gui/gdmcommon.c:94: _exit (DISPLAY_GREETERFAILED); gui/gdmcommon.c:109: _exit (DISPLAY_GREETERFAILED); The daemon/slave.c calls are in the gdm_slave_child_handler() function at line 4621 which handles SIGCHLD signals. The gui/gdmcommon.c references are in the gdm_common_fail_greeter() function, which looks like it tries to log, clean up and exit with DISPLAY_GREETERFAILED. It is called from gui/greeter/greeter.c (and gui/gdmlogin.c, but we're not concerned with that since it is the fall- back greeter, which works). In gui/greeter/greeter.c, gdm_common_fail_greeter() is called from int main() at line and the process_operation() function contains a switch(op_code), and the default case calls it at line 451. gui/greeter/greeter.c:451: gdm_common_fail_greeter ("Unexpected greeter command received: '%c'", op_code); gui/greeter/greeter.c:1089: gdm_common_fail_greeter ("%s: Error setting up %s signal handler: %s", "main", gui/greeter/greeter.c:1099: gdm_common_fail_greeter ("%s: Error setting up %s signal handler: %s", "main", gui/greeter/greeter.c:1104: gdm_common_fail_greeter ("%s: Error setting up %s signal handler: %s", "main", gui/greeter/greeter.c:1114: gdm_common_fail_greeter ("Could not set signal mask!"); gui/greeter/greeter.c:1122: gdm_common_fail_greeter ("Could not set signal mask!"); So it seems to boil down to gui/greeter/greeter.c and scrutinising what int main() is doing, or else I wonder if there is some op_code that isn't being processed by the process_operation() function? ** Attachment added: "/var/log/daemon.log" http://librarian.launchpad.net/6346313/part-of-daemon.log.txt -- GDM: Greeter application crashing https://launchpad.net/bugs/48936 -- desktop-bugs mailing list desktop-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/desktop-bugs