「サイレントブート」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(同期)
(関連記事へのリンクを追加)
 
(5人の利用者による、間の14版が非表示)
2行目: 2行目:
 
[[en:Silent boot]]
 
[[en:Silent boot]]
 
[[es:Silent boot]]
 
[[es:Silent boot]]
  +
{{Related articles start}}
このページは、外観をスッキリさせたいなどの理由で、システム情報の表示を出来るだけ少なくしたい人のための情報を載せています。以下のガイドに従うことで起動時に表示されるテキストを全て消すことができます [http://www.youtube.com/watch?v=tuqhsqrhXk0]。
 
  +
{{Related|Plymouth}}
  +
{{Related articles end}}
  +
このページは、外観をスッキリさせたいなどの理由で、システム情報の表示を出来るだけ少なくしたい人のための情報を載せています。以下のガイドに従うことで起動時に表示されるテキストを全て消すことができます。[https://www.youtube.com/watch?v=tuqhsqrhXk0 ビデオデモ]
   
 
== カーネルパラメータ ==
 
== カーネルパラメータ ==
  +
   
 
ブートローダーの設定オプションを使って[[カーネルパラメータ]]を変更して、以下のパラメータを指定します:
 
ブートローダーの設定オプションを使って[[カーネルパラメータ]]を変更して、以下のパラメータを指定します:
   
quiet vga=current
+
quiet
   
{{ic|1=vga=current}} は {{Bug|32309}} のような問題のある挙動を発生させないようにするカーネルパラメータです。
+
{{Note|{{ic|1=vga=current}} は {{Bug|32309}} のような問題のある挙動を発生させないようにするカーネルパラメータです。[[カーネルモード設定]]が有効な場合は、{{ic|1=vga=current}} オプションは省略してください。}}
   
 
上記のカーネルパラメータを設定してもメッセージがコンソールに表示される場合、おそらく dmesg が重要と思われるメッセージを送信しています。{{ic|1=quiet loglevel=<level>}} を使うことで表示するメッセージのレベルを変更することができます。{{ic|<level>}} は 0 から 7 の間の数字に置き換えてください。0 は最もクリティカルな情報だけを表示し、7 はデバッグ情報まで表示するレベルです。
 
上記のカーネルパラメータを設定してもメッセージがコンソールに表示される場合、おそらく dmesg が重要と思われるメッセージを送信しています。{{ic|1=quiet loglevel=<level>}} を使うことで表示するメッセージのレベルを変更することができます。{{ic|<level>}} は 0 から 7 の間の数字に置き換えてください。0 は最もクリティカルな情報だけを表示し、7 はデバッグ情報まで表示するレベルです。
   
quiet loglevel=3 vga=current
+
quiet loglevel=3
   
 
上記の設定は {{ic|quiet}} と {{ic|1=loglevel=<level>}} の両方を、この順番で使用したときにのみ適用されます ({{ic|quiet}} が先)。{{ic|loglevel}} パラメータはコンソールへの表示だけに影響します。dmesg 自体のレベルは変更されず、journal や {{ic|dmesg}} コマンドでメッセージを閲覧することが可能です。詳しくは {{Pkg|linux-docs}} パッケージの {{ic|Documentation/kernel-parameters.txt}} ファイルを見て下さい。
 
上記の設定は {{ic|quiet}} と {{ic|1=loglevel=<level>}} の両方を、この順番で使用したときにのみ適用されます ({{ic|quiet}} が先)。{{ic|loglevel}} パラメータはコンソールへの表示だけに影響します。dmesg 自体のレベルは変更されず、journal や {{ic|dmesg}} コマンドでメッセージを閲覧することが可能です。詳しくは {{Pkg|linux-docs}} パッケージの {{ic|Documentation/kernel-parameters.txt}} ファイルを見て下さい。
   
起動時に systemd のバージョン番号が表示されないようにしたい場合、カーネルコマンドラインに {{ic|1=udev.log-priority=3}} を追加してください ([http://www.freedesktop.org/software/systemd/man/systemd-udevd.service.html#Kernel%20command%20line ソース])。[[initramfs]] で systemd が使われている場合、{{ic|1=rd.udev.log-priority=3}} を追加してください。
+
起動時に systemd のバージョン番号が表示されないようにしたい場合、カーネルコマンドラインに {{ic|1=udev.log_priority=3}} を追加してください ([https://www.freedesktop.org/software/systemd/man/systemd-udevd.service.html#Kernel%20command%20line ソース])。[[initramfs]] で systemd が使われている場合、{{ic|1=rd.udev.log_priority=3}} を追加してください。
   
 
[[initramfs]] で {{ic|systemd}} フックを使っている場合、initramfs の初期化で systemd のメッセージが表示されることがあります。{{ic|1=rd.systemd.show_status=false}} を使うことでメッセージは無効化できます。もしくは {{ic|1=rd.systemd.show_status=auto}} で成功メッセージだけ消すことができます (エラーの場合は表示されます)。{{ic|1=quiet}} を使用すると自動的に {{ic|1=systemd.show_status=auto}} が設定されますが、何らかの理由で initramfs の systemd は設定を認識しないことがあります。以下は systemd を使って起動するときに [[initramfs]] で全くメッセージを出さないようにするのにカーネルに指定する必要があるパラメータです:
 
[[initramfs]] で {{ic|systemd}} フックを使っている場合、initramfs の初期化で systemd のメッセージが表示されることがあります。{{ic|1=rd.systemd.show_status=false}} を使うことでメッセージは無効化できます。もしくは {{ic|1=rd.systemd.show_status=auto}} で成功メッセージだけ消すことができます (エラーの場合は表示されます)。{{ic|1=quiet}} を使用すると自動的に {{ic|1=systemd.show_status=auto}} が設定されますが、何らかの理由で initramfs の systemd は設定を認識しないことがあります。以下は systemd を使って起動するときに [[initramfs]] で全くメッセージを出さないようにするのにカーネルに指定する必要があるパラメータです:
   
quiet loglevel=3 rd.systemd.show_status=auto rd.udev.log-priority=3
+
quiet loglevel=3 rd.systemd.show_status=auto rd.udev.log_priority=3
   
 
Last login メッセージを消すには {{ic|touch ~/.hushlogin}} を実行してください。
 
Last login メッセージを消すには {{ic|touch ~/.hushlogin}} を実行してください。
  +
  +
== 点滅するコンソールカーソルを消す ==
  +
  +
上記の設定をしてもコンソールカーソルは点滅し続けます。カーネルに {{ic|<nowiki>vt.global_cursor_default=0</nowiki>}} を設定することで点滅を止めることができます [http://www.friendlyarm.net/forum/topic/2998]。
  +
  +
tty でカーソルを元に戻すには以下を実行:
  +
# setterm -cursor on >> /etc/issue
   
 
== sysctl ==
 
== sysctl ==
   
コンソールからカーネルメッセージを消すには [http://unix.stackexchange.com/a/45525/27433 以下] のように {{ic|kernel.printk}} 行を追加・修正してください:
+
コンソールからカーネルメッセージを消すには [https://unix.stackexchange.com/a/45525/27433 以下] のように {{ic|kernel.printk}} 行を追加・修正してください:
   
 
{{hc|/etc/sysctl.d/20-quiet-printk.conf|2=
 
{{hc|/etc/sysctl.d/20-quiet-printk.conf|2=
 
kernel.printk = 3 3 3 3
 
kernel.printk = 3 3 3 3
  +
}}
  +
  +
== agetty ==
  +
  +
コンソール [https://github.com/karelzak/util-linux/commit/933956cb499e12d0d0e5228b6de34ffa5c9a9e08] から agetty の表示と "login: "のプロンプト行を隠すには、{{ic|getty@tty1.service}} の [[ドロップインスニペット]] を作成します。
  +
  +
{{hc|/etc/systemd/system/getty@tty1.service.d/skip-prompt.conf|2=
  +
[Service]
  +
ExecStart=
  +
ExecStart=-/usr/bin/agetty '''--skip-login''' --nonewline --noissue --autologin ''username'' --noclear %I $TERM
 
}}
 
}}
   
37行目: 58行目:
   
 
{{ic|startx}} メッセージを消したい場合、以下のように [https://github.com/kaihendry/Kai-s--HOME/blob/master/.bash_profile .bash_profile] などで出力を {{ic|/dev/null}} にリダイレクトすることができます:
 
{{ic|startx}} メッセージを消したい場合、以下のように [https://github.com/kaihendry/Kai-s--HOME/blob/master/.bash_profile .bash_profile] などで出力を {{ic|/dev/null}} にリダイレクトすることができます:
{{Warning|Xorg 1.16 以上で rootless ログインをする場合、[[Xorg#リダイレクトが機能しない]] を参照。}}
+
{{Warning|Xorg 1.16 以上で rootless ログインをする場合、[[Xorg#リダイレクトが機能しない]]を参照。}}
   
 
$ [[ $(fgconsole 2>/dev/null) == 1 ]] && exec startx -- vt1 &> /dev/null
 
$ [[ $(fgconsole 2>/dev/null) == 1 ]] && exec startx -- vt1 &> /dev/null
 
未解決の問題:
 
* [https://bugs.freedesktop.org/show_bug.cgi?id=57216 Systemd shutdowns are not quiet] - systemd v206 現在、{{ic|quiet}} カーネルコマンドラインはシャットダウン時にも適用されますが、{{Pkg|mkinitcpio}} で {{ic|shutdown}} フックを使用する場合、この機能はパラメータをサポートするように設定されていません。
 
   
 
== fsck ==
 
== fsck ==
48行目: 66行目:
 
起動時の fsck メッセージを消すには、systemd に root ファイルシステムをチェックさせてください。まず {{ic|/etc/mkinitcpio.conf}} の HOOKS から ''fsck'' を削除:
 
起動時の fsck メッセージを消すには、systemd に root ファイルシステムをチェックさせてください。まず {{ic|/etc/mkinitcpio.conf}} の HOOKS から ''fsck'' を削除:
   
HOOKS=(...)
+
HOOKS=( base systemd fsck ...)
   
 
そして次を実行:
 
そして次を実行:
66行目: 84行目:
 
TimeoutSec=0
 
TimeoutSec=0
   
{{ic|systemd-fsck}} に指定するオプションの情報は [http://www.freedesktop.org/software/systemd/man/systemd-fsck@.service.html こちら] を見て下さい。サービスがファイルシステムをチェックするしない頻度を変えられます。
+
{{ic|systemd-fsck}} に指定するオプションの情報は [https://www.freedesktop.org/software/systemd/man/systemd-fsck@.service.html こちら] を見て下さい。サービスがファイルシステムをチェックする(しない)頻度を変えられます。
   
== 点滅するコンソールカーソルを消す ==
+
== GRUB の表示を消す ==
   
  +
非公式の {{AUR|grub-silent}} パッケージをインストールすることで、GRUB の起動メッセージを消すことができます。
上記の設定をしてもコンソールカーソルは点滅し続けます。カーネルに {{ic|<nowiki>vt.global_cursor_default=0</nowiki>}} を設定することで点滅を止めることができます ([http://www.friendlyarm.net/forum/topic/2998 ソース])。
 
   
  +
インストールしたら、[[GRUB]] を適切なパーティションに再インストールしてください。
tty でカーソルを元に戻すには以下を実行:
 
  +
# setterm -cursor on >> /etc/issue
 
  +
そして {{ic|/etc/default/grub.silent}} を参考に、{{ic|/etc/default/grub}} に必要な変更を加えてください。
  +
  +
以下の3行は必須です:
  +
  +
GRUB_DEFAULT=0
  +
GRUB_TIMEOUT=0
  +
GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT
  +
  +
{{Note|{{ic|1=GRUB_TIMEOUT=0}} と {{ic|1=GRUB_HIDDEN_TIMEOUT=1}} (または他の正数値) を設定する場合、{{ic|1=GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT}} の代わりに {{ic|1=GRUB_RECORDFAIL_TIMEOUT=$GRUB_HIDDEN_TIMEOUT}} と設定してください。そうしないと起動時に {{ic|Esc}} を押しても GRUB メニューは表示されません。}}
  +
  +
最後に、{{ic|grub.cfg}} ファイルを再生成してください。
  +
  +
== BIOS からベンダーロゴを保持または無効にする==
  +
  +
最新の UEFI システムは、ブートローダーに制御を渡すまで、ブート時にベンダーのロゴを表示します。例えば Lenovo ラップトップは、真っ赤な Lenovo ロゴを表示します。このベンダーのロゴは通常、ブートローダー(標準の GRUB が使用されている場合)またはカーネルによって空白にされます。
  +
  +
カーネルがベンダーロゴを空白にするのを防ぐために、Linux4.19 は新しい構成オプション{{ic|FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER}} を導入しました。これは、フレームバッファーコンソールでテキストを印刷する必要があるまでフレームバッファーの内容を保持します。 2018年11月 (Linux 4.19.1) の時点で、公式の ArchLinux カーネルは {{ic|1=CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y}} でコンパイルされています。
  +
  +
(テキストが印刷されないようにするために)低いログレベルと組み合わせると、システムの初期化中にベンダーのロゴを保持できます。標準構成の GRUB は画面を空白にすることに注意してください。代わりに [[EFISTUB]] ブートを使用してカーネルを直接ブートし、遅延テイクオーバーを活用することを検討してください。
  +
[https://www.youtube.com/watch?v=5DW2JgJmsuY ビデオデモ]
  +
  +
カーネルコマンドラインは、上記のように {{ic|1=loglevel=3}} または {{ic|1=rd.udev.log_priority=3}} を使用する必要があります。カーネルログで {{ic|Core temperature above threshold, cpu clock throttle}} メッセージを頻繁に受信する場合は、ログレベル2を使用して、起動時にこれらのメッセージを無音にする必要があることに注意してください。または、独自のカーネルをコンパイルする場合は、{{ic|arch/x86/kernel/cpu/mcheck/therm_throt.c}} でメッセージのログレベルを調整します。
  +
  +
[[Intel Graphics]] を使用する場合は、カーネルコマンドラインで {{ic|1=i915.fastboot=1}} を設定して、起動時に不要なモード設定(および画面のブランク)を回避します。
  +
  +
参考文献:
  +
  +
* [https://www.phoronix.com/scan.php?page=news_item&px=Linux-4.19-FBDEV-Defer-Console Phoronix: Linux 4.19 Adds Deferred Console Takeover Support For FBDEV - Cleaner Boot Process]
  +
* [https://lists.fedoraproject.org/archives/list/kernel@lists.fedoraproject.org/thread/3MWCKJ2DVJPC4INXPKB4ECFZLA7X5RTI/ Hans de Goede: Adding deferred fbcon console takeover to the Fedora kernels]
  +
  +
=== 遅延テイクオーバーの無効化 ===
  +
  +
新しい動作で問題が発生する場合は、{{ic|1=fbcon=nodefer}} [[カーネルパラメータ]] を使用して遅延テイクオーバーを無効にできます。

2023年8月30日 (水) 01:31時点における最新版

関連記事

このページは、外観をスッキリさせたいなどの理由で、システム情報の表示を出来るだけ少なくしたい人のための情報を載せています。以下のガイドに従うことで起動時に表示されるテキストを全て消すことができます。ビデオデモ

カーネルパラメータ

ブートローダーの設定オプションを使ってカーネルパラメータを変更して、以下のパラメータを指定します:

quiet
ノート: vga=currentFS#32309 のような問題のある挙動を発生させないようにするカーネルパラメータです。カーネルモード設定が有効な場合は、vga=current オプションは省略してください。

上記のカーネルパラメータを設定してもメッセージがコンソールに表示される場合、おそらく dmesg が重要と思われるメッセージを送信しています。quiet loglevel=<level> を使うことで表示するメッセージのレベルを変更することができます。<level> は 0 から 7 の間の数字に置き換えてください。0 は最もクリティカルな情報だけを表示し、7 はデバッグ情報まで表示するレベルです。

quiet loglevel=3

上記の設定は quietloglevel=<level> の両方を、この順番で使用したときにのみ適用されます (quiet が先)。loglevel パラメータはコンソールへの表示だけに影響します。dmesg 自体のレベルは変更されず、journal や dmesg コマンドでメッセージを閲覧することが可能です。詳しくは linux-docs パッケージの Documentation/kernel-parameters.txt ファイルを見て下さい。

起動時に systemd のバージョン番号が表示されないようにしたい場合、カーネルコマンドラインに udev.log_priority=3 を追加してください (ソース)。initramfs で systemd が使われている場合、rd.udev.log_priority=3 を追加してください。

initramfssystemd フックを使っている場合、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 にリダイレクトすることができます:

警告: Xorg 1.16 以上で rootless ログインをする場合、Xorg#リダイレクトが機能しないを参照。
$ [[ $(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.servicesystemd-fsck@.service ファイルを /etc/systemd/system/ にコピーして、編集し、StandardOutputStandardError を以下のように設定します:

(...)

[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_TIMEOUT=0GRUB_HIDDEN_TIMEOUT=1 (または他の正数値) を設定する場合、GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT の代わりに GRUB_RECORDFAIL_TIMEOUT=$GRUB_HIDDEN_TIMEOUT と設定してください。そうしないと起動時に Esc を押しても GRUB メニューは表示されません。

最後に、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 を設定して、起動時に不要なモード設定(および画面のブランク)を回避します。

参考文献:

遅延テイクオーバーの無効化

新しい動作で問題が発生する場合は、fbcon=nodefer カーネルパラメータ を使用して遅延テイクオーバーを無効にできます。