On Tue, Sep 10, 2013 at 8:41 AM, Lennart Poettering <[email protected]>wrote:
> On Wed, 28.08.13 13:12, Michael Marineau ([email protected]) > 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... > And in my case there isn't a truly correct ordering either because I'm creating filesystem images that need to boot on a wide variety of platforms including QEMU which gives the user a VGA console most of the time but a serial console when using the -nographic option. The bootloader doesn't know the difference. > 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. >
_______________________________________________ systemd-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/systemd-devel
