max / alloy
1 file changed,
+32 insertions,
-0 deletions
| @@ -1,0 +1,32 @@ | |||
| 1 | + | # Do not bring the greeter back while the machine is going down. | |
| 2 | + | # | |
| 3 | + | # Reported by Max 2026-09-03: rebooting flashes the login screen with garbled | |
| 4 | + | # colours and what looks like text pasted into the username field, and only | |
| 5 | + | # then reboots. Measured in fw12's shutdown journal rather than guessed: | |
| 6 | + | # | |
| 7 | + | # greetd[2434]: session opened for user greeter | |
| 8 | + | # greetd: pam_systemd: Failed to issue CreateSession() varlink call | |
| 9 | + | # systemd[1]: Stopping greetd.service - Greeter daemon... | |
| 10 | + | # systemd[1]: Stopped alloy-vtrgb.service - Alloy console palette (Akari). | |
| 11 | + | # | |
| 12 | + | # All in the same second. The session ending for the reboot is an ordinary | |
| 13 | + | # session exit as far as greetd is concerned, so `Restart=always` respawns it, | |
| 14 | + | # and the vendor unit's `Conflicts=shutdown.target` only stops it once the | |
| 15 | + | # shutdown transaction reaches it. In that window a fresh tuigreet draws on | |
| 16 | + | # VT1 while systemd's own shutdown messages are writing to the same console | |
| 17 | + | # and alloy-vtrgb is being torn down. The greeter's theme names ANSI slots | |
| 18 | + | # that alloy-vtrgb defines (see etc/greetd/config.toml), so a greeter drawn | |
| 19 | + | # after it stops is painted in the console's stock palette, which is the | |
| 20 | + | # "artifacting". `--remember` supplies the username sitting in the field. | |
| 21 | + | # | |
| 22 | + | # Conflicts= cannot fix this: it fires when a start job is ENQUEUED, which is | |
| 23 | + | # the trap 10-installer-medium.conf already records paying for. This refuses | |
| 24 | + | # the start instead, which is the only half of the race Alloy owns. | |
| 25 | + | # | |
| 26 | + | # `is-system-running` reports `stopping` from the moment the shutdown | |
| 27 | + | # transaction begins, so this is false exactly during shutdown and true on | |
| 28 | + | # every ordinary logout, which must still return to the greeter. systemd | |
| 29 | + | # retries under Restart= until the shutdown job stops the unit; those retries | |
| 30 | + | # write nothing to the console, which is the whole point. | |
| 31 | + | [Service] | |
| 32 | + | ExecStartPre=/bin/sh -c '[ "$(systemctl is-system-running)" != stopping ]' |