vmspawn/firstboot/homectl: fixes for plymouth (#40558)
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
+7
-3
@@ -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);
|
||||
|
||||
@@ -3265,17 +3269,17 @@ static int parse_size_field(sd_json_variant **identity, const char *field, const
|
||||
|
||||
static int parse_boolean_field(sd_json_variant **identity, const char *field, const char *arg) {
|
||||
int r;
|
||||
|
||||
|
||||
assert(identity);
|
||||
assert(field);
|
||||
|
||||
if (isempty(arg))
|
||||
return drop_from_identity(field);
|
||||
|
||||
|
||||
r = parse_boolean(arg);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to parse boolean parameter %s: %s", field, arg);
|
||||
|
||||
|
||||
r = sd_json_variant_set_field_boolean(identity, field, r > 0);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to set %s field: %m", field);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -2451,9 +2451,11 @@ static int run_virtual_machine(int kvm_device_fd, int vhost_device_fd) {
|
||||
return log_oom();
|
||||
}
|
||||
|
||||
r = strv_prepend(&arg_kernel_cmdline_extra, "console=hvc0");
|
||||
if (r < 0)
|
||||
return log_oom();
|
||||
if (arg_console_mode != CONSOLE_GUI) {
|
||||
r = strv_prepend(&arg_kernel_cmdline_extra, "console=hvc0");
|
||||
if (r < 0)
|
||||
return log_oom();
|
||||
}
|
||||
|
||||
for (size_t j = 0; j < arg_runtime_mounts.n_mounts; j++) {
|
||||
RuntimeMount *m = arg_runtime_mounts.mounts + j;
|
||||
|
||||
Reference in New Issue
Block a user