一定時間が経過したらバックグラウンドでログインしているユーザをログアウトさせる

2010年6月13日

Mac OS X Hintsに掲載されていた情報です。

Macは複数アカウントを作成してログアウトしなくても、ファストユーザスイッチなどを利用してそのアカウントをログインしたまま別アカウントでログインできるのですが、作業を再開する予定もないのにバックグラウンドで別アカウントがログインしていてもCPUリソースの無駄です。

何十分~何時間バックグラウンドでログイン状態を保持させていても、結局は作業を再開せずに無駄になることが多いので、一定時間経過したら自動的にログアウトするような設定にしておくと良いかも知れません。

以下をコピーしてテキストエディタなどで「com.yourname.backgroundUserLogout.plist」という名前で「~/ライブラリ/LaunchAgents」へ保存します。

<?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>com.yourname.backgroundUserLogout</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>-c</string>
<string>if [ $(stat -f %u /dev/console) == $UID ]; then if [ -e /tmp/backgroundUserLogout.$UID ]; then rm /tmp/backgroundUserLogout.$UID; fi; elif [ ! -e /tmp/backgroundUserLogout.$UID ]; then touch /tmp/backgroundUserLogout.$UID; elif [ $(( `date +%s` - `stat -f %m /tmp/backgroundUserLogout.$UID || printf 0` )) -ge $(( 60 * 30 )) ]; then rm /tmp/backgroundUserLogout.$UID; osascript -e 'tell application "System Events" to log out'; fi</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>60</integer>
</dict>
</plist>

「(( 60 * 30 ))」の「30」の部分を任意の数字にすることにより、バックグラウンドログイン状態が何分経過すればログアウトするか設定できます。

数字を何も弄らなければ30分でログアウトします。

もちろんバックグラウンドでログインしているアカウントをログアウトさせるので、なんの警告もなくログアウトされ作業中のファイルやアプリの状態などは保存されないので、利用には注意が必要です。