mirror of
https://github.com/systemd/systemd.git
synced 2024-12-02 23:03:50 +08:00
getty: don't parse console= anymore, use /sys/class/tty/console/active instead
This commit is contained in:
parent
079a09fbf7
commit
6a3b1508f7
25
src/main.c
25
src/main.c
@ -72,7 +72,6 @@ static bool arg_sysv_console = true;
|
||||
#endif
|
||||
static bool arg_mount_auto = true;
|
||||
static bool arg_swap_auto = true;
|
||||
static char *arg_console = NULL;
|
||||
static char **arg_default_controllers = NULL;
|
||||
|
||||
static FILE* serialization = NULL;
|
||||
@ -329,26 +328,6 @@ static int parse_proc_cmdline_word(const char *word) {
|
||||
"systemd.log_color=0|1 Highlight important log messages\n"
|
||||
"systemd.log_location=0|1 Include code location in log messages\n");
|
||||
|
||||
} else if (startswith(word, "console=")) {
|
||||
const char *k;
|
||||
size_t l;
|
||||
char *w = NULL;
|
||||
|
||||
k = word + 8;
|
||||
l = strcspn(k, ",");
|
||||
|
||||
/* Ignore the console setting if set to a VT */
|
||||
if (l < 4 ||
|
||||
!startswith(k, "tty") ||
|
||||
k[3+strspn(k+3, "0123456789")] != 0) {
|
||||
|
||||
if (!(w = strndup(k, l)))
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
free(arg_console);
|
||||
arg_console = w;
|
||||
|
||||
} else if (streq(word, "quiet")) {
|
||||
arg_show_status = false;
|
||||
#ifdef HAVE_SYSV_COMPAT
|
||||
@ -1094,9 +1073,6 @@ int main(int argc, char *argv[]) {
|
||||
if (dual_timestamp_is_set(&initrd_timestamp))
|
||||
m->initrd_timestamp = initrd_timestamp;
|
||||
|
||||
if (arg_console)
|
||||
manager_set_console(m, arg_console);
|
||||
|
||||
if (arg_default_controllers)
|
||||
manager_set_default_controllers(m, arg_default_controllers);
|
||||
|
||||
@ -1221,7 +1197,6 @@ finish:
|
||||
manager_free(m);
|
||||
|
||||
free(arg_default_unit);
|
||||
free(arg_console);
|
||||
strv_free(arg_default_controllers);
|
||||
|
||||
dbus_shutdown();
|
||||
|
@ -461,7 +461,6 @@ void manager_free(Manager *m) {
|
||||
#endif
|
||||
|
||||
free(m->notify_socket);
|
||||
free(m->console);
|
||||
|
||||
lookup_paths_free(&m->lookup_paths);
|
||||
strv_free(m->environment);
|
||||
@ -2783,22 +2782,6 @@ void manager_reset_failed(Manager *m) {
|
||||
unit_reset_failed(u);
|
||||
}
|
||||
|
||||
int manager_set_console(Manager *m, const char *console) {
|
||||
char *c;
|
||||
|
||||
assert(m);
|
||||
|
||||
if (!(c = strdup(console)))
|
||||
return -ENOMEM;
|
||||
|
||||
free(m->console);
|
||||
m->console = c;
|
||||
|
||||
log_debug("Using kernel console %s", c);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool manager_unit_pending_inactive(Manager *m, const char *name) {
|
||||
Unit *u;
|
||||
|
||||
|
@ -148,7 +148,6 @@ struct Manager {
|
||||
dual_timestamp startup_timestamp;
|
||||
dual_timestamp finish_timestamp;
|
||||
|
||||
char *console;
|
||||
char *generator_unit_path;
|
||||
|
||||
/* Data specific to the device subsystem */
|
||||
@ -256,7 +255,6 @@ unsigned manager_dispatch_load_queue(Manager *m);
|
||||
unsigned manager_dispatch_run_queue(Manager *m);
|
||||
unsigned manager_dispatch_dbus_queue(Manager *m);
|
||||
|
||||
int manager_set_console(Manager *m, const char *console);
|
||||
int manager_set_default_controllers(Manager *m, char **controllers);
|
||||
|
||||
int manager_loop(Manager *m);
|
||||
|
44
src/target.c
44
src/target.c
@ -81,7 +81,7 @@ static int target_add_default_dependencies(Target *t) {
|
||||
}
|
||||
|
||||
static int target_add_getty_dependencies(Target *t) {
|
||||
char *n;
|
||||
char *n, *active;
|
||||
int r;
|
||||
|
||||
assert(t);
|
||||
@ -89,23 +89,39 @@ static int target_add_getty_dependencies(Target *t) {
|
||||
if (!unit_has_name(UNIT(t), SPECIAL_GETTY_TARGET))
|
||||
return 0;
|
||||
|
||||
/* Automatically add in a serial getty on the kernel
|
||||
* console */
|
||||
if (t->meta.manager->console && !tty_is_vc(t->meta.manager->console)) {
|
||||
if (read_one_line_file("/sys/class/tty/console/active", &active) >= 0) {
|
||||
const char *tty;
|
||||
|
||||
/* We assume that gettys on virtual terminals are
|
||||
* started via manual configuration and do this magic
|
||||
* only for non-VC terminals. */
|
||||
truncate_nl(active);
|
||||
if ((tty = strrchr(active, ' ')))
|
||||
tty ++;
|
||||
else
|
||||
tty = active;
|
||||
|
||||
log_debug("Automatically adding serial getty for %s", t->meta.manager->console);
|
||||
if (!(n = unit_name_replace_instance(SPECIAL_SERIAL_GETTY_SERVICE, t->meta.manager->console)))
|
||||
return -ENOMEM;
|
||||
/* Automatically add in a serial getty on the kernel
|
||||
* console */
|
||||
if (!tty_is_vc(tty)) {
|
||||
|
||||
r = unit_add_two_dependencies_by_name(UNIT(t), UNIT_AFTER, UNIT_WANTS, n, NULL, true);
|
||||
free(n);
|
||||
/* We assume that gettys on virtual terminals are
|
||||
* started via manual configuration and do this magic
|
||||
* only for non-VC terminals. */
|
||||
|
||||
if (r < 0)
|
||||
return r;
|
||||
log_debug("Automatically adding serial getty for /dev/%s", tty);
|
||||
if (!(n = unit_name_replace_instance(SPECIAL_SERIAL_GETTY_SERVICE, tty))) {
|
||||
free(active);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
r = unit_add_two_dependencies_by_name(UNIT(t), UNIT_AFTER, UNIT_WANTS, n, NULL, true);
|
||||
free(n);
|
||||
|
||||
if (r < 0) {
|
||||
free(active);
|
||||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
free(active);
|
||||
}
|
||||
|
||||
/* Automatically add in a serial getty on the first
|
||||
|
Loading…
Reference in New Issue
Block a user