轉自:http://blog.csdn.net/yuyin86/article/details/8255061
對於12.04的ubuntu桌面系統,如果想在開機的時候直接進入字符界面,那可以:
編輯文件 /etc/init/lightdm.conf,在第12行附近,原句“ and runlevel [!06]” 改為“ and runlevel
[!026]”即可,之後如果想切換到圖形界面,那再執行:startx 就可以了!
在ubuntu10.04版本一下的系統中:
方法:
sudo vim /etc/default/grub
找到這一行:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
改為:GRUB_CMDLINE_LINUX_DEFAULT="text "或者"quiet splash text"
保存後sudo update-grub 重啟即可。
note:
quiet的意思是內核啟動時候簡化提示信息
splash的意思是啟動的時候使用圖形化的進度條代替init的字符輸出過程
===========================================================================================
在ubuntu10.04以上版本中:
方法1:
Ubuntu安裝後默認的run level為2 也就是默認為圖形界面啟動
Ubuntu之所以能直接啟動到圖形界面,是由於運行gdm所致。所以,只要把gdm的啟動腳本禁用就可以了,方法就是把文件名的第一個字母S改成K:
cd /etc/rc2.d
sudo mv S30gdm K30gdm
note:此方法不適用於11.10
方法2:
ubuntu兼容inittab,所以新建一個/etc/inittab文件
輸入:
id:3:initdefault:
進入到/etc/rc3.d/中,看看gdm的啟動腳本文件名:
ls -l *gdm
如果是以S打頭的,把文件名改成以K打頭====================================================================================
從字符界面進入圖形界面的方法:startx 即啟動X Window
ubuntu設置開機啟動圖形應用程序,替換默認圖形桌面
一、前言
無論你想要在ubuntu 12.04(11.10適用)開機啟動圖形程序,或者非圖形程序,相信這篇文章能幫上大忙。
我將根據我的需求講解我的做法,並解釋為什麼這麼做。完了以後,各位看官根據自己的需求不加修改或稍加修改即可適用。我這邊,總得來說,需求是做一個RDP瘦客戶端,在一個板子上裝上ubuntu 12.04,然後要這個系統啟動後能立即彈出RDPclient登錄框,而不是進入ubuntu的圖形桌面。
二,三部分講解我是怎麼做的,四部分總結設置程序為開機啟動的方法,五部分主要針對需要把圖形界面程序弄成開機啟動的同學,講解startx。
第六部分為後來補充的:如何關閉ubuntu的啟動時載入畫面(“loading screen”)。
二、阻止默認圖形桌面啟動
ubuntu 12.04默認的開機會進入一個圖形界面,用命令pstree可以看到圖形界面所在的進程樹:
首先要做的,就是阻止這個lightdm的進程開機啟動。 做法:
一、查看文件/etc/init/rc-sysinit.conf,在第14行附近:確認“env DEFAULT_RUNLEVEL=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目錄下的腳本。
三、設置自己的程序為開機啟動
阻止了lightdm的啟動之後,還要做的就是把我的RDPClient設置為開機啟動。做法:
一、在目錄/usr/bin下,有個文件startx,在當前目錄復制出一份來,命名為mystartx(cp startx mystartx)。編輯mystartx,在文件末尾有一行“xinit "$client" $clientargs -- "$server" $display $serverargs”,在這一行的前面加入一行"client="/root//myRdpClient/myRdpClient.py"。
二、編輯文件/etc/rc.local,在"exit 0"前添加一行:/usr/bin/mystartx。
解釋:第一步裡,我制作了一個啟動RDPClient的腳本,第二步裡,我把這個腳本設置為開機啟動。制作RDPClient或其他圖形應用程序的啟動腳本請看本文的第五部分,第四部分講解開機啟動的方法和注意事項。
四、添加開機啟動程序的方法及其注意事項
對於開機啟動程序,需要關注4個地方(排序有分先後):1.目錄 /etc/init/ 下的所有conf都會被init進程首先執行。2.運行級別為2的時候,目錄 /etc/rc2.d/ 下的所有腳本會其次執行,其他運行級別雷同。3.文件/etc/rc.local裡的命令會得到執行。4.在文件/etc/crontab裡面配置為@reboot的命令會得到執行。
以下分別講解每個地方該怎麼做。
1.在/etc/init/目錄下添加開機啟動程序的方法。該目錄下新建文件myrdpclient.conf。將下面的內容拷貝至文件保存即可。
start on login-session-start
script
/usr/bin/mystartx
end script
這樣init進程就會啟動的時候執行/usr/bin/mystartx。之前我解釋運行級別(runlevel)的時候,說這個目錄下的是腳本,是不想在那個地方廢話。其實,這個目錄下的 .conf 文件是供init進程讀取的配置文件,每個配置文件的內容包含兩個內容,一是一段腳本在告訴init要啟動哪個程序,即指定一個job,或者說任務;二是一些標簽(如“start on”)表明這個程序在什麼時候啟停。首先被讀取執行的是rc-sysinit.conf。關於具體該如何寫一個conf文件來讓init在適當的時候運行某個程序請自行搜索,我給出個這個配置是個非常簡單的配置,如果你需求不多的話,把/usr/bin/mystartx
替換為你的程序就夠了。
2.在/etc/rc2.d目錄下添加開機啟動程序的方法。執行命令:
ln -s /usr/bin/mystartx ./S99mystartx
這個命令將會該目錄下建立一個指向/usr/bin/mystartx 的鏈接,這樣init在啟動時就會執行這個鏈接指向的命令。那個S99打頭的命名規則,我其實不清楚其意義是什麼,大約是在標明啟動優先級。總之,你只需要將/usr/bin/mystartx替換為你想要執行的命令(你的程序),同時鏈接的名字以"S99"為前綴即可。
3.在/etc/rc.local文件裡添加啟動程序,在“exit 0”之前寫上你的命令就可以了,我正是這麼做的。
4.在文件/etc/crontab裡添加開機啟動程序,編輯該文件,在文件末尾添加一行:
@reboot root /usr/bin/mystartx
這樣你的程序會被一個叫 cron 的例程拉起(而不是 init ),實際上,是 init 在啟動過程中啟動啦 cron 例程,而 cron 例程通常在系統中做一些定時作業,通過配置也可以讓 cron 在啟動時做一些作業。
所以,如果你要添加自己的開機啟動程序,以上四個地方都可以,其中要大家注意的幾點:
一、前兩種方法可能是不穩妥的,因為這兩個階段是系統啟動階段,你添加的程序若對系統某些服務有依賴,將導致你的程序出現錯誤,比如我的RDPclient會出現段錯誤。
二、第三種方法,添加到/etc/rc.local裡面,是網上出現最多的答案,這也是我采用的方法。。事實上,rc.local是系統特地為用戶提供的一個添加開機啟動程序的接口。需要注意的是,並非每個運行級別都會運行rc.local,在ubuntu裡只有2,3,4,5運行級別會執行,所以如果運行級別設置不對的話,你寫在rc.local裡的命令可能就不能如期執行了。如果你對rc.local如何被執行感興趣的話讀下面。實際上運行rc.local是rc2.d目錄下所有腳本中的最後一個腳本。接下來證明這點,可以在rc2.d目錄下執行命令:ls
-l:
S99rc.local -> ../init/rc.local
可以看到,rc2.d目錄下的S99rc.local是一個到 /etc/init.d/rc.local 的鏈接,運行 S99rc.local 就是在運行 /etc/init.d/rc.local ,而打開這個文件發現裡面的注釋:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Run /etc/rc.local if it exist
實際上,就是在運行 /etc/rc.local 。所以,執行rc2.d目錄下的所有腳本,最後一步,就是執行 /etc/rc.local 。其中的注釋同樣表明了只有2、3、4、5運行級別會執行rc.local,這是因為,只有在2、3、4、5對應的 /etc/rc?.d 目錄才有運行 rc.local 的鏈接。
五、制作圖形應用程序啟動腳本
對於要開機啟動非圖形界面的同學來說,事情是非常簡單的,在rc.local裡添加你的命令即可(或者使用第四部分的其他方法)。之前的阻止lightdm啟動你都不需要做,做了也無妨。至於運行級別,你沒動過的話應該是2,是ok的。
對於要啟動圖形化界面的同學,要知道為什麼我在startx裡面添加一行,設置為開機啟動,同時屏蔽lightdm的啟動,就可以達到目的,可能還需要進一步的說明。
在linux裡,要運行圖形界面,需要同時有 X server(或者叫X11 server,"11"是當前的版本號), 和X client,這是 x windows 工作的模式(據說以後會改成wayland什麼的,那是後話)。X server在目錄 /etc/X11 下,X server啟動後的進程名字叫 Xorg ,如果你的系統啟動了圖形桌面。那麼運行命令 pstree 一定可以看到Xorg,正如我在第一部分的貼圖裡顯示,在那裡,Xorg
是被 lightdm 拉起來的。
所以,如果ubuntu系統要跑圖形程序,不管是它的默認圖形桌面lightdm,還是我的RDPClient,都必須先啟動 X server(Xorg),再啟動圖形程序作為X client。沒有修改過的ubuntu的圖形桌面就是這樣啟動的,從圖中你可以看到它先啟動了Xorg,再啟動了自己的一大堆metacity什麼的。那麼,我現在阻止了lightdm的啟動,要運行RDPCLient,也同樣要分兩步:一、啟動X server,二、啟動RDPClient(作為X
client)。
這看起來真難,因為我其實也不知道如何啟動X server。但是在 /usr/bin 下有一個腳本叫 startx 。這個腳本是個歷史遺留腳本,在過去的ubuntu,或者現在某些其發行版本linux,是這個腳本負責啟動默認的圖形桌面的。它會做兩件事,一、啟動X11server,二,啟動圖形桌面作為 X client。我可以拿這個腳本稍作修改,替換掉其中的圖形桌面為我的RDPClient就可以了,具體做法在第二部分。
為什麼我不修改lightdm.conf來達到目的?lightdm也是做了兩件事,不是也可以替換它的X client為我的X client就可以了麼?也許這樣是可以的,但是,lightdm.conf那個腳本,哥們兒,你去看看吧,我反正下不了手。反觀startx,startx的啟動邏輯是非常清晰的,它通過執行了一個 xinit 命令來同時啟動X server 和 X client,建議你使用命令“man xinit” 查看xinit的相關內容。修改startx來達到目的比較容易,這就是為什麼我不修改lightdm。
總結,阻止lightdm啟動默認桌面,通過修改startx來制作一個腳本mystartx以啟動X server和我的RDPClient,把mystartx搞成開機啟動。這是這樣!
六、關閉Ubuntu的載入畫面
ubuntu啟動時,會有一個ubuntu字樣出現在屏幕,文字下方有閃爍的點,這時按ESC可以在動畫和文字界面之間切換。這一步驟不屬於lightdm,而是一個叫 plymouth 的進程在起作用。實際上,plymouth的意義就在於,在開機到圖形桌面 (lightdm)起來這段時間裡展示出一個動畫,從而提高用戶體驗。
屏蔽的方法:
一、編輯 /etc/default/grub 文件,原文11行附近:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
去掉”splash“,改後:
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
二、執行命令:
sudu updat-grub
重啟,即可看到,不再有載入畫面出現了。