Silent boot (Русский) - ArchWiki

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

Ссылки по теме

- Plymouth (Русский)

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

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

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

    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.

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

- 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`.

Category:

- Boot process (Русский)