Silent boot (Русский)

From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Silent boot. Дата последней синхронизации: 21 октября 2023. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Эта статья описывает, как убрать весь текст, выводимый в процессе загрузки. Видео-демонстрация

Параметры ядра

Измените параметры ядра в настройках вашего загрузчика, добавив:

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 примерно так:

Примечание: Это не работает при использовании Xorg без прав суперпользователя. Смотрите Xorg (Русский)#Перенаправление журнала сеанса.
$ [[ $(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.

Дополнительное чтение:

Отключение отложенной очистки экрана

Если новое поведение вызывает проблемы, вы можете отключить отложенную очистку экрана, добавив параметр ядра fbcon=nodefer.