把启动项收进菜单栏
Bollard 列出 ~/Library/LaunchAgents 下的每一个启动项。哪些已经加载、哪个有进程在跑,一眼看清;拨一下开关就加载或卸载,没有主窗口。
macOS 11+ · Intel / Apple 芯片 · 不到 1 MB
功能
- 一眼看清
- 每个启动项一行:开关开着就是已加载进 launchd,有进程在跑的显示 pid。已加载的排在前面。
- 拨一下就生效
- 加载或卸载后菜单不收起,做完当场回显真实状态;没成功就把 launchctl 的原话弹给你。
- 随开随新
- 每次打开菜单都重新读取,不会显示过期的状态。
- 认得「已停用」
- 被
launchctl disable停用的启动项单独标出。拨开它的开关,会先解除停用再加载。 - 好读的名字
- 难认的 Label 可以在
settings.json里配一个自己看得懂的名字。 - 中英文界面
- 跟随系统语言,中文以外的系统显示英文;也可以在菜单里指定。
- 自动更新
- 后台检查并下载新版本,校验通过后等你点安装。
原理
Bollard 自己不启动、也不看管任何进程。它只是 macOS 自带的 launchd 的一个遥控器:读 launchd 的状态画成菜单,拨开关时替你敲一条 launchctl 命令。
- 启动项是什么
- launchd 是 macOS 负责拉起并看管后台服务的进程。
~/Library/LaunchAgents里的每个 plist 描述一个服务;登录时 launchd 把这个目录扫一遍,逐个加载。Bollard 只管这一个目录,所以不需要管理员密码。 - 三层状态
- plist 在不在目录里,决定下次登录加不加载;已加载还是未加载,是 launchd 现在认不认识它,只在本次登录期间有效;已停用是记在 launchd 里的一个标记,带着它加载会被拒绝,重启后仍然有效。
- 列表怎么来的
- 每次打开菜单:列出目录里的 plist 读出
Label,再用launchctl list查哪些已加载、pid 是多少,用launchctl print-disabled查哪些被停用,按Label对上。不常驻轮询。 - 拨开关
- 开是
launchctl bootstrap(已停用的先launchctl enable),关是launchctl bootout。launchctl 的退出码不可靠,所以成不成功以事后查到的实际状态为准。 - 开着却没有 pid
- 有的启动项就是服务本身,比如 redis:显示 pid,关掉服务就停。有的只是触发器,比如某个应用的「登录时启动」:登录时跑一下
open把应用叫起来就退出,所以开着却没有 pid;关掉它应用不会退出,只是下次登录不再自启。
安装
在终端里执行这两行。这样装好的 Bollard 可以直接打开。
$ curl -fL https://bollard.tianyw0.xyz/Bollard.zip \ -o ~/Downloads/Bollard.zip $ unzip -o ~/Downloads/Bollard.zip -d /Applications
Bollard 只做了 ad-hoc 签名,没有经过 Apple 公证。用浏览器下载的话,第一次打开会被系统拦下,需要到「系统设置 → 隐私与安全性」里点「仍要打开」。
卸载一个启动项只在本次登录期间有效:plist 还在 LaunchAgents 里,下次登录系统会照常加载它。
规格
- 当前版本
- 读取中
- 系统
- macOS 11 及以上
- 芯片
- Intel 与 Apple 芯片通用,一个安装包
- 管理范围
- 当前用户的
~/Library/LaunchAgents - 生效方式
launchctl bootstrap/bootout,不需要管理员密码- 签名
- ad-hoc,未公证
- SHA-256
- 读取中