歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> 關於Ubuntu 12.04修改默認運行級別,啟動字符界面的個人理解

關於Ubuntu 12.04修改默認運行級別,啟動字符界面的個人理解

日期:2017/3/1 15:27:46   编辑:關於Linux
關於Ubuntu 12.04修改默認運行級別,啟動字符界面的個人理解 網上通常的做法是:(親自試驗,不管用),如果想直接操作請看綠色字體部分 (1)第一種方法: 由於RedHat中是通過一個叫inittab的文件來管理運行級別的,而ubuntu中沒有,所以建議在/etc/目錄下創建該文件 $sudo vi /etc/initab 然後編輯該文件,運行級別設為3,內容如下id:3:initdefault: 然後重啟。 親自試驗,不管用,Ubuntu還是進入圖形界面。 (2)第二種方法: 利用sysv-rc-cong軟件 sudo install sysv-rc-conf 再用root來執行 sudo sysv-rc-conf 關掉你需要的運行級別裡的gdm, 或者全部都關掉 然後按q退出即可 沒有試驗 (3)第三種方法: 默認情況下,要想修改默認運行等級,要修改/etc/inittab文件。但是ubuntu系統並沒有這個文件,而是需改/etc/init/rc-sysinit.conf這個文件。由於ubuntu默認級別為2,所以你會看到env DEFAULT_RUNLEVEL=2,將2改為3便可。重啟。 親自試驗,不管用,Ubuntu還是進入圖形界面。 (4)第四種方法: Ubuntu安裝後默認的run level為2,這個可以用runlevel命令查看。因為runlevel=2,所以在啟動過程中自動執行/etc/rc2.d/目錄下的以S開頭的腳本。Ubuntu之所以能直接啟動到圖形界面,是由於運行gdm所致。所以,只要把gdm的啟動腳本禁用就可以了,方法就是把文件名的第一個字母S改成 K: cd /etc/rc2.d sudo mv S30gdm K30gdm 親自試驗,相應目錄下根本就沒有gdm這個文件。 在介紹方法之前希望大家明確一個概念: Ubuntu的默認開機的runlevel是2,可以用runlevel來查看當前的默認運行級別。 debian系(ubuntu是基於debian)的Linux一直是用runlevel 2來默認啟動,並且runlevel定義也與redhat有區別。debian的runlevel級別定義如下: 0 – Halt,關機模式 1 – Single,單用戶模式 2 - Full multi-user with display manager (GUI) 3 - Full multi-user with display manager (GUI) 4 - Full multi-user with display manager (GUI) 5 - Full multi-user with display manager (GUI) 6 – Reboot,重啟 可以發現2~5級是沒有任何區別的。他們為多用戶模式,這和一般的linux不一樣。而redhat的runlevel級別定義如下: 0:關機。不能將系統缺省運行級別設置為0,否則無法啟動。 1:單用戶模式,只允許root用戶對系統進行維護。 2:多用戶模式,但不能使用NFS(相當於Windows下的網上鄰居) 3:字符界面的多用戶模式。 4:未定義。 5:圖形界面的多用戶模式。 6:重啟。不能將系統缺省運行級別設置為0,否則會一直重啟。 這裡補充一下,多數的linux都是用一種叫System V的機制來啟動運行級別,而ubuntu使用upstart代替init啟動系統進程。所以沒有那個inittab文件來改默認運行級別。ubuntu 的默認運行級別文件是/etc/init/rc-sysinit.conf。 成功的方法: 第一種方法:(內核級別的) Sudo vi /etc/default/grub 修改GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash” 為:GRUB_CMDLINE_LINUX_DEFAULT=” text” 然後運行下sudo update-grub2就可了 第二種方法:(基於upstart的”正統”方法) ubuntu的upstart的體系下,/etc/init.d裡面基本上都是連接到/lib/init/upstart-job的軟連接,所以,對 initscripts的請求全部轉化為upstart事件,upstart系統對啟動項目的管理全部根據/etc/init裡面的配置文件來啟動,可以啟動lightdm的事件就讓人咂舌 編輯文件 /etc/init/lightdm.conf start on ((filesystem and started dbus and (graphics-device-added fb0 PRIMARY_DEVICE_FOR_DISPLAY=1 or drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1 or stopped udevtrigger)) or runlevel PREVLEVEL=s) stop on runlevel [016] 可見,一旦發生文件系統初始化,DBUS總線啟動和發生graphics-device-added fb0 PRIMARY_DEVICE_FOR_DISPLAY=1 or drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1 or stopped udevtrigger or runlevel PREVLEVEL=s這裡面的任何一個事件,GDM就會被啟動,只在運行級別在016的時候,GDM不啟動。 所以,事件也就明了了、要在upstart層面干掉gdm,把上面的啟動相關事件注釋掉,改寫下就行了 由於ubuntu 默認模式為2,所以: start on (filesystem and started dbus and (graphics-device-added fb0 PRIMARY_DEVICE_FOR_DISPLAY=1 or drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1 or stopped udevtrigger) and runlevel [345]) stop on runlevel [0126] 重啟。 第三種方法: 1、阻止默認圖形桌面啟動 ubuntu 12.04默認的開機會進入一個圖形界面,他是由lightdm進程來實現的。 首先要做的,就是阻止這個lightdm的進程開機啟動。 做法: (1)、查看文件/etc/init/rc-sysinit.conf,在第14行附近:確認“env DEFAULT_RUNLEVEL=2”。2是新裝系統默認的,確保不被修改。 (2)、編輯文件 /etc/init/lightdm.conf,在第12行附近,原句“ and runlevel [!06]” 改為“ and runlevel [!026]”。 解釋:linux系統都有一個運行級別(runlevel)的概念,不同的運行級別配置將導致系統的啟動過程有很大差異,比如當配置 runlevel為 1是,是不進入圖形界面的。系統啟動過程中會有一個init進程來拉起許多其他進程(各種系統服務,窗口界面)。在ubuntu上(11.10,12.04是這樣,其他版本或其他linux發行版不確定)init會執行兩個目錄下的腳本,一個是/etc/init/下的,另一個是/etc/rc?.d/下的,問號可能是0~6的其中一個數字,代表運行級別。接下來,講解一下流程以加深理解。 在ubuntu上,init進程首先執行/etc/init/目錄下的rc-sysinit.conf,這個文件指明了本次啟動的默認運行級別。這是上面第一步的意義:確保默認運行級別是2。接下來目錄/etc/init下的其他腳本的執行都會根據不同的運行級別做出不同的動作,比如lightdm會判斷運行級別是否處於1,2,3,4,5中的一個,是則啟動lightdm,不是則不啟動lightdm。這便是上面第二步的意義,修改 lightdm.conf ,把“2”加入到判斷語句,使得lightdm在運行級別2的時候不要啟動。明白了這些,你就可以靈活一點,例如把默認級別設置為3,而把3加入那個判斷語句,也可以達到阻止lightdm啟動的效果。完成了/etc/init/目錄下的啟動動作,init進程會繼續執行/etc/rc2.d目錄下的腳本。 2、關閉Ubuntu的載入畫面 ubuntu啟動時,會有一個ubuntu字樣出現在屏幕,文字下方有閃爍的點,這時按ESC可以在動畫和文字界面之間切換。這一步驟不屬於lightdm,而是一個叫 plymouth 的進程在起作用。實際上,plymouth的意義就在於,在開機到圖形桌面 (lightdm)起來這段時間裡展示出一個動畫,從而提高用戶體驗。 屏蔽的方法: (1)、編輯 /etc/default/grub文件,原文11行附近: GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" 去掉”splash“,改後: GRUB_CMDLINE_LINUX_DEFAULT="quiet" (2)、執行命令: sudu updat-grub 重啟,即可看到,不再有載入畫面出現 閱讀下文能夠更好的理解(擴展閱讀): Linux 系統主要啟動步驟: 1. 讀取 MBR的信息,啟動 Boot Manager Windows 使用 NTLDR作為 Boot Manager,如果您的系統中安裝多個版本的 Windows,您就需要在 NTLDR中選擇您要進入的系統。Linux 通常使用功能強大,配置靈活的 GRUB作為 Boot Manager。 2. 加載系統內核,啟動 init進程 init 進程是 Linux的根進程,所有的系統進程都是它的子進程。 3. init 進程讀取 /etc/inittab文件中的信息,並進入預設的運行級別, 按順序運行該運行級別對應文件夾下的腳本。腳本通常以 start參數啟動,並指向一個系統中的程序。通常情況下, /etc/rcS.d/目錄下的啟動腳本首先被執行,然後是/etc/rcN.d/目錄。例如您設定的運行級別為 3,那麼它對應的啟動目錄為 /etc/rc3.d/。 4. 根據 /etc/rcS.d/文件夾中對應的腳本啟動 Xwindow服務器 xorg Xwindow為 Linux下的圖形用戶界面系統。 5. 啟動登錄管理器,等待用戶登錄 Ubuntu 系統默認使用 GDM作為登錄管理器,您在登錄管理器界面中輸入用戶名和密碼後,便可以登錄系統。(您可以在 /etc/rc3.d/文件夾中找到一個名為 S13gdm 的鏈接) ubuntu的init與系統服務設置 init Init是位於/sbin/init的一個程序,它是在linux下,在系統啟動過程中,初始化所有的設備驅動程序和數據結構等之後,由內核啟動的一個用戶級程序,並由此init程序進而完成系統的啟動過程。 ubuntu與傳統的linux略有不同,使用upstart完成系統的啟動,但表面上仍維持init程序的形式。 運行級別 傳統上,linux有幾種不同的運行級別,包括如下幾種: # 0 - 停機 # 1 - 單用戶模式 # 2 - 多用戶,沒有 NFS # 3 - 完全多用戶模式(標准的運行級) # 4 –系統保留的 # 5 – X11(x window) # 6 - 重新啟動 系統啟動後處於哪一種級別由init讀取/etc/inittab文件中的缺省級別設置來確定,一半圖形界面的系統是進入級別3。 但是ubuntu與傳統的不太一樣,默認情況下是找不到/etc/inittab文件的,而且運行級別也有差別,具體分這樣幾個級別: # 0 –關閉系統 # 1 –單用戶模式 # 2~5 –完整的多用戶模式 # 6 –重新啟動 也就是說,默認情況下級別2、3、4、5都是一樣的,同時系統的默認級別設定也不是在inittab文件中,而是寫在/etc/init/rc- sysinit.conf文件中。打開此文件,可以找到下面一句: env DEFAULT_RUNLEVEL=2 這表明系統當前默認是進入級別2。 另外,在此文見中還有一段以if [ -r /etc/inittab ] 開始的代碼,這裡保留了使用inittab指定系統默認運行級別的功能,也就是說,如果用戶手動創建了/etc/inittab,那麼init將以 /etc/inittab中指定的默認運行級別進行系統的啟動。比如說用戶希望系統以級別3為默認運行級別,則只需在inittab文件中加入如下一行: id:3:initdefault: 在經過/etc/init/rc-sysinit.conf確定運行級別後,init將進一步運行/etc/init.d/rc,然後根據級別進入 /etc/rc[?].d啟動或關閉相應的服務。 服務的啟動與關閉腳本 ubuntu下啟動與關閉服務的腳本存放與/etc/rc[?].d目錄下。其中[x]表示0~6,分別對應級別0~6,如/etc目錄下的 rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d。假設rc-sysinit.conf或inittab中指定的默認級別是2,那麼init將執行/etc/rc2.d目錄下的腳本啟動或關閉相應服務。 如果打開/etc/rc[?].d目錄,會發現這些目錄下的文件都是形如Snnxxxx或Knnxxxx的符號鏈接,而且都是指向/etc /init.d。也就是說不同運行級別下服務的啟動或關閉腳本均是放在/etc/init.d下,只不過根據不同級別的需要,在對應/etc /rc[?].d目錄下放一個鏈接,不同的級別會需要不同的服務,因此不同/etc/rc[?].d目錄下的鏈接文件也不盡相同以此區分。 其中鏈接文件中以S開頭的表示在調用/etc/init.d目錄中對應腳本的時候會傳遞一個start參數,也就是啟動對應服務,而以K開頭的則是傳遞一個stop參數,由此關閉此服務,此處的K表示kill。 S和K後面的nn是一個數字,表示本腳本被執行的先後順序,小號在前大號在後,這樣以解決不同服務之間可能存在的先後依賴關系。比如說ftp服務依賴於網絡服務的啟動,所以ftp服務的編號就要大於網絡服務的編號,在網絡服務啟動後再行啟動。 最後的xxxx則是服務的名字。 另外,除了/etc/rc[0~6].d文件外,還有一個/etc/rcS.d目錄,這個目錄下的服務腳本與/etc/rc[0~6].d格式類似,也為指向/etc/init.d中的腳本的鏈接,但是會在/etc/rc[0~6].d中的腳本執行前首先被執行。
Copyright © Linux教程網 All Rights Reserved