Заставить пользователей (на 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