Вы можете настроить свою учетную запись Mac OS X на автоматическую блокировку экрана, чтобы пароль требовался после определенного периода бездействия, но можете ли вы сделать то же самое, используя расписание (скажем, в 17:30 каждый день)? Это похоже на то, как вы можете включать/выключать компьютер или переходить в спящий режим/выходить из него в определенное время.
Вы можете использовать launchd
для этого. Поместите следующий xml в новый текстовый файл ~/Library/LaunchAgents/
и назовите его описательным с суффиксом .plist
. Например, мой ~/Library/LaunchAgents/logoutAt1730.plist
.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>Logout At 5:30 PM</string>
<key>ProgramArguments</key>
<array>
<string>/System/Library/CoreServices/Menu Extras/User.menu/Contents/Resources/CGSession</string>
<string>-suspend</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>17</integer>
<key>Minute</key>
<integer>30</integer>
</dict>
</dict>
</plist>
Если вы хотите, чтобы он работал в текущем цикле питания (например, вы не хотите перезапускать, чтобы это вступило в силу), используйте, launchctl load ~/Library/LaunchAgents/logoutAt1730.plist
чтобы сообщить launchd
о новом элементе. Он должен загружаться автоматически при следующем входе в систему.
Используйте launchctl list
и найдите строку метки (выход из системы в 17:30), чтобы подтвердить, что она launchd
знает об элементе.
Я проверил, что это работает на моей рабочей станции. Я не знаю, почему cron
нет.
РЕДАКТИРОВАТЬ: хотя я не уверен, почему cron
не работает для этого конкретного варианта использования, этот ответ заменяется (в настоящее время более правильным) ответом с использованием launchd
.
Используйте crontab -e
в терминальном приложении, чтобы добавить /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend
в Crontab в нужное время, например так (для 17:30):
30 17 * * * /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend
Я хотел что-то подобное, но вместо того, чтобы всегда блокироваться в определенное время, я хотел блокировать только при определенных условиях. Сценарий, который я использовал для проверки этих условий, запускался cron, поэтому у меня была та же проблема.
Когда я попытался CGSession -suspend
запустить cronjob и заметил, что когда он был запущен, Console.app зарегистрировал ошибку, в которой говорилось, что только root и текущий зарегистрированный пользователь могут вызвать быстрое переключение пользователей. Итак, мое решение: запустить его как root.
Итак, в моем сценарии я использовал следующее, чтобы заблокировать компьютер:
sudo /usr/bin/osascript -e 'tell application "System Events" to do shell script "/System/Library/CoreServices/Menu\\ Extras/User.menu/Contents/Resources/CGSession -suspend"'
Запутанный? Да. Работающий? Положительно!
sudo .../CGSession -suspend
напрямую (без использования AppleScript) тоже не сработало?
житель Новой Англии
житель Новой Англии