logo头像

星星給予仰望者光芒

MacOS 開機自動運行(Boot Automatically)

本文于 932 天之前發表,文章内容可能已經過時。

  MacOS 開機自動運行(Boot Automatically)

前言

Mac 的開機啟動項目一般會在 「系統偏好設定」 >「使用者與群組」>「登入項目」可以找得到。

但是有時候也有例外。

因工作需要,有時需要掛上 VPN (Pulse Secure),但這 APP 實在讓我有點困擾,一重啟電腦,他就自動運行….

完全不管我是否有需要…



MacOS是有分成登入項目(Login Items) 與 啟動項目(Startup Items)兩種。

Startup Items

早期版本的 OS X 依賴於兩個資料夾

  • /Library/StartupItems
  • /System/Library/StartupItems

來保存指定在啟動 Mac 時加載的項目。Apple 現在不鼓勵使用啟動項,但有些程式(主要是較舊的應用程式)仍然使用這種機制。通常你的 /System/Library/StartupItems 資料夾應為空; 但如果它包含您不再使用的內容,則可以將不需要的項目拖到垃圾桶中,以防止下次啟動 Mac 時自動加載。

Launch daemons and agents

自從 OS X 10.4 Tiger 以來,Apple 已經為開發人員提供了另一種自動啟動項目的機制:啟動守護進程和代理,由 launchd 進程控制。此方法比登錄項或啟動項提供更大的靈活性,但對用戶而言不太透明。

UNIX 窗簾背後:launchd 不是直接打開應用程式,而是加載特殊格式的 .plist 文檔(XML首選項文件),指定應該啟動什麼以及在什麼情況下啟動。有時這些啟動項目在後台持續運行,有時它們按預定的時間間隔運行,有時它們會根據需要運行

  • 例如,響應某個文件或資料夾中的更改等事件
  • 然後退出。

launchd 使用的 .plist 文件可以佔用五個資料夾中的任何一個,它們的位置決定了項目加載的時間和權限:

  • /Library/LaunchDaemons 和 /System/Library/LaunchDaemons中的項目在 Mac 啟動時加載,並以 root 用戶身份運行。
  • /Library/LaunchAgents 和 /System/Library/LaunchAgents 中的項在任何用戶登錄時加載,並以該用戶身份運行。
  • /Users/your-username/Library/LaunchAgents 中的項僅在特定用戶登錄時加載,並以該用戶身份運行。

其中位於 System 資料夾中的 /System/Library/LaunchDaemons/System/Library/LaunchAgents 是作為 OS X 的一部分包含的組件,他們對於保持 MAC 的正常運行非常重要,千萬不要動它們!!!

對於其它資料夾中的項目,你可以依照需求隨意修改他們。例如禁用它們或更改它們運行的頻率。但在此之前,最好要瞭解它的作用方式。

關閉 Pulse Secure 自動啟動

使用終端機(Terminal)

1
➜ ~ cd /Library/LaunchAgents

找到 net.pulsesecure.pulsetray.plist

1
➜  LaunchAgents sudo vim net.pulsesecure.pulsetray.plist

修改其中的 Disabled 改為 ture 即可,重開機後就不會再出現哩!

1
2
3
<!--Disabled 原本應該為 false-->
<key>Disabled</key>
<true/>

開機自動運行

下指令
sudo vim /Library/LaunchDaemons/com.go.agent.plist

修改其中的片段,指定為自己的腳本或者程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.go.agent</string>
<key>ProgramArguments</key>
<array>
<string>python</string>
<string>/Users/leedani/Downloads/goagent/local/proxy.py(修改為存放goagent proxy.py的路徑)</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>

下指令
launchctl load /Library/LaunchDaemons/com.go.agent.plist