在以 Linux 為基礎的監控系統、嵌入式裝置或自助終端機等應用場景中,系統開機後能自動登入並直接啟動 X Window 應用程式,無需人工干預,具有極高的實務價值。本文以 Red Hat 7.2 為實作平台,深入剖析 Linux 啟動流程的最後階段,詳細說明如何繞過身份驗證實現自動登入,並直接進入圖形介面運行指定應用程式。
Linux 核心啟動完成後,會啟動 init 進程(PID 1),它根據 /etc/inittab 的設定決定系統運行等級與啟動服務。在預設的運行等級 5(圖形介面模式)下,inittab 的最後一行通常類似:
x:5:respawn:/etc/X11/prefdm -nodaemon
這行指令會呼叫 /etc/X11/prefdm 腳本,它是 Red Hat 系列啟動圖形登入管理器的核心入口。該腳本的邏輯大致如下:
/etc/sysconfig/autologin 與 /usr/sbin/autologin);/etc/sysconfig/desktop 判斷使用者偏好的桌面環境(GNOME、KDE 或預設 XDM),並啟動對應的顯示管理器(gdm、kdm 或 xdm)。prefdm 腳本中,自動登入的觸發條件是一個條件測試開關。若我們註釋掉這段判斷邏輯,直接執行啟動 X Window 的指令,即可繞過圖形登入畫面,以 root 權限直接進入桌面。
startx 是 xinit 的前端封裝,提供更友善的介面。它會依序尋找使用者家目錄下的 .xinitrc、.xserverrc,找不到則使用系統預設值 /etc/X11/xinit/xinitrc 與 /etc/X11/xinit/xserverrc。因此,無需傳遞額外參數即可完成 X 服務與首個客戶端程式的啟動。
#!/bin/sh
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin
. /etc/profile.d/lang.sh
# 註釋掉原本的自動登入判斷邏輯
# if [ -f /etc/sysconfig/autologin -a -x /usr/sbin/autologin ]; then
# if /usr/sbin/autologin; then exit 0; fi
# fi
# 直接啟動 X Window
/usr/X11R6/bin/startx
exit 0
/etc/inittab 中的預設運行等級為 id:5:initdefault:(即運行等級 5)。上述方法雖能實現自動登入,但會以 root 身份啟動 X,可能不會載入一般使用者的桌面設定(如主題、面板配置、環境變數等)。若需在免密碼登入的同時保留特定使用者的完整桌面環境,建議採用以下進階做法:
autouser),設定無密碼或已知密碼。/etc/X11/prefdm 或使用 gdm/kdm 的自動登入功能(如 GDM 的 AutomaticLoginEnable=true 與 AutomaticLogin=autouser 設定)。~/.xinitrc 或桌面環境的自動啟動資料夾(~/.config/autostart/)中加入欲運行的應用程式啟動指令。自動登入雖方便,但會降低實體存取安全性。部署於公開環境時,請務必配合螢幕鎖定、BIOS 密碼、GRUB 密碼保護、單用戶模式防護等措施,並限制自動登入帳號的權限(避免使用 root),以減輕風險。