web-dev-qa-db-ja.com

非アクティブになった後、ユーザーに(Macの場合)ログオフを強制する

Macにログオンしたままのアカウントを、一定期間操作がない場合に自動ログオフする方法を探しています。

これを行う設定がオペレーティングシステム(Lion)に組み込まれていますが、これはすべてのユーザーに適用され、特定のアカウントでのみこれを実行したいと思います。

Windowsでは、gpeditを使用して、ユーザーをログオフするスクリーンセーバーを使用するようにユーザーに強制することができます。 Mac OS X Lionでできることと似たようなことはありますか?

p.s.私はシステムの唯一の管理者です。

2
Bryan

私はこれを行う方法を考え出しました。これはシェルスクリプト、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
3
Bryan