From f212ac125fb0f8dda6ed9ac50b0c315dd4f58974 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 14 Feb 2011 18:56:51 +0100 Subject: [PATCH] getty: do not auto-spawn getty's on VC ttys if console=ttyN is used https://bugzilla.redhat.com/show_bug.cgi?id=676885 --- TODO | 4 ++++ src/target.c | 7 ++++++- src/util.c | 14 +++++++++++--- src/util.h | 1 + 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/TODO b/TODO index 5ec7487e4..b2b968267 100644 --- a/TODO +++ b/TODO @@ -11,6 +11,10 @@ Bugs: Features: +* look up crypto partition mount points via fstab to show to the user when prompting for a password + +* prohibit socket activation of sysv services + * Maybe store in unit files whether a service should be enabled by default on package installation * perhaps add "systemctl reenable" as combination of "systemctl disable" and "systemctl enable" diff --git a/src/target.c b/src/target.c index a73a98987..73130078d 100644 --- a/src/target.c +++ b/src/target.c @@ -91,7 +91,12 @@ static int target_add_getty_dependencies(Target *t) { /* Automatically add in a serial getty on the kernel * console */ - if (t->meta.manager->console) { + if (t->meta.manager->console && !tty_is_vc(t->meta.manager->console)) { + + /* We assume that gettys on virtual terminals are + * started via manual configuration and do this magic + * only for non-VC terminals. */ + 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; diff --git a/src/util.c b/src/util.c index e78063c5a..d0c903993 100644 --- a/src/util.c +++ b/src/util.c @@ -3549,6 +3549,16 @@ void filter_environ(const char *prefix) { environ[j] = NULL; } +bool tty_is_vc(const char *tty) { + assert(tty); + + if (startswith(tty, "/dev/")) + tty += 5; + + return startswith(tty, "tty") && + tty[3] >= '0' && tty[3] <= '9'; +} + const char *default_term_for_tty(const char *tty) { char *active = NULL; const char *term; @@ -3566,9 +3576,7 @@ const char *default_term_for_tty(const char *tty) { tty = active; } - term = (startswith(tty, "tty") && - tty[3] >= '0' && tty[3] <= '9') ? "TERM=linux" : "TERM=vt100"; - + term = tty_is_vc(tty) ? "TERM=linux" : "TERM=vt100"; free(active); return term; diff --git a/src/util.h b/src/util.h index 3f0f48f32..a534dcfec 100644 --- a/src/util.h +++ b/src/util.h @@ -370,6 +370,7 @@ char *fstab_node_to_udev_node(const char *p); void filter_environ(const char *prefix); +bool tty_is_vc(const char *tty); const char *default_term_for_tty(const char *tty); bool running_in_vm(void); -- 2.30.2