Silent boot (Русский)
Эта статья описывает, как убрать весь текст, выводимый в процессе загрузки. Видео-демонстрация
Параметры ядра
Измените параметры ядра в настройках вашего загрузчика, добавив:
quiet
vga=current
может позволить избежать странного поведения, например FS#32309. Помните, что это конфликтует с KMS, поэтому добавляйте этот параметр, только если есть какие-то проблемы.Если в консоль всё равно печатаются какие-то сообщения, это может быть dmesg, выводящий что-то, что он считает важными сообщениями. Вы можете изменить уровень выводимых сообщений, используя quiet loglevel=уровень
, где уровень
— число от 0 (критические сообщения) до 7 (отладочные сообщения).
quiet loglevel=3
Обратите внимание, что это работает, только если используются оба параметра и именно в таком порядке (quiet должен стоять первым). Параметр loglevel влияет только на то, что выводится на консоль; сообщения, которые не вывелись, по-прежнему можно будет прочитать как через журнал, так и через dmesg. Более подробная информация есть в документации ядра.
Чтобы systemd-udevd перестал выводить номер своей версии в процессе загрузки, добавьте udev.log_level=3
в параметры ядра. Если systemd используется в initramfs, используйте другой параметр rd.udev.log_level=3
. Подробнее в документации: systemd-udevd.service(8) § KERNEL COMMAND LINE.
Если вы используете хук systemd
в initramfs, он может выводить сообщения во время инициализации initramfs. Можно добавить systemd.show_status=false
для их скрытия, или systemd.show_status=auto
, чтобы скрыть только сообщения об успехе (что позволит вам увидеть сообщения об ошибках, если они будут). На самом деле, auto
уже используется по умолчанию при наличии параметра quiet
, однако иногда по какой-то причине systemd внутри initramfs не получает его. Ниже приведены параметры ядра, позволяющие получить полностью чистую загрузку с systemd в initramfs:
quiet loglevel=3 systemd.show_status=auto rd.udev.log_level=3
Также можно выполнить touch ~/.hushlogin
для скрытия сообщения «Last login».
Отключение мигания курсора
Курсор консоли при загрузке продолжает мигать, если вы следуете этим инструкциям. Это можно решить параметром ядра vt.global_cursor_default=0
[1].
Чтобы восстановить курсор в TTY, выполните:
# setterm -cursor on >> /etc/issue
sysctl
Чтобы скрыть любые сообщения ядра с консоли, добавьте или измените kernel.printk
[2]:
/etc/sysctl.d/20-quiet-printk.conf
kernel.printk = 3 3 3 3
agetty
Чтобы скрыть из консоли приглашение «login:» от agetty[3], создайте drop-in файл для службы getty@tty1.service
.
/etc/systemd/system/getty@tty1.service.d/skip-prompt.conf
[Service] ExecStart= ExecStart=-/usr/bin/agetty --skip-login --nonewline --noissue --autologin username --noclear %I $TERM
startx
Чтобы скрыть сообщения startx
, можно перенаправить его вывод на /dev/null
в .bash_profile примерно так:
$ [[ $(fgconsole 2>/dev/null) == 1 ]] && exec startx -- vt1 &> /dev/null
fsck
Чтобы скрыть сообщения fsck во время загрузки, перенастройте проверку корневой файловой системы на systemd. Для этого замените хук udev на systemd:
HOOKS=( base systemd fsck )
в файле /etc/mkinitcpio.conf
и пересоберите образ initramfs.
Затем отредактируйте службы systemd-fsck-root.service
и systemd-fsck@.service
, настроив StandardOutput
и StandardError
:
[Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/lib/systemd/systemd-fsck StandardOutput=null StandardError=journal+console TimeoutSec=0
Информацию об опциях systemd-fsck
можно почитать в systemd-fsck@.service(8) — например, можно настроить, как часто проверять (или не проверять) файловые системы.
Тихий GRUB
Чтобы скрыть сообщения приветствия и загрузки GRUB, можно использовать неофициальный пакет grub-silentAUR.
После установки пакета необходимо переустановить GRUB на нужный раздел.
Затем внесите необходимые изменения в /etc/default/grub
.
Нужны эти три строки:
GRUB_DEFAULT=0 GRUB_TIMEOUT=0 GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT
GRUB_TIMEOUT=0
и GRUB_HIDDEN_TIMEOUT=1
(или любое другое положительное значение), также установите GRUB_RECORDFAIL_TIMEOUT=$GRUB_HIDDEN_TIMEOUT
вместо GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT
. Иначе нажатие Esc
для отображения меню GRUB не будет работать.После этого перегенерируйте файл настроек grub.cfg
.
Логотип производителя из BIOS
Современные системы UEFI отображают логотип производителя при загрузке до передачи управления загрузчику; например, ноутбуки Lenovo отображают ярко-красный логотип Lenovo. Он обычно убирается с экрана загрузчиком (если используется стандартный GRUB) или ядром.
Чтобы ядро не убирало логотип производителя, в Linux 4.19 появилась новая настройка FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER
, при включении которой ядро не будет очищать фреймбуфер до момента, пока не потребуется вывести текст на консоль фреймбуфера. По состоянию на ноябрь 2018 года (Linux 4.19.1) официальные ядра Arch Linux компилируются с CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y
.
В сочетании с настроенным loglevel (для предотвращения вывода текста) это позволяет оставить логотип производителя на экране в процессе загрузки системы. Обратите внимание, что GRUB в стандартной конфигурации очищает экран; попробуйте использовать EFISTUB, чтобы загружаться напрямую в ядро и таким образом использовать отложенную очистку экрана.
В параметры ядра нужно добавить loglevel=3
или rd.udev.log_level=3
, как упоминалось выше. Обратите внимание, что если вы часто получаете сообщения Core temperature above threshold, cpu clock throttled
в журнале ядра, вам нужно использовать log level 2, чтобы скрыть их во время загрузки. В качестве альтернативы, если вы компилируете собственное ядро, настройте loglevel для этого сообщения в файле arch/x86/kernel/cpu/mcheck/therm_throt.c
.
Если вы используете видеокарту Intel, смотрите также Intel graphics (Русский)#Fastboot.
Дополнительное чтение:
- Phoronix: Linux 4.19 Adds Deferred Console Takeover Support For FBDEV - Cleaner Boot Process
- Hans de Goede: Adding deferred fbcon console takeover to the Fedora kernels
Отключение отложенной очистки экрана
Если новое поведение вызывает проблемы, вы можете отключить отложенную очистку экрана, добавив параметр ядра fbcon=nodefer
.