diff --git a/src/firstboot/firstboot.c b/src/firstboot/firstboot.c index 55bd273f21..38e3adaed6 100644 --- a/src/firstboot/firstboot.c +++ b/src/firstboot/firstboot.c @@ -43,6 +43,7 @@ #include "parse-util.h" #include "password-quality-util.h" #include "path-util.h" +#include "plymouth-util.h" #include "pretty-print.h" #include "proc-cmdline.h" #include "prompt-util.h" @@ -110,6 +111,10 @@ static void print_welcome(int rfd, sd_varlink **mute_console_link) { assert(rfd >= 0); assert(mute_console_link); + /* Needs to be called before mute_console or it will garble the screen */ + if (arg_welcome) + (void) plymouth_hide_splash(); + if (!*mute_console_link && arg_mute_console) (void) mute_console(mute_console_link); diff --git a/src/home/homectl.c b/src/home/homectl.c index cb73c51b1b..c6a3d4b3eb 100644 --- a/src/home/homectl.c +++ b/src/home/homectl.c @@ -48,6 +48,7 @@ #include "percent-util.h" #include "pidref.h" #include "pkcs11-util.h" +#include "plymouth-util.h" #include "polkit-agent.h" #include "pretty-print.h" #include "proc-cmdline.h" @@ -2891,6 +2892,9 @@ static int create_interactively(void) { return 0; } + /* Needs to be called before mute_console or it will garble the screen */ + (void) plymouth_hide_splash(); + _cleanup_(sd_varlink_flush_close_unrefp) sd_varlink *mute_console_link = NULL; (void) mute_console(&mute_console_link); diff --git a/src/shared/plymouth-util.c b/src/shared/plymouth-util.c index aaf604afd5..38b4f1fe2a 100644 --- a/src/shared/plymouth-util.c +++ b/src/shared/plymouth-util.c @@ -56,3 +56,14 @@ int plymouth_send_msg(const char *text, bool pause_spinner) { return 0; } + +int plymouth_hide_splash(void) { + int r; + + r = plymouth_send_raw("H\0", 2, SOCK_NONBLOCK); + if (r < 0) + return log_full_errno(ERRNO_IS_NO_PLYMOUTH(r) ? LOG_DEBUG : LOG_WARNING, r, + "Failed to communicate with plymouth: %m"); + + return 0; +} diff --git a/src/shared/plymouth-util.h b/src/shared/plymouth-util.h index c73b44567c..4030c5bdb6 100644 --- a/src/shared/plymouth-util.h +++ b/src/shared/plymouth-util.h @@ -7,6 +7,7 @@ int plymouth_connect(int flags); int plymouth_send_raw(const void *raw, size_t size, int flags); int plymouth_send_msg(const char *text, bool pause_spinner); +int plymouth_hide_splash(void); static inline bool ERRNO_IS_NO_PLYMOUTH(int r) { return IN_SET(ABS(r), EAGAIN, ENOENT) || ERRNO_IS_DISCONNECT(r);