return 0;
}
+void reset_dev_console_fd(int fd, bool switch_to_text) {
+ int r;
+
+ assert(fd >= 0);
+
+ r = reset_terminal_fd(fd, switch_to_text);
+ if (r < 0)
+ log_warning_errno(r, "Failed to reset /dev/console, ignoring: %m");
+
+ unsigned rows, cols;
+ r = proc_cmdline_tty_size("/dev/console", &rows, &cols);
+ if (r < 0)
+ log_warning_errno(r, "Failed to get /dev/console size, ignoring: %m");
+ else if (r > 0) {
+ r = terminal_set_size_fd(fd, NULL, rows, cols);
+ if (r < 0)
+ log_warning_errno(r, "Failed to set configured terminal size on /dev/console, ignoring: %m");
+ } else
+ (void) terminal_fix_size(fd, fd);
+
+ r = terminal_reset_ansi_seq(fd);
+ if (r < 0)
+ log_warning_errno(r, "Failed to reset /dev/console using ANSI sequences, ignoring: %m");
+}
+
int make_console_stdio(void) {
int fd, r;
return log_error_errno(r, "Failed to make /dev/null stdin/stdout/stderr: %m");
} else {
- unsigned rows, cols;
-
- r = reset_terminal_fd(fd, /* switch_to_text= */ true);
- if (r < 0)
- log_warning_errno(r, "Failed to reset terminal, ignoring: %m");
-
- r = proc_cmdline_tty_size("/dev/console", &rows, &cols);
- if (r < 0)
- log_warning_errno(r, "Failed to get terminal size, ignoring: %m");
- else if (r > 0) {
- r = terminal_set_size_fd(fd, NULL, rows, cols);
- if (r < 0)
- log_warning_errno(r, "Failed to set configured terminal size, ignoring: %m");
- } else
- (void) terminal_fix_size(fd, fd);
-
- r = terminal_reset_ansi_seq(fd);
- if (r < 0)
- log_warning_errno(r, "Failed to reset terminal using ANSI sequences, ignoring: %m");
+ reset_dev_console_fd(fd, /* switch_to_text= */ true);
r = rearrange_stdio(fd, fd, fd); /* This invalidates 'fd' both on success and on failure. */
if (r < 0)
}
static int console_setup(void) {
+
+ if (getpid_cached() != 1)
+ return 0;
+
_cleanup_close_ int tty_fd = -EBADF;
- unsigned rows, cols;
- int r;
- tty_fd = open_terminal("/dev/console", O_WRONLY|O_NOCTTY|O_CLOEXEC);
+ tty_fd = open_terminal("/dev/console", O_RDWR|O_NOCTTY|O_CLOEXEC);
if (tty_fd < 0)
return log_error_errno(tty_fd, "Failed to open /dev/console: %m");
- /* We don't want to force text mode. plymouth may be showing
- * pictures already from initrd. */
- r = reset_terminal_fd(tty_fd, false);
- if (r < 0)
- return log_error_errno(r, "Failed to reset /dev/console: %m");
-
- r = proc_cmdline_tty_size("/dev/console", &rows, &cols);
- if (r < 0)
- log_warning_errno(r, "Failed to get /dev/console size, ignoring: %m");
- else {
- r = terminal_set_size_fd(tty_fd, NULL, rows, cols);
- if (r < 0)
- log_warning_errno(r, "Failed to set /dev/console size, ignoring: %m");
- }
-
- r = terminal_reset_ansi_seq(tty_fd);
- if (r < 0)
- log_warning_errno(r, "Failed to reset /dev/console using ANSI sequences, ignoring: %m");
-
+ /* We don't want to force text mode. Plymouth may be showing pictures already from initrd. */
+ reset_dev_console_fd(tty_fd, /* switch_to_text= */ false);
return 0;
}
(void) release_terminal();
/* Reset the console, but only if this is really init and we are freshly booted */
- if (getpid_cached() == 1 && !skip_setup)
+ if (!skip_setup)
(void) console_setup();
}