mac开机启动项设置
将脚本设为开机自启
非sudo的自启脚本
mac下,网上可查到脚本开机自启方法众多,经验证,有效的方法包括不限于以下两种
不推荐的方法
以下方法,不管是否勾选隐藏
,都会造成开机时弹出“终端.app”或"iTerm2.app"窗口,以运行脚本。我希望是完全隐藏的运行,不要弹出窗口。
-
直接将要开机运行的脚本(如xxx.sh,xxx.sh)设为可执行(无需设成777,可执行就好)
chmod +x 【脚本】
-
将该脚本的自动打开软件设为“终端.app”或"iTerm2.app"
-
然后将此脚本添加到开机自启项
推荐的方法
以下方法,设置便捷,且开机完全隐藏运行(不弹出任何窗口)
创建一个“自动操作”的“应用程序”
将应用程序添加到开机自启项
在系统偏好设置中,如下操作
点击隐藏
表示开机时App的窗口不在屏幕上弹出
需要sudo的自启脚本
不推荐的方法
com.apple.loginwindow LoginHook: launchctl是苹果官方推荐的开机自启方法, 功能比此法更强大
launchctl
launchctl是苹果官方推荐的开机自启方法. 支持开机自启/用户登录自启,支持守护进程(周期性运行、持续运行),支持用sudo或普通用户运行
配置步骤
-
编写自己的脚本, 添加可执行权限
- 注意, 要用
sh
来测试运行, 而不是用bash
或sh
chmod a+x 【myscript】.sh
- 注意, 要用
-
编写Launchd配置文件,
【服务名称】.plist
文件(【服务名称】可以包含"."), 文件内写入如下内容- 文件名与下文的
Label
字段必须相同
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>【服务名称】</string> <key>ProgramArguments</key> <array> <string>【myscript.sh的路径】</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist>
- 检查
.plist
文件语法是否正确
plutil 【.plist文件】
- 文件名与下文的
-
结合上述两篇文章, 确定
.plist
文件放在系统启动还是用户启动时运行脚本, 我选择的是用户目录(~/Library/LaunchAgents/
)plist脚本存放在以下目录:
类型 目录 运行条件 用于 User Agents ~/Library/LaunchAgents 当前用户登录后运行 由用户自己定义的任务项 Global Agents /Library/LaunchAgents 任何用户登录后都会运行 由管理员为用户定义的任务项 Global Daemons /Library/LaunchDaemons 内核初始化加载完后就运行, 无需用户登录 由管理员定义的守护进程任务项 System Agents /System/Library/LaunchAgents 任何用户登录后都会运行 由Mac OS X为用户定义的任务项 System Daemons /System/Library/LaunchDaemons 内核初始化加载完后就运行, 无需用户登录 由Mac OS X定义的守护进程任务项 -
load这个配置:
launchctl load -w 【.plist文件】
以下服务如果需要用sudo才能启动的,需要在命令前加入sudo
-
登入登出测试, 或用如下命令测试
launchctl start 【服务名称】
launchctl 命令用法
加sudo
则为root用户的launchctl, 不加sudo
则为当前用户的launchctl.
-
加载启动任务, 加
-w
则此后每次登录/开机仍然加载, 否则不加载[sudo] launchctl load [-w]【.plist文件路径】
-
卸载启动任务, 加
-w
则此后每次登录/开机则不再加载, 否则仍加载[sudo] launchctl load [-w]【.plist文件路径】
-
查看服务运行状态:
[sudo] launchctl list
- 第一个数字是进程的PID,如果它正在运行,如果它不运行,它显示一个’ - ‘
- 第二个数字是进程的退出代码(如果它已经完成),如果是负数,则是杀死信号的数量
- 第三列是进程名称
将应用程序设置为开机自启
法一【推荐】
在系统偏好设置-用户与群组-登录项
加上xxx.app
,并勾选隐藏
,则登录系统用户后:
- 应用程序的前台窗口不会开(若勾选
隐藏
)/会开(若勾除隐藏
) - 屏幕下方程序坞中会出现这个应用的图标,并带有一个小白点(带有一个小白点,表示程序正在运行)
- 若该应用程序有相应的任务栏图标,则屏幕右上方也会出现它
法二(当法一失效时使用)
在系统偏好设置-用户与群组-登录项
去掉XXX.app的开机自启
用Automator.app
创建一个隐藏打开Folx.app
, 内部使用applescript, applescript内容为
-
后台开启应用程序
on run {input, parameters} tell application "XXX" to launch tell application "System Events" to set visible of process "XXX" to false end run
而后,在
系统偏好设置-安全性与隐私-隐私-辅助功能
里, 添加隐藏打开XXX.app
, 以便使得它能够如上面代码那样调用"System Events”
。
tell application "应用程序名称" to launch
是后台开启,即:应用程序的窗口不会开
-
前台开启应用程序
on run {input, parameters} tell application "XXX" to activate end run
tell application "应用程序名称" to activate
是前台开启,即:应用程序的窗口会开
而后,在系统偏好设置-用户与群组-登录项
里, 添加隐藏打开XXX.app
。
则登录系统用户后, XXX.app的前台窗口全程都不会/会启动;屏幕右上方的任务栏中会出现XXX程序;屏幕下方的程序坞也会出现带小白点的XXX.app(带有一个小白点,表示程序正在运行)。
异常开机自启的软件
Folx.app
在Folx软件内部设置里没有开机自启的选项。
若在系统偏好设置-用户与群组-登录项
加上Folx.app,并勾选隐藏
,则登录系统用户后, Folx的前台窗口不会开;程序坞中会出现这个应用的图标,并带有一个小白点(带有一个小白点,表示程序正在运行);任务栏图标会出现Folx的图标。
SideNotes.app
在软件内部的设置里, 勾选开机自启后, 在系统偏好设置-用户与群组-登录项
里却没有此app. 登录系统用户后, 会闪现一个标题为”windows”, 内容为空的窗口, 一秒左右消失.
解决办法: 则软件内部的设置里, 勾除开机自启; 而后在系统偏好设置-用户与群组-登录项
里, 勾选此app, 并选中隐藏
. 登录系统用户后, 不会有此闪现的窗口.
qv2ray.app
在qv2ray软件内部设置里, 勾选开机自启后, 则在系统偏好设置-用户与群组-登录项
里有qv2ray.app。 登录系统用户后, 会显示qv2ray的主窗口(即代理节点列表的窗口), 并不会自动关闭前台窗口
解决办法: 则软件内部的设置里, 勾除qv2ray的开机自启, 而后在系统偏好设置-用户与群组-登录项
里此软件会自动消失. 用Automator.app
创建一个隐藏打开qv2ray.app
, 内部使用applescript, 内容为
on run {input, parameters}
tell application "qv2ray" to activate
tell application "System Events"
keystroke "W" using {command down}
end tell
end run
并在系统偏好设置-安全性与隐私-隐私-辅助功能
里, 添加隐藏打开qv2ray.app
, 以便使得它能给"System Events”
发送快捷键.
而后, 在系统偏好设置-用户与群组-登录项
里, 添加隐藏打开qv2ray.app
. 则登录系统用户后,屏幕右上方的任务栏中会出现qv2ray, qv2ray主窗口只会闪现一秒就消失, 而后qv2ray保持后台运行,且屏幕下方的程序坞qv2ray的带小白点会消失(带有小白点表示程序正在运行)。