Stop the boot from waiting on a black screen for the console to answer
About 1 boot in 10 of an installed system stops on a black screen at
"Starting Switch Root" until a key is pressed. systemd 257 and later
asks the console for its size with ANSI escape sequences when PID 1
starts and waits for the reply; with Plymouth holding the VT the reply
sometimes never comes.
Measured in QEMU on repeated boots of one install: 3 hangs in 30 and 1
in 40 on the prebuilt UKI, 7 in 40 on the stock initramfs, every one of
them ended by pressing Enter; none in 40 with a serial console, none in
40 with plymouth.enable=0, and none in 80 with
systemd.tty.term.console=dumb, which makes systemd skip the query.
systemd fixed two variants of this in v261; Arch's 261.2 still shows it.
The parameter goes where the last Plymouth boot fix went (3f725531,
initramfs_async=0): into the packaged omarchy-defaults.conf for fresh
installs, and a migration rebuilds the boot image on existing systems,
once per machine, only where the booted command line lacks it. Nothing
visible changes under "quiet splash".
Refs #2931
This commit is contained in:
1 parent
2519fd9a97
commit
f03bf06742
4 files changed
+110
No files matched your search
@@ -0,0 +1,31 @@
|
||||
echo "Stop the boot from waiting on a black screen for the console to answer"
|
||||
|
||||
# systemd asks the console for its size when PID 1 starts and waits for the
|
||||
# reply. With Plymouth holding the screen the reply sometimes never comes, and
|
||||
# about 1 boot in 10 sits on a black screen until a key is pressed.
|
||||
# omarchy-defaults.conf now carries systemd.tty.term.console=dumb, which makes
|
||||
# systemd skip the query. The package has already written that file by the
|
||||
# time this runs; the boot image still holds the old command line until it is
|
||||
# rebuilt.
|
||||
|
||||
defaults_conf="${OMARCHY_LIMINE_DEFAULTS_CONF:-/etc/limine-entry-tool.d/omarchy-defaults.conf}"
|
||||
running_cmdline="${OMARCHY_RUNNING_CMDLINE:-/proc/cmdline}"
|
||||
rebuild_marker="${OMARCHY_LIMINE_REBUILD_MARKER:-/var/lib/omarchy/migrations/1791581004}"
|
||||
param="systemd.tty.term.console=dumb"
|
||||
|
||||
omarchy-cmd-present limine-mkinitcpio || exit 0
|
||||
[[ -f $defaults_conf && -r $running_cmdline ]] || exit 0
|
||||
|
||||
# The running kernel keeps its old command line until reboot, so a marker
|
||||
# records the machine-wide rebuild: another user's migration must not repeat
|
||||
# it before then, while a missing marker still retries an interrupted rebuild.
|
||||
[[ ! -e $rebuild_marker ]] || exit 0
|
||||
|
||||
# A machine that boots with it already, or whose defaults were edited to leave
|
||||
# it out, has nothing to rebuild.
|
||||
[[ " $(<"$running_cmdline") " != *" $param "* ]] || exit 0
|
||||
grep -Eq "^KERNEL_CMDLINE\[default\]\+=\".*${param//./\\.}.*\"" "$defaults_conf" || exit 0
|
||||
|
||||
echo "The booted kernel is missing $param; rebuilding the boot image"
|
||||
sudo limine-mkinitcpio
|
||||
sudo install -Dm644 /dev/null "$rebuild_marker"
|
||||
Reference in new issue
Block a user