如何在 OS X 中关闭盖子时关闭应用程序

Max*_*lov 4 lid macos

我有一台 MacBook Air。我经常使用 Microsoft 的 RDP 客户端连接到虚拟工作站。在 OS X 进入睡眠状态之前,我需要在合上盖子时自动关闭此 RDP 会话(退出 RDP)。

如何实现这个功能?

slh*_*hck 9

有几个工具可以让你拦截 OS X 的电源状态变化:

睡眠监测器安装

让我们用 Sleep Watcher 试试这个。从 Bernhard Baehr 的主页下载该工具并按照安装说明进行操作:假设您已将下载解压到桌面,请从终端窗口调用以下命令:

sudo mkdir -p /usr/local/sbin /usr/local/share/man/man8
sudo cp ~/Desktop/sleepwatcher_2.2/sleepwatcher /usr/local/sbin
sudo cp ~/Desktop/sleepwatcher_2.2/sleepwatcher.8 /usr/local/share/man/man8
Run Code Online (Sandbox Code Playgroud)

这将安装sleepwatcher二进制文件和联机帮助页。系统将提示您输入管理员密码。

创建睡眠脚本

现在,让我们创建一个名为~/.sleep. 它将包含机器进入睡眠状态时(即盖子关闭时)运行的命令。

touch ~/.sleep
open -e !$
Run Code Online (Sandbox Code Playgroud)

在此文件中,添加以下内容:

osascript -e 'tell application "Remote Desktop Connection" to quit'
Run Code Online (Sandbox Code Playgroud)

这将通过 AppleScript 命令退出 Microsoft RDP 应用程序。只要您根据其标题更改名称,您就可以对任何应用程序执行此操作。保存文件。现在我们需要让它可执行:

chmod +x ~/.sleep
Run Code Online (Sandbox Code Playgroud)

测试睡眠脚本

现在首先启动 RDP 程序,然后在终端中运行以下命令来测试您的脚本:

/usr/local/sbin/sleepwatcher --verbose --sleep ~/.sleep
Run Code Online (Sandbox Code Playgroud)

这不会输出任何内容,因此让 RDP 和 Sleep Watcher 都运行,然后合上 MacBook 的盖子。等待几秒钟,直到它真正进入睡眠状态。然后再次唤醒它。RDP 关闭了吗?伟大的!有什么问题吗?查看sleepwatcher命令的输出以获取有关失败位置的提示。

您现在可以通过按CtrlC终端来取消睡眠观察器。

在后台运行脚本

为了让 Sleep Watcher 始终运行,您需要将其设置为 LaunchDaemon。通过复制示例配置和rc-scripts 来创建一个新的配置文件。

sudo cp ~/Desktop/sleepwatcher_2.2/config/de.bernhard-baehr.sleepwatcher-20compatibility.plist /Library/LaunchDaemons/de.bernhard-baehr.sleepwatcher.plist
sudo cp ~/Desktop/sleepwatcher_2.2/config/rc.* /etc
Run Code Online (Sandbox Code Playgroud)

现在加载配置文件launchd

sudo launchctl load /Library/LaunchDaemons/de.bernhard-baehr.sleepwatcher.plist
Run Code Online (Sandbox Code Playgroud)

这就是你所需要的。现在,.sleep只要您使 Mac 处于睡眠状态,就会始终执行该文件。