ps. 例子: phpstorm 是一套安裝好的應用程式
(後文有 '設定自動執行應用程式' 的教學文, 更精彩!!)
第一,先把運行的啟動檔放入bin
#ln -s /usr/local/phpstorm /bin/phpstorm.sh
#ln -s /usr/local/phpstorm /bin/phpstorm.sh
第二,新建一個 .desktop 檔案,入寫以下內容
# cd ~/桌面
# cd ~/桌面
# gedit phpstorm.desktop #桌面檔案一定要desktop結尾
[Desktop Entry]
Version=1.0 #版本訊息
Name=PhpStrom2018.1 #桌面顯示的名稱
Exec=/usr/bin/phpstorm %U #執行檔路徑
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=/usr/local/phpstorm/bin/phpstorm.png #桌面圖示路徑
Categories=Network;WebBrowser; #分類
MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;
StartupWMClass=Chromium-browser
StartupNotify=true
Keywords=web;browser;internet;
Actions=new-window;new-private-window;
X-Desktop-File-Install-Version=0.23
Version=1.0 #版本訊息
Name=PhpStrom2018.1 #桌面顯示的名稱
Exec=/usr/bin/phpstorm %U #執行檔路徑
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=/usr/local/phpstorm/bin/phpstorm.png #桌面圖示路徑
Categories=Network;WebBrowser; #分類
MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;
StartupWMClass=Chromium-browser
StartupNotify=true
Keywords=web;browser;internet;
Actions=new-window;new-private-window;
X-Desktop-File-Install-Version=0.23
-----------------------
Linux如何設定開機自動執行應用程式
Linux如何設定開機自動執行應用程式
2023.7.23
作者
Ivon Huang
作者
Ivon Huang
測試過的作業系統:Ubuntu 22.04,Arch Linux 6.4.3
何謂自動啟動程式
在Linux上可以設定開機自動執行某程式,例如/usr/bin/firefox,它就會在開機後自動開啟Firefox瀏覽器:
或者設定開機自動執行shell指令稿,例如家目錄放置一個/home/user/backup.sh,開機後自動執行裡面所寫的指令。
不論為何者,建議在填寫程式路徑的時候填「絕對路徑」。
自動啟動又可以分為「系統開機後執行」以及「一般使用者登入桌面環境後才執行」二種。如果是前者,您應該使用systemd的系統服務來設定,若是後者就用圖形界面Desktop Entry或systemd user service設定吧。
1. 用圖形界面設定自動啟動的程式
許多桌面環境內建的「自動啟動服務」工具,只適合啟動一般使用者身份的服務,不能有sudo。
通常桌面環境的自動啟動,都是讀取autostart目錄下的「Desktop Entry」。
1.1. 理解何為Desktop Entry #
.desktop檔案是Freedesktop.org制定的XDG Desktop Entry標準,您在應用程式列表看到的程式圖示就是Desktop Entry所組成。
如果將Desktop Entry放在~/.config/autostart,桌面環境就會在使用者登入圖形界面時啟動放在autostart目錄下的程式。
大部分桌面環境(KDE、GNOME、XFCE、LXQT、Cinnamon)都遵守此標準。
一個最基本的Desktop Entry長這樣:
[Desktop Entry]Type=Application# 應用程式名稱
Name=My Script# 註解
Comment=Execute script on login# 應用程式工作的目錄
Path=/home/user/# 要執行的指令,可加引數
Exec=/bin/bash backup.sh# 是否在終端機執行
Terminal=false# 不顯示在應用程式列表
NoDisplay=true
如果您不知道怎麼寫,可以將系統應用程式的Dekstop Entry複製出來(通常位於/usr/share/applications或~/.local/share/applications/),並參考 Arch Wiki來寫Dekstop Entry。
1.2. KDE #
點選系統設定 → 啟動與關閉 →自動啟動,新增要啟動的程式或指令稿。
KDE新增的是位於~/.config/autostart的.desktop檔案,您可以點進去手動修改詳細指令,或者手動把.desktop檔案放到該目錄。
KDE亦可以新增「登出」時執行的指令稿。
1.3. GNOME #
開啟終端機,安裝gnome-startup-applications套件,此套件Ubuntu已內建。gnome-tweaks的初始應用程式設定太陽春,不建議。
開啟「初始啟動程式」程式,加入要啟動的程式
GNOME自動啟動的程式位於 ~/.config/autostart,您可以手動編輯.desktop檔案的指令。
2. 用指令設定自動啟動的程式 #
過去要設定自動啟動服務,我們會調整.desktop或.bashrc或rc.local等檔案。
.desktop在登入圖形環境後啟動,大多數桌面都支援(見上一節KDE與GNOME的設定方式)。.bashrc則是專屬於Bash的,一登入bash shell就會啟動。至於rc.local過於老舊,不建議使用。
現在呢 Systemd是最新的主流方法,優點是統一用systemctl指令管理系統服務,還可以配合systemd timer作定時操作,缺點是它的語法比過去的要繁瑣些。
假設我現在家目錄/home/user有一個叫做backup.sh的備份指令稿,我想在開機執行一次,那就將其做成系統服務。其中 Systemd的服務又可以分為系統(system service)與使用者服務(user service)。如果執行的指令需要用到sudo,就把它做成系統服務吧。
2.1. systemd system service (系統) #
不論使用者有無登入系統,新增到系統的服務一律會在電腦開機後啟動,執行身份是root。當然使用者沒登入系統,X視窗沒執行,就不該用來啟動圖形化的程式啦。
系統級別的systemd服務一律放在 /etc/systemd/systemd/。由於執行身份是root,不需要寫sudo
新增unit,取名為autostartscript
sudo vim /etc/systemd/systemd/autostartscript.service
填入以下內容,ExecStart後接執行指令稿的指令,只執行一次
[Unit]
Description=autostartscript
Description=autostartscript
[Service]
Type=oneshot
ExecStart=/bin/bash /home/user/backup.sh
Type=oneshot
ExecStart=/bin/bash /home/user/backup.sh
啟用服務
sudo systemctl daemon-reload
sudo systemctl enable --now autostartscript.service
sudo systemctl enable --now autostartscript.service
之後可以用 systemctl status指令看服務執行情況:
sudo systemctl status autostartscript.service
2.2. systemd user service (一般使用者) #
此處的服務在登入特定使用者(圖形界面或SSH都可以)後才會啟動。
使用者級別的systemd服務一律放在 ~/.config/systemd/user/
新增unit,取名為autostartscript
vim ~/.config/systemd/user/autostartscript.service
填入以下內容,ExecStart後接執行指令稿的指令,只執行一次
[Unit]
Description=autostartscript
Description=autostartscript
[Service]
Type=oneshot
ExecStart=/bin/bash /home/user/backup.sh
Type=oneshot
ExecStart=/bin/bash /home/user/backup.sh
啟用服務。注意這裡我沒有使用sudo。
systemctl --user daemon-reload
systemctl --user enable --now autostartscript.service
systemctl --user enable --now autostartscript.service
之後可以用systemctl status指令看服務執行情況:
systemctl --user status autostartscript.service
沒有留言:
張貼留言