2015-02-22

Ubuntu 設定所有使用者的登入自動執行檔

記得當年阿舍在有在管理 Windows 的時候,為了方便做一些管理的事情,阿舍和同事們都會在使用者登入的時候,設定一支自動執行的程式來做一些使用者的環境設定或自動啟動某些需要的程式在背景裡執行,後來,阿舍在用 Ubuntu 的時候,也有想到要用到類似這樣的功能,不過,一直以為只要設定 .bash_profle 或 .profile 檔案就可以了,所以,也就沒仔細的研究哩 ! ...


最近,阿舍就有想到要來設定一下使用者登入後自動執行 script 的功能,然後,就才想起來,這個 .bash_profile 和 .profile 是針對個人,如果是要設定給所有的使用者的話,就不太適合,因為,阿舍不可能手動去改每位使用者的家目錄下的這二個檔案哩 !

阿舍設了三個檔案來執行,結果,是依檔名字母順序來執行的哩 ! 

所以,阿舍查了一下 Ubuntu Document 的環境變數說明,然後,阿舍就才知道,原來,Ubuntu 是有幾個檔案專門用來處理像阿舍這種想要讓所有的使用者在登入後自動設定或執行的需求哩 !

首先,第一個要介紹的就是 /etc/environment 這個專門用來設定環境變數的設定檔案,只要是在這個檔案有設定的變數,就會反應在所有使用者的環境中,打開 /etc/environment 這個檔案就可以看到有一組 PATH 環境變數的設定,如果使用者自己的 .profile 或 .bash_profile 沒有另外對 PATH 變數做調整的話,預設就會和在 /etc/environment 所設定的 PATH 變數相同哩 !

不過,要注意的是, /etc/environment 檔案所設定的變數是不能用運算式來設定的,也就說,Ubuntu 會把 /etc/environment 檔案裡的等號右邊的內容都檔成字串,而不會再做任何運算,所以,當阿舍把下面第一行的文字加到 /etc/environmemt 的話,那麼結果就不會變成 ArthurToday,而是 'Arthur+Today' 哩 ! (立即讓 /etc/environment 生效的方式,請參考這篇說明

# 把這一行加到 /etc/environment 檔案 
ATD='Arthur'+'Today' 

# 執行結果 
$ . /etc/environmenmt # 立即讓 /etc/environment 生效 
$ echo $ATD 
Arthhur+Today


介紹完這個 /etc/environment 檔案之後,再來,就是要介紹可以跑 Script 的部份哩 ! 在 Ubuntu 上有個 /etc/profile 的檔案可以用來放要給所有使用者登入後執行的 Script,不過,Ubuntu 的官方文件裡有提到,並不建議你這樣做,而是建議你另外寫成一個獨立的檔案來放到 /etc/profile.d 資料夾哩 !

Ubuntu 會在使用者登入後,自動執行 /etc/profile.d 資料夾下,所有以 .sh 檔案,所以,只要把寫好的 Script 放到 /etc/profile.d 資料夾 下,就可以達到登入後自動執行的效果,就不用去改 /etc/profile 這個檔案哩 !

不過,阿舍有個疑問,就是,放在 /etc/profile.d 資料夾的檔案有很多個時,那個檔案會先被執行哩 ? 阿舍沒找到有說明的文件,因此,阿舍就自己試了一下,嗯 ... 好像和阿舍猜的一樣,是用檔案名稱來排序的,數字越小越先,字母越前面越早,所以,如果在執行的時候有順序上的考量時,可以參考一囉 !

另外,再提醒一下,這個登入自動執行和開機自動執行是兩種完全不同的執行時機,阿舍自己有時候也會給它搞混的哩 ! ....

推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

2 則留言 :

周乃宏 提到...

/etc/bashrc不行嗎?

Arthur 提到...

Hello,

/etc/bashrc 在 Ubuntu 是用 /etc/bash.bashrc 這個檔案,阿舍本來也以為是用這個檔,不過,據 Ubuntu 官方文件的說明,這個檔案在某些環境中是不會被執行的,尤其是開啟在圖型介面的環境時,所以,就得用 /etc/profile.d 哩 ! .... 供參囉 ! ^^=

"The shell config file /etc/bash.bashrc is sometimes suggested for setting environment variables system-wide. While this may work on Bash shells for programs started from the shell, variables set in that file are not available by default to programs started from the graphical environment in a desktop session." ...

張貼留言

歡迎留言提問和討論 .... 😁