web-dev-qa-db-ja.com

OSXでふたを閉じてアプリケーションを閉じる方法

MacBookAirを持っています。私はよくMicrosoftのRDPクライアントを使用して仮想ワークステーションに接続します。 OS Xがスリープ状態になる前に、ふたを閉じるときにこのRDPセッションを自動的に閉じる(RDPを終了する)必要があります。

この機能はどのように実現できますか?

4
Maxim V. Pavlov

OSXの電源ステータスの変化を傍受できるツールがいくつかあります。

スリープウォッチャーのインストール

SleepWatcherでこれを試してみましょう。 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

これにより、sleepwatcherバイナリとマンページがインストールされます。管理者パスワードの入力を求められます。

スリープスクリプトの作成

それでは、~/.sleepというスリープスクリプトを作成しましょう。これには、マシンがスリープ状態になったとき(つまり、ふたが閉じたとき)に実行されるコマンドが含まれます。

touch ~/.sleep
open -e !$

このファイルに、以下を追加します。

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

これにより、AppleScriptコマンドを使用してMicrosoftRDPアプリケーションが終了します。タイトルに応じて名前を変更する限り、どのアプリケーションでもこれを行うことができます。ファイルを保存します。次に、実行可能にする必要があります。

chmod +x ~/.sleep

スリープスクリプトのテスト

次に、最初にRDPプログラムを起動し、次にターミナルで以下を実行して、スクリプトをテストします。

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

これでは何も出力されないため、RDPとSleep Watcherの両方を実行したままにして、MacBookの蓋を閉じます。実際にスリープ状態になるまで数秒待ちます。その後、再び目を覚まします。 RDPは終了しましたか?すごい!何かがうまくいかなかったのですか? sleepwatcherコマンドの出力を見て、失敗した場所に関するヒントを取得します。

を押してスリープウォッチャーをキャンセルできるようになりました CtrlC ターミナルで。

スクリプトをバックグラウンドで実行する

Sleep Watcherを常に実行するには、LaunchDaemonにする必要があります。設定例とrc-スクリプトをコピーして、新しい設定ファイルを作成します。

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

次に、launchdを使用して構成ファイルをロードします。

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

必要なのはそれだけです。これで、Macをスリープ状態にするたびに.sleepファイルが常に実行されます。

8
slhck