[systemd-devel] [PATCH resend] getty-generator: Enable getty on all active serial consoles.

Lennart Poettering lennart at poettering.net
Tue Sep 10 08:41:31 PDT 2013


On Wed, 28.08.13 13:12, Michael Marineau (michael.marineau at coreos.com) wrote:

> This enables a getty on active kernel consoles even when they are not
> the last one specified on the kernel command line and mapped to
> /dev/console. Now the order "console=ttyS0 console=tty0" works in
> addition to "console=tty0 console=ttyS0".

Hmm, so when we added the generator initially we though about this and
came to the conclusion that it might be risky to spawn gettys on all
configured console outputs and we should limit the magic logic to the
primary console only. The kernel already makes a distinction between the
primary console, and all others (the latter only receive logs, but you
cannot read from them via /dev/console iirc), and so we propagated that
distinction into systemd, too.

I can totally see that this is confusing though, as nobody remembers the
right ordering... 

Kay, do you have an opinion about this?

> ---
>  src/getty-generator/getty-generator.c | 37 ++++++++++++++++++++++-------------
>  1 file changed, 23 insertions(+), 14 deletions(-)
> 
> diff --git a/src/getty-generator/getty-generator.c b/src/getty-generator/getty-generator.c
> index 4b7a60a..6c93806 100644
> --- a/src/getty-generator/getty-generator.c
> +++ b/src/getty-generator/getty-generator.c
> @@ -122,33 +122,42 @@ int main(int argc, char *argv[]) {
>          }
>  
>          if (read_one_line_file("/sys/class/tty/console/active", &active) >= 0) {
> -                const char *tty;
> -
> -                tty = strrchr(active, ' ');
> -                if (tty)
> -                        tty ++;
> -                else
> -                        tty = active;
> -
> -                /* Automatically add in a serial getty on the kernel
> -                 * console */
> -                if (isempty(tty) || tty_is_vc(tty))
> -                        free(active);
> -                else {
> +                char *w, *state;
> +                size_t l;
> +
> +                /* Automatically add in a serial getty on all active
> +                 * kernel consoles */
> +                FOREACH_WORD(w, l, active, state) {
> +                        char *tty;
>                          int k;
>  
> +                        tty = strndup(w, l);
> +                        if (!tty) {
> +                            log_oom();
> +                            free(active);
> +                            r = EXIT_FAILURE;
> +                            goto finish;
> +                        }
> +
> +                        if (isempty(tty) || tty_is_vc(tty)) {
> +                                free(tty);
> +                                continue;
> +                        }
> +
>                          /* We assume that gettys on virtual terminals are
>                           * started via manual configuration and do this magic
>                           * only for non-VC terminals. */
>  
>                          k = add_serial_getty(tty);
> -                        free(active);
>  
>                          if (k < 0) {
> +                                free(tty);
> +                                free(active);
>                                  r = EXIT_FAILURE;
>                                  goto finish;
>                          }
>                  }
> +                free(active);
>          }
>  
>          /* Automatically add in a serial getty on the first


Lennart

-- 
Lennart Poettering - Red Hat, Inc.


More information about the systemd-devel mailing list