diff -up plymouth-0.6.0/src/libplybootsplash/ply-window.c.more-debug plymouth-0.6.0/src/libplybootsplash/ply-window.c --- plymouth-0.6.0/src/libplybootsplash/ply-window.c.more-debug 2008-11-07 12:08:25.000000000 -0500 +++ plymouth-0.6.0/src/libplybootsplash/ply-window.c 2008-11-07 12:10:04.000000000 -0500 @@ -493,7 +493,10 @@ ply_window_open (ply_window_t *window) window->vt_number = get_active_vt (); if (readlink ("/proc/self/fd/0", tty_name, sizeof (tty_name) - 1) < 0) - return false; + { + ply_trace ("could not read tty name of fd 0"); + return false; + } window->tty_name = strdup (tty_name); } @@ -503,7 +506,10 @@ ply_window_open (ply_window_t *window) window->tty_fd = open (window->tty_name, O_RDWR | O_NOCTTY); if (window->tty_fd < 0) - return false; + { + ply_trace ("could not open %s : %m", window->tty_name); + return false; + } if (!ply_window_set_unbuffered_input (window)) ply_trace ("window '%s' will be line buffered", window->tty_name); diff -up plymouth-0.6.0/src/main.c.more-debug plymouth-0.6.0/src/main.c --- plymouth-0.6.0/src/main.c.more-debug 2008-11-07 12:01:46.000000000 -0500 +++ plymouth-0.6.0/src/main.c 2008-11-07 12:08:16.000000000 -0500 @@ -220,6 +220,8 @@ has_open_window (state_t *state) { ply_list_node_t *node; + ply_trace ("checking for open windows"); + node = ply_list_get_first_node (state->windows); while (node != NULL) { @@ -231,7 +233,22 @@ has_open_window (state_t *state) window = ply_list_node_get_data (node); if (ply_window_is_open (window)) - return true; + { + int fd; + const char *name; + + fd = ply_window_get_tty_fd (window); + + if (fd >= 0) + name = ttyname (fd); + else + name = NULL; + + ply_trace ("window %s%sis open", + name != NULL? name : "", + name != NULL? " " : ""); + return true; + } node = next_node; } @@ -324,11 +341,22 @@ close_windows (state_t *state) static void on_show_splash (state_t *state) { + bool has_open_window; + open_windows (state); - if (!state->is_redirected && state->ptmx >= 0) + has_open_window = has_open_window (state); + + if (!state->is_redirected && state->ptmx >= 0 && has_open_window) state->is_redirected = attach_to_running_session (state); + if (!has_open_window && state->is_redirected) + { + ply_trace ("no open windows, detaching session"); + ply_terminal_session_detach (state->session); + state->is_redirected = false; + } + if (plymouth_should_show_default_splash (state)) show_default_splash (state); else