【问题标题】:Mute Macbook pro when computer is shutting down关闭计算机时将 Macbook pro 静音
【发布时间】:2015-06-13 19:47:33
【问题描述】:

我正在考虑使用 Mac 的 applescript 制作一个在系统关闭时使系统静音的程序。

虽然我是 applescript 的新手,但我不知道如何使用 IF 语句来确定系统是否正在关闭。我做了一些谷歌搜索,发现 finder 应用程序是“控制”关机的应用程序,但我不知道如何检查状态是否为“关机”。有人可以在这件事上帮助我吗?

【问题讨论】:

  • 我添加了一个 AppleScript 解决方案,其中包含我的回答说明。
  • 为了回答者和未来读者的利益:如果答案解决了您的问题,请点击大检查接受在它旁边做标记;如果您发现答案有帮助,请通过单击向上箭头图标投票(您可以同时执行这两项操作)。见the relevant help-center article。如果您的问题尚未得到完全解答,请提供反馈。

标签: macos applescript osx-yosemite


【解决方案1】:
  • 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 bundle拖入列表中,勾选旁边的复选框,使其隐藏启动。

最后一步是隐藏新应用程序的 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>

&lt;yourScript&gt; 必须是可执行文件,例如 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

【讨论】:

  • nvram... 命令在 OSX Yosemite 上给出nvram: Error setting variable - 'SystemAudioVolume': (iokit/common) general error :-(
  • @MarkSetchell:(无用)错误消息表明您没有使用sudo 运行命令。我的答案中没有包含 sudo,因为注销挂钩是以 root 身份运行的,但我会更新我的答案以明确这一点。
  • 哦,太好了!感谢您处理这条非常无益的信息!
【解决方案2】:

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

  • 将您的计算机静音。
  • 将其关闭。

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

这正是我应该解决的方法,如果我有需要,它是短暂而甜蜜的,并且应该可以很好地工作。

【讨论】:

    【解决方案3】:

    如果你想使用@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
    

    【讨论】:

    • 这通常很有帮助,但使用 set volume with output muted 的限制仍然适用:(a) 如果在关机时碰巧插入耳机,它将无法工作,并且 (b) 你将在启动取消静音音量。
    【解决方案4】:

    我知道这是一篇旧帖子,但对于仍在寻找如何做到这一点的人(就像我一样),我有一个简单的方法。 在开始编写脚本之前,我在我的主文件夹中创建了一个名为工具栏脚本的新文件夹。(这是可选的) 在显示 Finder 的桌面上单击 Go >Utilities >Script Editor。 在打开的窗口中输入或复制并粘贴代码

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

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

    打开您保存它的文件夹并将图标拖到停靠栏中。单击您刚刚放入扩展坞的图标。 现在,如果一切正常,这应该使音量静音并关闭计算机。 如果您仍然有任何打开的东西,这不会关闭计算机。

    干杯 彼得

    【讨论】:

      【解决方案5】:

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

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-06
        • 1970-01-01
        • 1970-01-01
        • 2011-07-23
        • 1970-01-01
        • 2015-09-09
        • 2021-03-06
        相关资源
        最近更新 更多