Linux開機自動登入(文字模式)
Linux系統啟動登入過程
以RedHat/CentOS為例,Linux系統Level3模式下從啟動到登入的整個過程大致如下:
1> 載入BIOS資訊:包含了CPU/顯卡/記憶體/硬碟/網卡等硬體資訊、裝置啟動順序、時鐘資訊等等
2> 根據BIOS的啟動順序資訊,依次執行,直到找到引導檔案
3> Boot Loader:載入啟動引導檔案
4> 載入核心,完成Linux核心環境的建立
5> 執行/sbin/init程式,讀取設定檔/etc/inittab,設定運行等級,如level 3(這是載入完核心後,系統執行的第一個程式)
6> init程式執行指令碼/etc/rc.d/rc.sysinit:設定PATH變數、設定網路設定、啟動swap分區、設定/proc等等
7> 依據/etc/modules.conf檔案或/etc/modules.d目錄下的檔案來裝載核心模組
8> 選擇的運行等級是3,啟動/etc/rc.d/rc.3.d/目錄下的指令碼程式,就是常說的開機自啟服務
9> 執行/etc/rc.local指令碼程式
10> 執行/sbin/mingetty程式,讀取使用者列表,並將使用者名稱轉化為/bin/login程式調用的參數
11> 執行/bin/login程式,等待輸入並驗證使用者名稱和密碼
至此,就清楚在level3模式下,想要實現自動登入,就需要在第10和11這兩步進行修改。
重新編譯/sbin/mingetty 程式
1. 查看當前系統的/sbin/mingetty 所屬的軟體包及其版本(例如:mingetty-1.08-5.el6.x86_64)
2. 根據目前的版本,進入網站http://download.chinaunix.net/,搜尋索引鍵“mingetty”,然後下載對應的源碼軟體包(由於該網站的相關資源不足,因此就下載mingetty-1.07-5.src.rpm 這個版本,也可直接在當前系統下通過wget 命令直接下載)
| 1 |
wget http://down1.chinaunix.net/distfiles/mingetty-1.07-5.src.rpm |
3. 將下載/上傳的源碼軟體包移動到/opt/rh 目錄下,然後解壓(應當有規劃地放置和管理檔案)
| 1234 |
mv mingetty-1.07-5.src.rpm /opt/rhcd /opt/rhrpm2cpio mingetty-1.07-5.src.rpm |cpio -divtar -zxvf mingetty-1.07.tar.gz |
4. 修改檔案mingetty-1.07/mingetty.c 中的代碼(設定開機自動登入的使用者為xxx,其中xxx必須是個可登入的使用者):
1) 把第352 行的 char *logname, *s; 修改為 char *logname = "xxx", *s;
2) 把第409~415 行刪掉或注釋掉:
/*409 if (autologin) {410 do_prompt (0);411 printf ("login: %s (automatic login)\n", autologin);412 logname = autologin;413 } else414 while ((logname = get_logname ()) == 0)415 /* do nothing */; */ |
5. 編譯產生mingetty(編譯過程需要時間,切勿中斷)
| 1 |
cd /opt/rh/mingetty-1.07/ && make |
6. 將make 產生的檔案mingetty 強制覆蓋到/sbin 目錄下,至此,mingetty 的源碼更改就完成了。
| 1 |
cp -f /opt/rh/mingetty-1.07/mingetty /sbin |
• 重新編譯產生/bin/login 程式
1. 查看當前系統的/bin/login 所屬的軟體包及其版本(例如:util-linux-ng-2.17.2-12.14.el6.x86_64)
2. 根據目前的版本,下載對應的源碼軟體包(根據當前系統版本,推薦下載:util-linux-ng-2.17.2.tar.bz2)
幫客之家資來源站點下載:
------------------------------------------分割線------------------------------------------
免費在 http://linux.bkjia.com/
使用者名稱與密碼都是www.bkjia.com
具體下載目錄在 /2016年資料/4月/20日/Linux開機自動登入(文字模式)/
下載方法見
------------------------------------------分割線------------------------------------------
3. 解壓下載/上傳的源碼軟體包
| 1 |
tar -jxvf util-linux-ng-2.17.2.tar.bz2 |
4. 修改檔案util-linux-ng-2.17.2/login-utils/login.c 中的代碼
1) 把第434 行的 passwd_req = 1; 修改為 passwd_req = 0;
432 username = tty_name = hostname = NULL;433 fflag = hflag = pflag = 0;434 passwd_req = 0;435436 while ((ch = getopt(argc, argv, "fh:p")) != -1) |
2) 在檔案聲明部分添加: #include <locale.h>
80 #include <sys/param.h>8182 #include <locale.h>8384 #include <stdio.h> |
5. 先安裝gcc 編譯器,然後再編譯產生login(編譯過程需要時間,切勿中斷)
| 12 |
yum install gccgcc -o login login.c ../lib/setproctitle.c checktty.c -Wall -lcrypt -I ../include/ |
6. 將產生的檔案login 強制覆蓋到/bin 目錄下,至此,login 的源碼更改就完成了
7. 最後就可以重啟機器了。
本文永久更新連結地址: