-
AppleScript 没有检测关机/注销的直接机制。
- 它确实有一个创建应用程序的机制,可以对自己退出做出反应。
- 因此,您可以:
说明:
- 打开
Script Editor 并打开一个新的脚本窗口。
- 粘贴以下代码:
# This standard handler is called when the application quits.
on quit
# Mute the system volume.
# !! See caveat below.
set volume with output muted
continue quit # signal to the system that it's OK to quit
end quit
最后一步是隐藏新应用程序的 Dock 图标,因为它没有理由拥有一个:
defaults write /full/path/to/newApp.app/Contents/Info.plist LSUIElement 1
注意:您也可以使用LSBackgroundOnly,但LSUIElement 的优点是您仍然可以想要显示 UI 元素,例如用于调试。支持>
重要提示:将新应用的完整路径替换为/full/path/to/newApp.app;该命令只有在您指定Info.plist 文件的完整路径时才有效。
要进行测试,请以交互方式启动新应用,并确保没有出现 Dock 图标。 (您可以通过Activity Monitor退出应用程序)。
CAVEAT:如果意图是抑制系统启动声音,set volume with output muted 有两个缺点:
- 关机时如果碰巧插上耳机就不行了
- 您必须在启动时取消静音音量(但是,您可以在同一应用程序的
on run 处理程序中执行此操作)。
考虑下面的替代方法,它需要管理员权限来设置并使用 root 权限调用 nvram SystemAudioVolume=%80,这绕过了上述缺点。
您可以从上述 AppleScript 应用程序运行 do shell script "nvram SystemAudioVolume=%80" user name "someAdminUsername" password "matchingAdminPassword" with administrator privileges,但您必须硬编码密码,出于安全原因,不建议这样做。
替代方法,通过com.apple.loginwindow使用系统范围的注销挂钩。
有一个已弃用机制用于在注销上运行脚本,但是,该机制在 OSX 10.10 中仍然有效;鉴于没有直接的非弃用等效项,它可能会继续受到支持。
请注意,您确实需要管理员权限:
sudo defaults write com.apple.loginwindow LogoutHook <yourScript>
<yourScript> 必须是可执行文件,例如 shell 脚本;请注意,可执行文件是在 root 用户的上下文中运行的。
如果您正在考虑静音 启动声音,请从该脚本调用以下 shell 命令:
nvram SystemAudioVolume=%80 # to try this interactively, prepend `sudo `
这将静音直到重新启动,有效地静音启动声音,而不保持静音。
请注意,nvram 命令需要 root 权限,根据定义,这些权限在通过 com.apple.loginwindow 注销挂钩运行的脚本中有效。相比之下,要以交互方式尝试命令,请使用sudo nvram SystemAudioVolume=%80 - 否则,您将收到以下无用的错误消息:nvram: Error setting variable - 'SystemAudioVolume': (iokit/common) general error