Как закрыть приложение на закрытой крышке в OS X

2212
Maxim V. Pavlov

У меня есть MacBook Air. Я часто использую RDP-клиент Microsoft для подключения к виртуальной рабочей станции. Мне нужно, чтобы этот сеанс RDP был автоматически закрыт (выход из RDP), когда я закрываю крышку, прежде чем OS X перейдет в спящий режим.

Как можно достичь этой функциональности?

4
Какое приложение OS X вы используете для подключения к Windows? Вы используете http://www.microsoft.com/mac/remote-desktop-client? Colyn1337 10 лет назад 0
Да, Клиент удаленного рабочего стола от Microsoft. Maxim V. Pavlov 10 лет назад 0
Возможно, вы захотите задать этот вопрос на сайте http://apple.stackexchange.com/. Так что кто-то здесь может знать, я бы подумал, что для этого потребуется создать собственный сценарий сна, который проверяет программу RDP и закрывает ее. То, что вы пытаетесь достичь, является противоположностью того, для чего предназначен Сон. Colyn1337 10 лет назад 0
@ Colyn1337 OS X вопросы по теме здесь. Пожалуйста, не советуйте пользователям размещать свой вопрос в другом месте, так как перекрестная публикация запрещена. У Максима может быть вопрос * перенесен * на другой вопрос, если он не получит подходящий ответ, скажем, через пару дней. Спасибо за понимание. slhck 10 лет назад 0
@slhck Я никогда не говорил, что это не так. Я просто рекомендовал более конкретное сообщество. Colyn1337 10 лет назад 0
Почему конкретно нужно отключить перед сном? Сервер автоматически отключит его, когда обнаружит, что соединение разорвано, и клиент восстановит соединение, когда ваш Mac проснется. Darth Android 10 лет назад 0
@ Colyn1337 Просто имейте в виду, что, хотя это более конкретное сообщество, там тоже меньше людей; Кроме того, сами сообщества не разделены - я уверен, что многие люди просматривают как Ask Different, так и SuperUser, если не большинство из них. Darth Android 10 лет назад 0
@DartAndroid, ситуация такова, что я не уверен, кто будет рядом с ноутбуком, когда я проснусь ото сна. Что, если это люди, которые захотят найти что-то, что действительно находится на машине с удаленным RDP-доступом. Я уверен, что с RDP, снятым с крышки, люди даже не узнают, что я использовал RDP с первого взгляда. Я знаю, это может звучать странно, но это реальный сценарий, к которому я должен быть готов. Maxim V. Pavlov 10 лет назад 0

1 ответ на вопрос

6
slhck

There are a couple of tools that allow you to intercept OS X' power status changes:

Sleep Watcher installation

Let's try this with Sleep Watcher. Download the tool from Bernhard Baehr's homepage and follow the installation instructions: assuming you unpacked the download to your Desktop, call the following commands from a Terminal window:

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 

This will install the sleepwatcher binary and the manpages. You will be prompted for an administrator password.

Creating a sleep script

Now, let's create a sleep script called ~/.sleep. It will contain the commands that are run when the machine is put to sleep (i.e. when the lid closes).

touch ~/.sleep open -e !$ 

In this file, add the following:

osascript -e 'tell application "Remote Desktop Connection" to quit' 

This will quit the Microsoft RDP application through AppleScript commands. You can do this with any application as long as you change the name according to its title. Save the file. Now we need to make it executable:

chmod +x ~/.sleep 

Testing the sleep script

Now test your script by first starting the RDP program, then running the following in Terminal:

/usr/local/sbin/sleepwatcher --verbose --sleep ~/.sleep 

This will not output anything, so leave both RDP and the Sleep Watcher running, then close the lid of your MacBook. Wait a couple of seconds until it really goes to sleep. Then wake it up again. Did RDP close? Great! Did something go wrong? Look at the output of the sleepwatcher command to get a hint about where it failed.

You can now cancel the Sleep Watcher by pressing CtrlC in Terminal.

Running the script in background

In order to have the Sleep Watcher run at all times, you need to make it a LaunchDaemon. Create a new configuration file by copying the example configuration and 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 

Now load the configuration files with launchd:

sudo launchctl load /Library/LaunchDaemons/de.bernhard-baehr.sleepwatcher.plist 

That's all you need. Now the .sleep file will always be executed whenever you sleep your Mac.

С тех пор, как был получен этот изумительный ответ, Microsoft изменила название своего приложения, поэтому правильный вызов osascript теперь таков: `osascript -e 'сообщает приложению" Подключение к удаленному рабочему столу ", чтобы оно вышло" Maxim V. Pavlov 7 лет назад 0
@ MaximV.Pavlov Спасибо за комментарий, но разве это не мой ответ? slhck 7 лет назад 0
Мой плохой, вероятно, у меня было что-то другое, и вы изначально дали правильное название. Кстати, сейчас я звоню двум осакриптам. Один, чтобы закрыть Microsoft Remote Desktop, а другой, чтобы закрыть реальные окна сеансов, которые называются «Подключение к удаленному рабочему столу». Maxim V. Pavlov 7 лет назад 0