class="152938">
開機自動登錄Linux,並自動運行XWindow應用程序,有其特殊的應用背景,如基於Linux平台的監控系統,Linux啟動後不需要身份驗證,而直接運行監控程序等等。本文以Redhat7.2為平台,結合Linux啟動過程,介紹了如何避免身份驗證自動登錄,並直接進入X;Window自動運行應用程序。;
一、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之前,還有工作要做。