サイレントブート
このページは、外観をスッキリさせたいなどの理由で、システム情報の表示を出来るだけ少なくしたい人のための情報を載せています。以下のガイドに従うことで起動時に表示されるテキストを全て消すことができます。ビデオデモ
目次
カーネルパラメータ
ブートローダーの設定オプションを使ってカーネルパラメータを変更して、以下のパラメータを指定します:
quiet
上記のカーネルパラメータを設定してもメッセージがコンソールに表示される場合、おそらく dmesg が重要と思われるメッセージを送信しています。quiet loglevel=<level>
を使うことで表示するメッセージのレベルを変更することができます。<level>
は 0 から 7 の間の数字に置き換えてください。0 は最もクリティカルな情報だけを表示し、7 はデバッグ情報まで表示するレベルです。
quiet loglevel=3
上記の設定は quiet
と loglevel=<level>
の両方を、この順番で使用したときにのみ適用されます (quiet
が先)。loglevel
パラメータはコンソールへの表示だけに影響します。dmesg 自体のレベルは変更されず、journal や dmesg
コマンドでメッセージを閲覧することが可能です。詳しくは linux-docs パッケージの Documentation/kernel-parameters.txt
ファイルを見て下さい。
起動時に systemd のバージョン番号が表示されないようにしたい場合、カーネルコマンドラインに udev.log_priority=3
を追加してください (ソース)。initramfs で systemd が使われている場合、rd.udev.log_priority=3
を追加してください。
initramfs で systemd
フックを使っている場合、initramfs の初期化で systemd のメッセージが表示されることがあります。rd.systemd.show_status=false
を使うことでメッセージは無効化できます。もしくは rd.systemd.show_status=auto
で成功メッセージだけ消すことができます (エラーの場合は表示されます)。quiet
を使用すると自動的に systemd.show_status=auto
が設定されますが、何らかの理由で initramfs の systemd は設定を認識しないことがあります。以下は systemd を使って起動するときに initramfs で全くメッセージを出さないようにするのにカーネルに指定する必要があるパラメータです:
quiet loglevel=3 rd.systemd.show_status=auto rd.udev.log_priority=3
Last login メッセージを消すには touch ~/.hushlogin
を実行してください。
点滅するコンソールカーソルを消す
上記の設定をしてもコンソールカーソルは点滅し続けます。カーネルに vt.global_cursor_default=0
を設定することで点滅を止めることができます [1]。
tty でカーソルを元に戻すには以下を実行:
# setterm -cursor on >> /etc/issue
sysctl
コンソールからカーネルメッセージを消すには 以下 のように kernel.printk
行を追加・修正してください:
/etc/sysctl.d/20-quiet-printk.conf
kernel.printk = 3 3 3 3
agetty
コンソール [2] から agetty の表示と "login: "のプロンプト行を隠すには、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
メッセージを消したい場合、以下のように .bash_profile などで出力を /dev/null
にリダイレクトすることができます:
$ [[ $(fgconsole 2>/dev/null) == 1 ]] && exec startx -- vt1 &> /dev/null
fsck
起動時の fsck メッセージを消すには、systemd に root ファイルシステムをチェックさせてください。まず /etc/mkinitcpio.conf
の HOOKS から fsck を削除:
HOOKS=( base systemd fsck ...)
そして次を実行:
# mkinitcpio -p linux
/usr/lib/systemd/system/
にある systemd-fsck-root.service
と systemd-fsck@.service
ファイルを /etc/systemd/system/
にコピーして、編集し、StandardOutput と StandardError を以下のように設定します:
(...) [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/lib/systemd/systemd-fsck StandardOutput=null StandardError=journal+console TimeoutSec=0
systemd-fsck
に指定するオプションの情報は こちら を見て下さい。サービスがファイルシステムをチェックする(しない)頻度を変えられます。
GRUB の表示を消す
非公式の grub-silentAUR パッケージをインストールすることで、GRUB の起動メッセージを消すことができます。
インストールしたら、GRUB を適切なパーティションに再インストールしてください。
そして /etc/default/grub.silent
を参考に、/etc/default/grub
に必要な変更を加えてください。
以下の3行は必須です:
GRUB_DEFAULT=0 GRUB_TIMEOUT=0 GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT
最後に、grub.cfg
ファイルを再生成してください。
BIOS からベンダーロゴを保持または無効にする
最新の UEFI システムは、ブートローダーに制御を渡すまで、ブート時にベンダーのロゴを表示します。例えば Lenovo ラップトップは、真っ赤な Lenovo ロゴを表示します。このベンダーのロゴは通常、ブートローダー(標準の GRUB が使用されている場合)またはカーネルによって空白にされます。
カーネルがベンダーロゴを空白にするのを防ぐために、Linux4.19 は新しい構成オプションFRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER
を導入しました。これは、フレームバッファーコンソールでテキストを印刷する必要があるまでフレームバッファーの内容を保持します。 2018年11月 (Linux 4.19.1) の時点で、公式の ArchLinux カーネルは CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y
でコンパイルされています。
(テキストが印刷されないようにするために)低いログレベルと組み合わせると、システムの初期化中にベンダーのロゴを保持できます。標準構成の GRUB は画面を空白にすることに注意してください。代わりに EFISTUB ブートを使用してカーネルを直接ブートし、遅延テイクオーバーを活用することを検討してください。 ビデオデモ
カーネルコマンドラインは、上記のように loglevel=3
または rd.udev.log_priority=3
を使用する必要があります。カーネルログで Core temperature above threshold, cpu clock throttle
メッセージを頻繁に受信する場合は、ログレベル2を使用して、起動時にこれらのメッセージを無音にする必要があることに注意してください。または、独自のカーネルをコンパイルする場合は、arch/x86/kernel/cpu/mcheck/therm_throt.c
でメッセージのログレベルを調整します。
Intel Graphics を使用する場合は、カーネルコマンドラインで i915.fastboot=1
を設定して、起動時に不要なモード設定(および画面のブランク)を回避します。
参考文献:
- 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
カーネルパラメータ を使用して遅延テイクオーバーを無効にできます。