ubuntu 12.04 桌面版關閉圖形界面
注意]改GRUB 的配置檔案(不建議直接改 grub.conf)
file:/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
替換為 GRUB_CMDLINE_LINUX_DEFAULT="text"
儲存後 sudo update-grub 重新開機即可
在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
重新開機,即可看到,不再有載入畫面出現了。