]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
units: explicitly reset TTY before running stuff on console
authorLennart Poettering <lennart@poettering.net>
Thu, 18 Sep 2025 15:50:06 +0000 (17:50 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 18 Sep 2025 19:30:31 +0000 (21:30 +0200)
This adds TTYReset=yes to all units which run directly on the TTY. We
already had this in place for the gettys, but this adds it for the rest
that basically has StandardInput=tty + StandardOutput=tty set.

Originally, for these tools it wasn't necessary to reset the TTY,
because we after all already reset /dev/console very very early on once,
during PID1's early initialization, and hence there's no real reason to
do it again for these early boot services. But that's actually not
right, because since #36666 the TTY we reset from PID 1 is typically
/dev/console but the TTY those services are invoked on is typically the
resolved version of that, i.e. wherever that points. Now you might
think: if one is just an alias to the other, why does it matter to reset
this again? Well, because it's only a half-assed alias, and as it turns
out WIOCSWINSZ is not propagated from one to the other, i.e the terminal
dimesions we initialize for /dev/console don't propagate to whatever
that points to.

One option to address that would be to immediately propagate this down
ourselves (or to fix the kernel for it), but it felt safer to simply do
the reset again before the use, after all these one one-off services,
and there's no point in optimizing much here. Moreover, its probably
safer to give the guarantee that when the firstboot stuff (which after
all queries for pws to set) runs it definitely certainly guaranteed has
a properly reset terminal.

units/systemd-firstboot.service
units/systemd-homed-firstboot.service
units/systemd-storagetm.service.in

index 15b7744289b2d6c30fa42fb3ed3a2c30abaf82e2..31f02a8e00bb142b922316502d2cf81fe78db0f5 100644 (file)
@@ -35,6 +35,7 @@ ExecStart=systemd-firstboot --prompt-locale --prompt-keymap --prompt-timezone --
 StandardOutput=tty
 StandardInput=tty
 StandardError=tty
+TTYReset=yes
 
 # Optionally, pick up basic fields from credentials passed to the service
 # manager. This is useful for importing this data from nspawn's
index 3615940a4ec5ebe0ae7fe3f781a60fd24cdf1578..444ec3055d5906a462aca1d9e57b0683714d864b 100644 (file)
@@ -21,6 +21,7 @@ ExecStart=homectl firstboot --prompt-new-user
 StandardOutput=tty
 StandardInput=tty
 StandardError=tty
+TTYReset=yes
 ImportCredential=home.*
 
 [Install]
index 22770bf291c7c57171ed3f4a16a25bbfdb7327cd..60cd56933ef7b3b54e1e67f4a5057e2400796950 100644 (file)
@@ -24,4 +24,5 @@ Type=notify
 RemainAfterExit=yes
 StandardInput=tty
 StandardOutput=tty
+TTYReset=yes
 ExecStart={{LIBEXECDIR}}/systemd-storagetm --all