Заставить пользователей (на Mac) выйти из системы после неактивности

Я ищу способ, которым я могу заставить учетные записи, оставленные подключенными к моему Mac, автоматически выходить из системы после определенного периода бездействия.

В операционную систему (Lion) встроен параметр, который делает это, но он применим ко всем пользователям, и я хочу делать это только с определенными учетными записями.

В Windows я мог использовать gpedit, чтобы заставить пользователей использовать заставку, которая выходит из системы. Есть ли что-то подобное, что я могу сделать на Mac OS X Lion?

я единственный администратор в системе.

1 ответ

Решение

Я нашел способ сделать это, это что-то вроде хака с использованием сценариев оболочки, cron и sudo, но, похоже, это работает довольно хорошо.

Сначала создайте скрипт оболочки /bin/usertimeout принадлежащий пользователю root, измените его на 755 и вставьте в файл следующее содержимое

#!/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

Далее создайте файл /sbin/killuser, принадлежащий root, chmod это к 755 и вставьте следующее содержание

#!/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

Обратите внимание, что приведенный выше пример выполняется каждую минуту, в зависимости от того, какое время простоя вы разрешаете, вы можете увеличить его до более подходящей частоты (например, каждые 15 минут, используя */15 * * * * /bin/usertimeout)

Теперь простой мод для файла sudoers с помощью visudo и ты в порядке.

%users          ALL=(ALL) NOPASSWD: /sbin/killuser
Другие вопросы по тегам