開機自動登入 Linux 並直接啟動 X Window 應用程式,適用於 Linux 監控系統等無需身分驗證的專用場景。本文以 RedHat 7.2 為平台,結合啟動流程詳細實作。
啟動最後階段,init 依 /etc/inittab 最後一行執行:
x:5:respawn:/etc/X11/prefdm -nodaemon
prefdm 負責啟動 X Window,支援多種方式:
xdm:標準 X 顯示管理器gdm:進入 GNOME 桌面kdm:進入 KDE 桌面#!/bin/sh
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin
. /etc/profile.d/lang.sh
# 步驟 1:檢查自動登入條件
if [ -f /etc/sysconfig/autologin -a -x /usr/sbin/autologin ]; then
if /usr/sbin/autologin; then exit 0; fi
fi
# 步驟 2:非自動登入,依 /etc/sysconfig/desktop 偏好啟動 kdm/gdm/xdm
...
自動登入本質:繞過身分驗證,直接啟動 X Window。startx 可無參數完成啟動(尋找 .xinitrc/.xserverrc 或預設腳本)。修改 prefdm 註解條件判斷,直接執行 startx:
#!/bin/sh
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin
. /etc/profile.d/lang.sh
# 註解條件測試,直接啟動 startx
if /usr/X11R6/bin/startx; then exit 0; fi
確保 /etc/inittab 啟動等級為 5。重開機即直接進入 X Window(身分為 root),但可能不保留 root 原有桌面/Shell 設定。
觀察原版 prefdm 保留的自動登入介面:/usr/sbin/autologin 執行檔 + /etc/sysconfig/autologin 設定檔。
# config for autologin
USER=root
EXEC=/usr/X11R6/bin/startx
核心邏輯:
USER、EXECgetpwnam() 取得用戶 UID、GID、家目錄、Shellchown /dev/console、/dev/tty 給該用戶setuid/setgid 等進程身分相關系統呼叫HOME、SHELL、USER、LOGNAMEchdir 切換至用戶家目錄execvp() 執行 EXEC 指定程式(startx)編譯:gcc -o autologin autologin.c,複製至 /usr/sbin/autologin,設定檔置 /etc/sysconfig/autologin。重開機即自動登入並保留完整用戶環境。
若所有參數寫死在程式碼(預設 root、startx),prefdm 簡化為:
if /usr/sbin/autologin; then exit 0; fi
僅需複製執行檔。
switchdesk gnome(或 kde)後重開機即固定/root/.kde/Autostart/(注意不同用戶家目錄不同)啟動等級為 3 時,只需在啟動腳本加入指令即可;X Window 環境下利用桌面內建自動啟動介面最優雅。