Macにログオンしたままのアカウントを、一定期間操作がない場合に自動ログオフする方法を探しています。
これを行う設定がオペレーティングシステム(Lion)に組み込まれていますが、これはすべてのユーザーに適用され、特定のアカウントでのみこれを実行したいと思います。
Windowsでは、gpeditを使用して、ユーザーをログオフするスクリーンセーバーを使用するようにユーザーに強制することができます。 Mac OS X Lionでできることと似たようなことはありますか?
p.s.私はシステムの唯一の管理者です。
私はこれを行う方法を考え出しました。これはシェルスクリプト、cron、Sudoを使用したちょっとしたハックですが、かなりうまく機能しているようです。
まず、rootが所有するシェルスクリプト/bin/usertimeout
を作成し、それを755にchmodして、次のコンテンツをファイルに貼り付けます。
#!/bin/bash
# Timeout is the number of seconds a login session can be idle before it is
# automatically logged out.
timeout=3600
if [ $(stat -f %u /dev/console) == $UID ]
then
if [ -e /tmp/backgroundUserLogout.$UID ]
then
rm /tmp/backgroundUserLogout.$UID
fi
else
if [ ! -e /tmp/backgroundUserLogout.$UID ]
then
touch /tmp/backgroundUserLogout.$UID
else
if [ $(( `date +%s` - `stat -f %m /tmp/backgroundUserLogout.$UID || printf 0` )) -ge $(( $timeout )) ]
then
rm /tmp/backgroundUserLogout.$UID
Sudo /sbin/killuser
fi
fi
fi
次に、rootが所有するファイル/sbin/killuser
を作成し、それを755にchmodして、次のコンテンツを貼り付けます
#!/bin/bash
#
# Logs out the user calling this script
# Get the PID of the loginwindow process for the user executing this
pid=`ps -Axjc | grep ^$Sudo_USER | grep loginwindow | cut -c 14-20 | tr -d /\ /`
# If the PID appears to be valid, kill the process
if [ $pid -gt 0 2>/dev/null ]
then
kill -9 $pid
fi
次に、自動ログアウトするユーザーごとにcrontabエントリを追加します。すべてのユーザーに影響を与えたい場合、これは苦痛ですが、私の場合、アイドル状態でログアウトする必要があるのは少数のユーザーだけです。
# Crontab for user that has to be autologged out
* * * * * /bin/usertimeout
上記の例は、許可するアイドル時間に応じて1分ごとに実行されることに注意してください。これをより適切な頻度に増やすことができます(たとえば、*/15 * * * * /bin/usertimeout
を使用して15分ごと)。
これで、visudo
を使用してsudoersファイルを簡単に変更できます。これで準備完了です。
%users ALL=(ALL) NOPASSWD: /sbin/killuser