summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2011-02-14 19:57:18 +0100
committerLennart Poettering <lennart@poettering.net>2011-02-14 19:57:18 +0100
commit6a3b1508f7a9c8ecf712beb44baa13f252f0d3d8 (patch)
treed257d7b7aa2a95132a7abf4e89ee3dfc9e0135a8
parent079a09fbf79050c0794bac0f87d3600ffd5b9db2 (diff)
getty: don't parse console= anymore, use /sys/class/tty/console/active instead
-rw-r--r--src/main.c25
-rw-r--r--src/manager.c17
-rw-r--r--src/manager.h2
-rw-r--r--src/target.c44
4 files changed, 30 insertions, 58 deletions
diff --git a/src/main.c b/src/main.c
index d1eeffb12e..d9dd0ac492 100644
--- a/src/main.c
+++ b/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();
diff --git a/src/manager.c b/src/manager.c
index 4a8408212a..92b274590b 100644
--- a/src/manager.c
+++ b/src/manager.c
@@ -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;
diff --git a/src/manager.h b/src/manager.h
index d8559f1bec..a329ee925f 100644
--- a/src/manager.h
+++ b/src/manager.h
@@ -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);
diff --git a/src/target.c b/src/target.c
index 73130078d9..27b54e3808 100644
--- a/src/target.c
+++ b/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