2

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

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

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

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

1 ответ1

3

Я нашел способ сделать это, это что-то вроде хака с использованием сценариев оболочки, 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, измените его на 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .