ubuntu設定開機自啟程式

2022-09-13 01:27:13 字數 4730 閱讀 5134

新增開機自啟程式,一種是圖形介面應用程式,一種是文字模式自啟動程式。

前者比較簡單,用ubuntu自帶功能啟動應用程式新增啟動項即可,後面我們還會介紹一種利用xinit的方法。另外利用啟動應用程式還可以按如下格式新增命令:

gnome-terminal -x /path/to/your/script

開啟乙個終端執行指令碼。

後者需要首先設定ubuntu文字模式啟動,一種方法是修改 /etc/default/grub 檔案,grub_cmdline_linux_default 增加 「text」 ,然後sudo update-grub,一種方法是禁止lightdm啟動,修改 /etc/init/lightdm.conf ,由於ubuntu預設啟動級別是2,修改 「and runlevel [!06]」 為 「and runlevel [!026]」,即在執行級別2下不啟動lightdm,可通過 /etc/init/rc-sysinit.conf 設定執行級別,在第14行附近,「env default_runlevel=2」,關於這一部分詳見 

文字模式自動登入,參考 

對於開機啟動程式,需要關注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。這個目錄下的 .conf 檔案是供init程序讀取的配置檔案,每個配置檔案的內容包含兩個內容,一是一段指令碼在告訴init要啟動哪個程式,即指定乙個job,或者說任務;二是一些標籤(如「start on」)表明這個程式在什麼時候啟停。首先被讀取執行的是rc-sysinit.conf。關於具體該如何寫乙個conf檔案來讓init在適當的時候執行某個程式請自行搜尋,我給出這個配置是個非常簡單的配置,如果你需求不多的話,把/usr/bin/mystartx 替換為你的程式就夠了。(原作者mystartx修改自/usr/bin/startx,是為了啟**形應用程式,後面第3節會詳述,我們當然可以用此方法啟動非圖形應用程式)

2.在/etc/rc2.d目錄下新增開機啟動程式的方法。

ln -s /usr/bin/mystartx  ./s99mystartx

s??其中數字表示啟動優先順序,不啟動則修改為k99mystartx。或直接使用命令update-rc.d *** defaults nn(nn為啟動順序)

然後在你的指令碼中啟動應用程式:

#!/bin/sh

3.在 /etc/rc.local 裡新增啟動程式,這也是網上大部分文件給出的方法。 /etc/rc.local 是預設啟動的最後乙個指令碼檔案,實質上也是通過 /etc/rc?.d 下的軟鏈結啟動 /etc/init.d/rc.local ,並最終啟動 /etc/rc.local 。在「exit 0」之前寫上你的命令。

nohup /usr/bin/mystartx&

nohup是保證程式一直在後台執行,不會隨主程式退出而退出。

@reboot root /usr/bin/mystartx

這樣你的程式會被乙個叫 cron 的例程拉起(而不是 init ),實際上,是 init 在啟動過程中啟動 cron 例程,而 cron 例程通常在系統中做一些定時作業,通過配置也可以讓 cron 在啟動時做一些作業。 

1) 前2種方法可能是不穩妥的,因為這兩個階段是系統啟動階段,你新增的程式若對系統某些服務有依賴,將導致你的程式出現錯誤,比如我的rdpclient會出現段錯誤。

2) 第3種方法,新增到/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 之後,還有新增自啟程式的地方。

5. 登入時自動執行程式

使用者登入時,bash首先自動執行系統管理員建立的全域性登入script :/ect/profile。然後bash在使用者目錄下按順序查詢三個特殊檔案中的乙個:/.bash_profile、/.bash_login、 /.profile,但只執行最先找到的乙個。

因此,只需根據實際需要在上述檔案中加入命令就可以實現使用者登入時自動執行某些程式(類似於dos下的autoexec.bat)。

6. 退出登入時自動執行程式

退出登入時,bash自動執行個人的退出登入指令碼/.bash_logout。例如,在/.bash_logout中加入命令「tar -cvzf c.source.tgz *.c」,則在每次退出登入時自動執行 「tar」 命令備份 *.c 檔案。

7. 可用一些小工具來管理 ubuntu 的啟動選項:

小工具 :rcconf.

功能更全的工具:sysv-rc-conf.

不同於用啟動應用程式工具新增的啟動項,在ubuntu圖形桌面啟動後再啟動,該方法是開機啟**形應用程式,替換預設圖形桌面,所以

首先禁止lightdm啟動。

在目錄/usr/bin下,有個檔案startx,在當前目錄複製出乙份來,命名為mystartx(cp startx mystartx)。編輯mystartx,在檔案末尾有一行

xinit "

$client

" $clientargs -- "

$server

" $display $serverargs

在這一行的前面加入一行

client="

/root/myrdpclient/myrdpclient.py

有了mystartx,就可以用前面提到的各種方法來自啟動了。

對於要開機啟動非圖形介面的同學來說,事情是非常簡單的,在rc.local裡新增你的命令即可(或者使用第四部分的其他方法)。之前的阻止lightdm啟動你都不需要做,做了也無妨。(經驗證,必須阻止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啟動預設桌面,通過修改startx來製作乙個指令碼mystartx以啟動x server和我的rdpclient,把mystartx搞成開機啟動。這是這樣!

樹莓派開機自啟程式實現

首先rc.local檔案是liunx開機時會自動執行的檔案,只要將自己要執行的檔案放入其exit 0之前即可被執行。本章將實現樹莓派開機時物理引腳12的外接led燈會閃爍。1 編寫簡單的閃燈python指令碼 命令 cd dongdd 命令 sudo vi startx2.py import rpi...

c語言寫開機自啟程式

想要軟體開機自啟,就需要把相應的註冊項寫到系統的登錄檔中 登錄檔的開啟方法為win r輸入redegit開啟登錄檔編輯器 開機自啟的檔案目錄為hkey current user software microsoft windows currentversion run 在這裡面能看所有的開機自啟的軟...

ubuntu設定redis開機自啟

設定條件 ubuntu16.04 redis 4.0.11 在redis目錄下找到utils redis init script複製到 etc init.d redis開啟檔案進行修改 步驟 主要linux命令 whereis redis 查詢redis目錄 sudo cp redis init s...