(cd $TMPDIR
zcat $INITRD | cpio --quiet -Hnewc -i --make-directories
sed -i -e 's@^#!\(.*\)@#!/bin/plymouthd \1\n@' init
- #sed -i -e 's@setquiet@&\n/bin/plymouth --ask-for-password@' init
+ sed -i -e 's@setquiet@&\n/bin/plymouth --show-splash@' init
(cd $LIBDIR
DEPS=$(get_lib_deps ${LIBEXECDIR}/plymouth/plymouth ${LIBDIR}/plymouth/fedora-fade-in.so ${LIBDIR}/plymouth/text.so ${LIBDIR}/plymouth/details.so)
for dep in $DEPS; do
handler, failed_handler, user_data);
}
+void
+ply_boot_client_tell_daemon_to_show_splash (ply_boot_client_t *client,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data)
+{
+ assert (client != NULL);
+
+ ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_SHOW_SPLASH,
+ NULL, handler, failed_handler, user_data);
+}
+
void
ply_boot_client_tell_daemon_to_quit (ply_boot_client_t *client,
ply_boot_client_response_handler_t handler,
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
ply_boot_client_t *ply_boot_client_new (void);
-
+
void ply_boot_client_free (ply_boot_client_t *client);
bool ply_boot_client_connect (ply_boot_client_t *client,
ply_boot_client_disconnect_handler_t disconnect_handler,
ply_boot_client_response_handler_t handler,
ply_boot_client_response_handler_t failed_handler,
void *user_data);
+void ply_boot_client_tell_daemon_to_show_splash (ply_boot_client_t *client,
+ ply_boot_client_response_handler_t handler,
+ ply_boot_client_response_handler_t failed_handler,
+ void *user_data);
void ply_boot_client_tell_daemon_to_quit (ply_boot_client_t *client,
ply_boot_client_response_handler_t handler,
ply_boot_client_response_handler_t failed_handler,
void
print_usage (void)
{
- ply_log ("rhgb-client [--ping] [--update=STATUS] [--details] [--sysinit] [--quit]");
+ ply_log ("rhgb-client [--ping] [--update=STATUS] [--show-splash] [--details] [--sysinit] [--quit]");
ply_flush_log ();
}
{
ply_event_loop_t *loop;
ply_boot_client_t *client;
- bool should_quit, should_ping, should_update, should_sysinit, should_ask_for_password;
+ bool should_quit, should_ping, should_update, should_sysinit, should_ask_for_password, should_show_splash;
char *status;
int exit_code;
int i;
should_update = false;
should_quit = false;
should_ask_for_password = false;
+ should_show_splash = false;
status = NULL;
for (i = 1; i < argc; i++)
{
should_ping = true;
else if (strstr (argv[i], "--sysinit") != NULL)
should_sysinit = true;
+ else if (strstr (argv[i], "--show-splash") != NULL)
+ should_show_splash = true;
else if (strstr (argv[i], "--ask-for-password") != NULL)
should_ask_for_password = true;
else if (strstr (argv[i], "--update") != NULL)
ply_boot_client_attach_to_event_loop (client, loop);
- if (should_quit)
+ if (should_show_splash)
+ ply_boot_client_tell_daemon_to_show_splash (client,
+ (ply_boot_client_response_handler_t)
+ on_success,
+ (ply_boot_client_response_handler_t)
+ on_failure, loop);
+ else if (should_quit)
ply_boot_client_tell_daemon_to_quit (client,
(ply_boot_client_response_handler_t)
on_success,
const char *status)
{
ply_trace ("updating status to '%s'", status);
- ply_boot_splash_update_status (state->boot_splash,
- status);
+ if (state->boot_splash != NULL)
+ ply_boot_splash_update_status (state->boot_splash,
+ status);
}
static char *
"/sysroot/var/log/bootmessages.log");
}
+static void
+on_show_splash (state_t *state)
+{
+ ply_trace ("Showing splash screen");
+ state->boot_splash = start_boot_splash (state,
+ PLYMOUTH_PLUGIN_PATH "fedora-fade-in.so");
+
+ if (state->boot_splash == NULL)
+ {
+ ply_trace ("Could not start graphical splash screen,"
+ "showing text splash screen");
+ state->boot_splash = start_boot_splash (state,
+ PLYMOUTH_PLUGIN_PATH "text.so");
+ }
+
+ if (state->boot_splash == NULL)
+ ply_error ("could not start boot splash: %m");
+}
+
static void
on_quit (state_t *state)
{
ply_trace ("time to quit, closing log");
ply_terminal_session_close_log (state->session);
ply_trace ("hiding splash");
- ply_boot_splash_hide (state->boot_splash);
+ if (state->boot_splash != NULL)
+ ply_boot_splash_hide (state->boot_splash);
ply_trace ("exiting event loop");
ply_event_loop_exit (state->loop, 0);
server = ply_boot_server_new ((ply_boot_server_update_handler_t) on_update,
(ply_boot_server_ask_for_password_handler_t) on_ask_for_password,
+ (ply_boot_server_show_splash_handler_t) on_show_splash,
(ply_boot_server_system_initialized_handler_t) on_system_initialized,
(ply_boot_server_quit_handler_t) on_quit,
state);
main (int argc,
char **argv)
{
- state_t state;
+ state_t state = { 0 };
int exit_code;
if (argc <= 1)
state.window = create_window (&state, "/dev/tty1");
- state.boot_splash = start_boot_splash (&state,
- PLYMOUTH_PLUGIN_PATH "fedora-fade-in.so");
-
- if (state.boot_splash == NULL)
- {
- state.boot_splash = start_boot_splash (&state,
- PLYMOUTH_PLUGIN_PATH "text.so");
- }
-
- if (state.boot_splash == NULL)
- {
- ply_error ("could not start boot splash: %m");
- return EX_UNAVAILABLE;
- }
-
ply_trace ("entering event loop");
exit_code = ply_event_loop_run (state.loop);
ply_trace ("exited event loop");
#define PLY_BOOT_PROTOCOL_REQUEST_TYPE_SYSTEM_INITIALIZED "S"
#define PLY_BOOT_PROTOCOL_REQUEST_TYPE_QUIT "Q"
#define PLY_BOOT_PROTOCOL_REQUEST_TYPE_PASSWORD "*"
+#define PLY_BOOT_PROTOCOL_REQUEST_TYPE_SHOW_SPLASH "$"
#define PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK "\x6"
#define PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ANSWER "\x2"
ply_boot_server_update_handler_t update_handler;
ply_boot_server_system_initialized_handler_t system_initialized_handler;
+ ply_boot_server_show_splash_handler_t show_splash_handler;
ply_boot_server_ask_for_password_handler_t ask_for_password_handler;
ply_boot_server_quit_handler_t quit_handler;
void *user_data;
ply_boot_server_t *
ply_boot_server_new (ply_boot_server_update_handler_t update_handler,
ply_boot_server_ask_for_password_handler_t ask_for_password_handler,
+ ply_boot_server_show_splash_handler_t show_splash_handler,
ply_boot_server_system_initialized_handler_t initialized_handler,
ply_boot_server_quit_handler_t quit_handler,
void *user_data)
server->update_handler = update_handler;
server->ask_for_password_handler = ask_for_password_handler;
server->system_initialized_handler = initialized_handler;
+ server->show_splash_handler = show_splash_handler;
server->quit_handler = quit_handler;
server->user_data = user_data;
if (server->system_initialized_handler != NULL)
server->system_initialized_handler (server->user_data, server);
}
+ else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_SHOW_SPLASH) == 0)
+ {
+ ply_trace ("got show splash request");
+ if (server->show_splash_handler != NULL)
+ server->show_splash_handler (server->user_data, server);
+ }
else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_QUIT) == 0)
{
if (server->quit_handler != NULL)
printf ("got sysinit done request\n");
}
+static void
+on_show_splash (ply_event_loop_t *loop)
+{
+ printf ("got show splash request\n");
+}
+
static void
on_quit (ply_event_loop_t *loop)
{
server = ply_boot_server_new ((ply_boot_server_update_handler_t) on_update,
(ply_boot_server_ask_for_password_handler_t) on_ask_for_password,
+ (ply_boot_server_show_splash_handler_t) on_show_splash,
(ply_boot_server_system_initialized_handler_t) on_system_initialized,
(ply_boot_server_quit_handler_t) on_quit,
loop);
const char *status,
ply_boot_server_t *server);
+typedef void (* ply_boot_server_show_splash_handler_t) (void *user_data,
+ ply_boot_server_t *server);
+
typedef char * (* ply_boot_server_ask_for_password_handler_t) (void *user_data,
ply_boot_server_t *server);
#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
ply_boot_server_t *ply_boot_server_new (ply_boot_server_update_handler_t update_handler,
ply_boot_server_ask_for_password_handler_t ask_for_password_handler,
+ ply_boot_server_show_splash_handler_t show_splash_handler,
ply_boot_server_system_initialized_handler_t initialized_handler,
ply_boot_server_quit_handler_t quit_handler,
void *user_data);