我有一台 MacBook Air。我经常使用 Microsoft 的 RDP 客户端连接到虚拟工作站。在 OS X 进入睡眠状态之前,我需要在合上盖子时自动关闭此 RDP 会话(退出 RDP)。
如何实现这个功能?
有几个工具可以让你拦截 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 处于睡眠状态,就会始终执行该文件。