如何實現自動登入Linux

2021-04-14 15:48:33 字數 4881 閱讀 8804

開機自動

登入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...