靜默啟動
本頁適用於那些出於美觀或其他原因而傾向於將其系統啟動的記錄嚴格限制在最低限度的人。遵循本指南將刪除啟動過程中的所有文本。演示視頻
內核參數[編輯 | 編輯原始碼]
quiet
如果您仍發現消息被打印到控制台,則可能是dmesg向您發送了它認為重要的消息。您可以使用 quiet loglevel=level
來更改打印這些消息的級別,其中 level
是0到7之間的任意數字,其中0代表只有最關鍵的,7代表打印的調試級別(debug levels)。
quiet loglevel=3
請注意,只有同時使用 quiet
和 loglevel=level
且 quiet 在前才應當有效。loglevel 參數只會更改打印到控制台的內容,dmesg 本身的級別不會受到影響,並且仍然可以通過日誌(journal)和 dmesg 使用。有關詳細信息,請見內核參數。
如果您還想在引導時阻止 systemd 打印其版本號,您還應該將 udev.log_level=3
附加到內核參數中。如果在 initramfs 中使用 systemd,請改為附加 rd.udev.log_level=3
。見 systemd-udevd.service(8) § KERNEL COMMAND LINE 獲取詳細信息。
如果您在 initramfs 中使用 systemd
鈎子,則可能會在 initramfs 初始化期間獲得 systemd 消息。您可以傳遞 systemd.show_status=false
來禁用它們,或者傳遞 systemd.show_status=auto
只阻止成功的消息(因此在出現錯誤時,您仍然可以看到它們)。事實上,當使用 quiet
時,auto
已經被傳遞給了 systemd.show_status=auto
,但是出於某些原因,有時 initramfs 中的 systemd 無法獲得它。以下是您需要傳遞給內核的參數,以便在 initramfs 中使用 systemd 進行完全乾淨的啟動:
quiet loglevel=3 systemd.show_status=auto rd.udev.log_level=3
還可以用 touch ~/.hushlogin
刪除最後登錄消息。
移除控制台光標閃爍[編輯 | 編輯原始碼]
如果按照以下說明,啟動時的控制台光標會一直閃爍。這可以通過向內核傳遞 vt.global_cursor_default=0
來解決 [1]。
要恢復 TTY 中的光標,請運行:
# setterm -cursor on >> /etc/issue
sysctl[編輯 | 編輯原始碼]
要從控制台隱藏任何內核消息,請根據 [2] 添加或修改 kernel.printk
行:
/etc/sysctl.d/20-quiet-printk.conf
kernel.printk = 3 3 3 3
agetty[編輯 | 編輯原始碼]
要從控制台隱藏 agetty 打印的問題(issue)和「login:」提示行 [3],創建 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 檢查根文件系統。為此,請將 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@.service(8) 獲得可以傳遞給 systemd-fsck
的選項的更多信息,您可以更改服務檢查(或不檢查)文件系統的頻率。
使 GRUB 靜默[編輯 | 編輯原始碼]
要隱藏 GRUB 歡迎和引導消息,您可以安裝非官方的 grub-silentAUR 包。
安裝完成後,需要先將 GRUB 重新安裝到必要的分區中。
然後,以 /etc/default/grub.silent
為例,對 /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 系統在啟動時顯示供應商標誌,直到將控制權移交給引導加載程序;例如,聯想筆記本電腦上顯示一個鮮紅色的聯想標誌。這個供應商標誌通常被引導加載程序(如果使用標準 GRUB)或內核覆蓋。
為了避免內核覆蓋供應商徽標,Linux 4.19 引入了一個新的配置選項 FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER
,該選項將保留幀緩衝區的內容,直到需要在幀緩衝區控制台上打印文本為止。截至2018年11月(Linux 4.19.1),官方的 Arch Linux 內核使用 CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y
編譯。
當與低日誌級別相結合(以防止打印文本)時,可以在系統初始化時保留供應商徽標。請注意,標準配置中的 GRUB 會清空屏幕;考慮使用 EFISTUB 引導來直接引導到內核中,從而利用延遲接管(deferred takeover)。
內核命令行應該使用上面提到的 loglevel=3
或 rd.udev.log_level=3
。請注意,如果您經常在內核日誌中收到 Core temperature above threshold, cpu clock throttled
消息,則需要使用日誌級別2在啟動時使這些消息靜音。或者,如果您編譯自己的內核,請調整 arch/x86/kernel/cpu/mcheck/therm_throt.c
中消息的日誌級別。
如果你使用 Intel 圖形處理器,另見 Intel 圖形處理器#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
禁用延遲接管(deferred takeover)[編輯 | 編輯原始碼]
如果新行為導致問題,可以使用 fbcon=nodefer
內核參數禁用延遲接管。