開機自動
登入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
fifi
# 第二步:如果不是自動
登入方式,就會在/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之前,還有工作要做。
三、自動
登入後,保持使用者原來的配置(桌面、shell以及其它的一些環境變數)。
觀察原來/etc/x11/prefdm指令碼的自動
登入部分:
......
# 第一步:檢視是否為自動
登入if [ -f /etc/sysconfig/autologin -a -x /usr/sbin/autologin ]; then
if /usr/sbin/autologin; then
exit 0
fifi
......
不難看出,指令碼中保留了自動
登入的介面:乙個可執行檔案/usr/sbin/autologin以及乙個配置檔案/etc/sysconfig/autologin。
1、/etc/sysconfig/autologin配置檔案的實現:
#config for autologin
user=root
exec=/usr/x11r6/bin/startx
說明,user指定自動
登入時的使用者名稱;exec指定啟動x要執行的程式。
2、/usr/sbin/autologin可執行檔案的實現
/*********************
**** autologin.c ****
*********************/
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char **argv)
//獲得使用者相關資訊
else
chown("/dev/console", uid, gid);
chown("/dev/tty", uid, gid);
//為控制台和終端設定使用者id及組id
//下面是設定使用者相關id
setregid(gid, gid);
setegid(gid);
setgid(gid);
setreuid(uid, uid);
seteuid(uid);
setuid(uid);
setenv("home", dir, 1);
setenv("shell", shell, 1);
setenv("user", user, 1);
setenv("logname", user, 1);
//設定使用者相關環境變數
chdir(dir);
//切換到使用者根目錄
user=null;
execvp(cmd, argv);
/*在配置完使用者的相關資訊後,執行啟動x window操作。注意這裡預設執行/usr/x11r6/bin/startx */
printf("error: couldn't exec %s: %s/n", cmd, strerror(errno));
return 2;
}執行gcc -o autologin autologin.c,拷貝autologin可執行檔案到/usr/sbin/autologin,拷貝autologin配置檔案到/etc/sysconfig/autologin。 重新啟動系統,會直接進入x window並保留使用者原來所有的風格。
如果不需要自動
登入的配置檔案/etc/sysconfig/autologin,所有的操作都在/usr/sbin/autologin以預設的方式實現(比如,預設登入身份為root,預設執行操作為/usr/x11r6/bin/startx等),那麼,/etc/x11/prefdm指令碼的自動
登入部分可簡化如下:
......
# 第一步:檢視是否為自動
登入if /usr/sbin/autologin; then
exit 0
fi//第二步 ......
......
即在指令碼中去掉條件測試開關,直接執行/usr/sbin/autologin,這時,只需要拷貝autologin可執行檔案到/usr/sbin/autologin,不再需要拷貝autologin配置檔案到/etc/sysconfig/autologin。
四、選擇進入kde或者gnome,並自動
啟動x window應用程式
如果重新啟動後系統進入了kde,而使用者需要進入gnome,只需執行switchdesk gnome在重新啟動系統即可,以後每次啟動時會自動
進入gnome;反之亦然。 一般系統自動
登入的目的是啟動x window後自動
執行某個xwindow程式。如果系統預設的啟動級別為3,那麼如果要在系統啟動後自動
執行某些應用程式,只需要在某些指令碼中加入相應命令即可,不再詳述。在xwindow啟動後自動
執行應用程式要複雜一些,幸好,kde和gnome都為此留下了自動
啟動介面。如果在kde桌面環境下自動
啟動應用程式,只需要把應用程式名字加入/root/.kde/autostart/目錄下即可(這裡注意不同使用者的根目錄可能不同,如使用者zyx的根目錄可能為/home/zyx)。如果在gnome桌面環境下自動
啟動應用程式,只需把應用程式的名字加入/主選單/程式/設定/會話/會話特性及啟動程式的startup programs屬性頁中即可
Discuz 如何實現自動註冊登入
本文實現功能 1.從原有系統進入論壇自動登入和註冊 2.實現彈框在本頁面,不進行跳轉 3.js在頁面載入時直接發起註冊請求 這個功能之前使用的uc user register這個函式來處理的,但是今天在開發使用者空間時就會出現問題。在我們原有的系統上新增乙個論壇,但是使用者資訊需要共享。實現方法 在...
Linux如何實現自動掛載
當我們新增了一塊新的硬碟,我們需要將其掛載到某一目錄下,在 linux 中所有的資料和裝置都是以檔案的形式來體現的,而檔案又是放置在目錄下的,所以在 linux 中的目錄結構管理變得至關重要。所謂的目錄結構 directory tree 就是以根目錄為主,然後向下呈現分支的目錄結構的自用檔案結構。所...
Linux實現自動登入的例項講解
使用expechercxljjbt實現自動登入的指令碼,網上有很多,可是都沒有乙個明白的說明,初學者一般都是照抄 可是為什麼要這麼寫卻不知其然。本文用乙個最短的例子說明指令碼的原理。指令碼 如下 usr bin expect set timeout 30 spawn ssh l username 1...