如何實現Linux操作系統的自動登錄
- 發布于:2021-10-25
- 共 244 人圍觀
一、Linux啟動的最后階段的工作
Linux在啟動過程的最后階段(具體啟動步驟略),init會根據/etc/inittab文件的最后一行x:5:respawn:/etc/X11/prefdm-nodaemon運行/etc/X11/prefdm腳本,(Redhat7.2缺省時是這樣的)。prefdm腳本的主要任務是完成X Window的啟動,可以有幾種啟動X Window的方法,都包含在prefdm腳本中,幾種主要方法有:
運行xdm啟動X Window;
運行gdm,進入gnome桌面環境;
運行kdm進入kde桌面環境;
自動登錄進入Linux;
prefdm腳本框架大致如下:
#!/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
# 第二步:如果不是自動登錄方式,就會在/etc/sysconfig/desktop中搜尋用戶偏愛的登錄方式
......
# 可以是kdm、gdm以及xdm,并運行相應的kdm、gdm以及xdm。
二、自動登錄的實現(autologin的實現)
在/etc/X11/prefdm腳本中,是否實現自動登錄有一個條件測試開關,事實上,可以在這里注釋掉測試開關,直接執行啟動X Window的操作。
自動登錄實質上就是繞過身份驗證,直接啟動X Window。X Window的啟動可以由xinit來完成。
Xinit用來啟動X Window系統服務器以及系統上的第一個客戶程序,可以通過為xinit傳遞命令行參數的形式指定要啟動的服務器及客戶程序。如果不傳遞參數給xinit,它將在用戶的根目錄下尋找并運行.xinitrc腳本來啟動客戶程序;在用戶的根目錄下尋找并運行.xserverrc腳本來啟動服務器。如果xinit在用戶的根目錄下找不到.xinitrc、.xserverrc,xinit將使用缺省的X:0。實際上,用startx來啟動X更為方便。對于運行單一會話的XWindow系統,startx提供了更為良好的用戶接口。同樣,startx首先在用戶的根目錄下尋找.xinitrc及.xserverrc腳本,如果找不到這兩個腳本,startx將使用/etc/X11/xinit/xinitrc以及/etc/X11/xinit/xserverrc腳本。startx腳本的最基本框架是:
a、 尋找.xinitrc,如果沒有則使用xinitrc;
b、 尋找.xserverrc,如果沒有則使用xserverrc;
c、 根據找到的腳本確定xinit的參數;
由此可看出,startx在不需要傳遞任何參數的情況下,可以完成啟動X的任務,因此,可以如下修改/etc/X11/prefdm腳本來實現自動登錄:
#!/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
#注釋掉上邊的條件測試,直接運行startx
if /usr/X11R6/bin/startx; then
exit 0
fi
#fi
當然,應確保/etc/inittab中的啟動級別為5。
重新啟動系統,會發現系統不驗證用戶身份,直接進入XWindow,此時的用戶身份為root。但是,如果原來root有自己的桌面、默認shell時,上述方法啟動X不一定保證還能擁有原來的設置。為了在啟動X后,在避免驗證身份的同時,又不改變用戶原來的設置,那么在運行startx之前,還有工作要做。
標簽: