Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 电脑关机时将Macbook pro静音_Macos_Applescript_Osx Yosemite - Fatal编程技术网

Macos 电脑关机时将Macbook pro静音

Macos 电脑关机时将Macbook pro静音,macos,applescript,osx-yosemite,Macos,Applescript,Osx Yosemite,我正在考虑使用Mac的applescript制作一个程序,在系统关闭时使系统静音 虽然我是applescript新手,但我不知道如何使用IF语句来确定系统是否正在关闭。我在谷歌上搜索了一下,发现finder应用程序是“控制”关机的应用程序,但我不知道如何检查状态是否为“关机”。有谁能在这件事上帮助我吗?老实说,最好是制定一个确定性的解决方案。我的意思是,你制作了一个脚本: 使计算机静音 关闭它 然后,使用脚本并创建一个Automator服务,您可以将其分配给某个快捷方式,以便更轻松地使用它。

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


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

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

  • 使计算机静音
  • 关闭它
然后,使用脚本并创建一个Automator服务,您可以将其分配给某个快捷方式,以便更轻松地使用它。ctrl-opt-cmd-eject或其他东西。:)

这正是我应该如何解决它的,如果我有需要的话,它是短而甜的,可以工作,并且应该工作得相当好。

  • AppleScript没有检测关闭/注销的直接机制
  • 它确实有一个机制来创建应用程序,该机制可以对自己被退出做出反应
  • 因此,您可以:
    • 使用AppleScript创建一个保持打开状态的应用程序(
      .app
      捆绑包),其中包含一个标准
      on quit
      处理程序,您可以在该处理程序中执行所需的操作(
    • 确保应用程序在登录时启动——在更简单的情况下,作为登录项启动(通过
      系统首选项启动
      ,请参见下文),或者作为启动代理启动(请参见),具有更大的灵活性和复杂性

说明:

  • 打开
    脚本编辑器
    并打开一个新的脚本窗口
  • 粘贴以下代码:
#当应用程序退出时调用此标准处理程序。
辞职
#静音系统音量。
#!!请参见下面的警告。
设置输出静音时的音量
继续退出#向系统发出退出的信号
结束退出
  • 将脚本另存为保持打开的应用程序:

    • 使用
      文件格式
      应用程序
    • 检查
      运行处理程序后保持打开状态
  • 打开
    System Preferences>Users&Groups>Login Items
    ,将新保存的
    *.app
    捆绑拖动到列表中,选中其旁边的复选框,使其隐藏

最后一步是隐藏新应用程序的Dock图标,因为它没有理由有这样的图标:

  • 从终端运行以下操作:
默认写入/full/path/to/newApp.app/Contents/Info.plist LSUIElement 1
注意:您也可以使用
LSBackgroundOnly
,但是
LSUIElement
的优点是,如果需要,您仍然可以显示UI元素,例如用于调试

重要:将新应用的完整路径替换为
/full/path/to/newApp.app
;只有在
Info.plist
文件中指定完整路径时,命令才会起作用

要进行测试,请以交互方式启动新应用程序,并确保未显示停靠图标。(您可以通过
活动监视器退出该应用程序。

警告:如果意图抑制系统启动声音
在输出静音的情况下设置音量
有两个缺点:

  • 如果在关机时碰巧插上了耳机,它将无法工作
  • 您必须在启动时取消该卷的静音(但是,您可以在同一应用程序中的on
    on-run
    处理程序中执行此操作)
考虑下面的替代方法,它需要管理员权限来设置并使用root权限调用
nvram SystemAudioVolume=%80
,从而绕过上述缺点

您可以从上面的AppleScript应用程序中以管理员权限运行
do shell脚本“nvram SystemAudioVolume=%80”用户名“someAdminUsername”密码“matchingAdminPassword”,但您必须硬编码密码,出于安全原因,不建议这样做


替代方法,通过
com.apple.loginwindow使用系统范围的注销挂钩

在注销时运行脚本有一种不推荐使用的机制,但在OSX 10.10中仍然有效;如果没有直接的非推荐使用的等效机制,它可能会继续受到支持

请注意,您确实需要管理员权限

sudo默认写com.apple.loginwindow LogoutHook
必须是可执行文件,如shell脚本;请注意,可执行文件是在根用户的上下文中运行的

如果您想静音启动声音,请从该脚本调用以下shell命令:

nvram SystemAudioVolume=%80#若要以交互方式尝试此操作,请在“sudo”前面加上前缀`
这将使声音静音,直到重新启动后,有效地静音启动声音,而不会保持静音


请注意,
nvram
命令需要root权限,根据定义,这些权限在通过
com.apple.loginwindow
注销挂钩运行的脚本中有效;相反,要以交互方式尝试该命令,请使用
sudo nvram SystemAudioVolume=%80
-否则,您将得到以下无用的错误消息:
nvram:设置变量“SystemAudioVolume”时出错:(iokit/common)如果要使用@mklement0答案中提到的LogoutHook,则出现一般错误

您可以使用普通的Applescript命令
在输出静音的情况下设置音量

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

i、 e

然后将文件另存为appl
#!/usr/bin/osascript


set volume with output muted
/bin/chmod +x foo.applescript
sudo defaults write com.apple.loginwindow LogoutHook foo.applescript
set volume with output muted
tell application "finder"
shut down
end tell
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
sudo defaults write com.apple.loginwindow LogoutHook /Library/Scripts/sound-off.sh
sudo defaults write com.apple.loginwindow LoginHook /Library/Scripts/sound-on.sh