在计算机关闭时静音Macbook pro

时间:2015-04-08 17:42:15

标签: macos applescript osx-yosemite

我正在考虑使用Mac的AppleScript制作一个程序,在系统关机时将系统静音。

虽然我不熟悉AppleScript,但我不知道如何使用IF语句来确定系统是否正在关闭。我已经完成了一些谷歌搜索,我发现找不到应用程序是控制"关机,但我不知道如何检查状态是否已关闭"。有人可以帮我解决这个问题吗?

5 个答案:

答案 0 :(得分:2)

  • AppleScript没有直接检测关闭/注销的机制
  • 它有一个创建应用程序的机制可以对自己做出 退出
  • 因此,您可以:
    • 使用 AppleScript创建一个支持打开的应用程序.app包),其中包含标准on quit处理程序,您可以在其中执行所需的操作行动(
    • 确保应用程序在登录时启动 - 在更简单的情况下,作为登录项(通过System Preferences,见下文),或者,更灵活但更复杂,作为发布代理(请参阅https://stackoverflow.com/a/22872222/45375)。

<强>说明:

  • 打开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
    
  • 将脚本另存为保持打开的应用程序

    • File Format 应用
    • 检查 Stay open after run handler
  • 打开System Preferences > Users & Groups > Login Items,将新保存的*.app捆绑包拖到列表中,然后选中它旁边的复选框,以使其隐藏启动。

最后一步是隐藏新应用程序的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 使用系统范围的退出挂钩。

已弃用机制,用于在 logout 上运行脚本,但是,仍然可以在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

答案 1 :(得分:1)

老实说,最好是制定一个确定性的解决方案。我的意思是,你制作一个脚本:

  • 使您的计算机静音。
  • 关闭它。

然后,您将获取脚本并创建一个Automator服务,您可以将其分配给某个快捷方式,以便您更轻松地使用它。 ctrl-opt-cmd-eject等等。 :)

这就是我如何解决它,如果我有需要,做工作的时间短而且很好,而且应该合理地工作。

答案 2 :(得分:0)

如果你想使用@ mklement0答案中提到的 LogoutHook

您可以使用正常的Applescript命令set volume with output muted

您只需将osascript shebang添加到Applescript文档的顶部

#!/usr/bin/osascript


set volume with output muted

然后将文件保存为applescript文本文件。

在保存对话框中使用: 文件格式:文字

它将获得扩展名 .applescript

保存后,使用Terminal.app chmod 脚本,就像使用普通的shell脚本一样。

/bin/chmod +x foo.applescript

然后将其添加到loginwindows LogoutHook。

sudo defaults write com.apple.loginwindow LogoutHook foo.applescript

答案 3 :(得分:0)

我知道这是一篇过时的文章,但是对于仍然在寻找如何执行此操作的人(像我一样),我有一个简单的方法。 在开始脚本编写之前,我在主文件夹中创建了一个名为工具栏脚本的新文件夹。(这是可选的) 在桌面显示Finder的情况下,单击转到>实用程序>脚本编辑器。 在打开的窗口中输入或复制并粘贴代码

set volume with output muted
tell application "finder"
shut down
end tell

单击添加的脚本上方的最后一个按钮-它应该已编译。如果找不到该按钮,则在顶部单击“脚本”>“编译” 单击“文件”>“保存”,在我称为“我的关机”的保存中,然后选择脚本文件夹(这是可选的) 在对话框底部的文件格式处,单击箭头,然后将格式更改为应用程序,然后单击保存。

打开保存该文件夹的文件夹,然后将图标拖到扩展坞。单击您刚刚放置在扩展坞中的图标。 现在,如果一切正常,则应该使音量静音并关闭计算机。 如果您仍有任何打开的空间,则不会关闭计算机。

欢呼 彼得

答案 4 :(得分:0)

首先,您应该创建一个关闭脚本(带有终端)

sudo nano /Library/Scripts/sound-off.sh

在用以下行填充它之后:

#!/bin/bash
osascript -e ‘set volume output muted 1’

并制作一个类似的声音脚本

sudo nano /Library/Scripts/sound-on.sh

并填写:

#!/bin/bash
osascript -e ‘set volume 4’

然后将它们作为执行文件访问

sudo chmod u+x /Library/Scripts/sound-off.sh
sudo chmod u+x /Library/Scripts/sound-on.sh

,然后在关闭和打开mac设备时设置它们的最后一部分:

sudo defaults write com.apple.loginwindow LogoutHook /Library/Scripts/sound-off.sh
sudo defaults write com.apple.loginwindow LoginHook /Library/Scripts/sound-on.sh