ログアウト時にスクリプト/アプリを実行する


13

Mac OS Xには非常に便利なログインアイテム機能があり、特にログイン時に実行するアプリ/スクリプトを設定できることがわかっています。

ログアウト時に実行するスクリプト/アプリのリストを設定する方法を探しています。必要に応じて、「ログアウトアイテム」リスト。
基本的に、ログアウトまたはシャットダウンしたときに自動的に実行される、いくつかの小さなクリーンアップスクリプトを自分用に作成します。

そのため、ログアウト時にスクリプト(または理想的にはそれらのリスト)を自動的にトリガーする方法を探しています。ログアウトは、スクリプトが完了するまで待機します(アプリが要求した場合にログアウトが[保存]をクリックするのを待つ方法と同じです)。

Mac OS Xからログアウトするときに、スクリプトを自動的にトリガーする方法はありますか?


回答:


7

ログアウトフックは10.4廃止されましたが、10.9の時点で引き続き機能します。

sudo defaults write com.apple.loginwindow LogoutHook ~/.logouthook
echo $'#!/bin/bash\nsay a' > ~/.logouthook
chmod +x ~/.logouthook

LogoutHookキーの値は、実行可能ファイルへのパスのみであり、シェルコマンドではありません。ログアウトフックはルートとして実行されます。

defaultsコマンドは、/ var / root / Library / Preferences / com.apple.loginwindow.plistを変更します。LogoutHookキーを/Library/Preferences/com.apple.loginwindow.plistに追加しても機能しません。

ログアウトフックの実行に十分な時間がかかる場合、ログアウトフックが終了するまで灰色の画面が表示されます。ログアウトフックが強制的に終了されるまでの時間制限はないようです。

launchdを使用してログアウト時にプログラムを確実に実行する方法がわかりません。EXITなどの信号をトラップしようとすると、トラップ内のコードは、ログインウィンドウにログアウトしたときにのみ実行され、シャットダウンまたは再起動したときは実行されませんでした。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>test</string>
  <key>ProgramArguments</key>
  <array>
    <string>bash</string>
    <string>-c</string>
    <string>trap 'echo a>/Users/username/Desktop/a;say a' EXIT;while :;do sleep 10;done</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

うーん、どちらも私のために働いていません。私が持っているこのスクリプト私はそれを実行した場合に動作し、sh(それがその.txtファイルを作成します)。スクリプトを/etc/rc.shutdown.localとして保存しdefaults、あなたが言ったように追加しました。どちらのファイルもまだありませんでした。私は何か間違っていますか?ありがとう!
ネイサングリーンスタイン

何か間違ったことをしているかどうかはわかりません。10.6.8を使用していますが、LogoutHookが機能しません。あなたが見てとることができれば場合、私は感謝し、このスクリーンショットをし、何かが間違って見える場合、私に知らせてください。ありがとう!
ネイサングリーンスタイン

1
あ!最後の1つは10.6.8でトリックを行いました。ありがとう!ただし、Lionでは機能しません:
ネイサングリーンスタイン

2
私のMountain Lion(10.8.2)マシンでは、シャットダウンまたは再起動しても、どちらの方法でも問題なく動作します。LoginHook / LogoutHookフックはルートユーザーのコンテキストで実行され、それらは単一のシステム全体のフックであり、ログインフックは同期的に実行されることに注意してください。同様に、ログアウトフックは、EXIT-trapメソッドを使用するユーザーごとの起動エージェントよりも早く実行されます。フックだけが機能する場合があります。たとえば、シャットダウン時にサウンドをミュートしてMacの起動音を抑制する場合、LogoutHookのみが確実に機能します。
mklement0

1

実際には方法があります:

  1. 「スクリプトエディター」アプリを開きます
  2. ペースト

do shell script "PUT YOUR START SCRIPT PATH HERE"

on quit
    do shell script "PUT YOUR STOP SCRIPT PATH HERE"
    continue quit
end quit
  1. [ファイル]> [保存]、[ アプリケーションを選択して、実行ハンドラーと保存後に開いたままにする
  2. [システム環境設定]> [ユーザーとグループ]> [ログインアイテム]タブ> [+]ボタン
  3. アプリケーションを追加し、非表示としてマークします

Dockから非表示にするには:

  1. アプリケーションを右クリックし、[パッケージコンテンツを表示]を選択します
  2. Info.plistを開いて追加します

<key>NSUIElement</key>
<string>1</string>

これが大好き。シンプルでニーズに合ったもの。非推奨ではありません。
イヴァンX

0

これにはスクリプトタイマーが適しています。ログアウト、ログインなどで実行できます。シンプルで使いやすいソリューションのためにこれを使います。シンプルなGUIがあります。

トリガーアクション

スクリプトタイマーについて注意する必要がある2つのことがあります。1つは、無料ではありません。費用は12ドルですが、個人的には価値があると思います。2つ目は、Lionとの完全な互換性はありませんが、互換性を確保したらすぐに無料でアップデートすることを約束しています。


1
これは現在非推奨です
Kirtikumar A.

0

Platypusなどを使用してスクリプトからMacアプリケーションを作成し、他のアプリケーションと同様にログインアイテムに追加することもできます。


0

Power Managerは、ユーザーがログアウトするときにスクリプトを実行できます。これは商用製品であり、最新のmacOSをサポートしています。

Power Managerは、ログアウトスケジュールアシスタントタスクでスクリプトを実行します

以前のバージョンでは、イベントエディターを使用する必要がありましたが、ログインおよびログアウト時にスクリプトを実行するためのスケジュールアシスタントタスクが含まれるようになりました。

Power Managerを作成したので、その実装について技術的な質問を気軽に行ってください。ログアウトトリガーイベントの場合、Power Managerはユーザー状態の変化をポーリングせず、代わりにmacOSによってユーザーの変化を通知されます。このアプローチは、スクリプトのループ/ポーリングよりも効率的です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.