Я настраиваю launchdaemon для запуска сценария, который проверяет, вошла ли в систему определенная локальная учетная запись. Если эта учетная запись вошла в систему, ей необходимо снова автоматически выйти из системы. У меня есть рабочий сценарий, но я не могу запустить его с помощью агента запуска или запуска.
Я пробовал использовать его как средство запуска, но это не работает, и конкретному пользователю запрещено запускать скрипты. Это работает на macOS 10.14.5. Иногда он работает при запуске нашим MDM, но нам нужно, чтобы он работал, даже если MDM недоступен (таким образом, локальный скрипт).
Это мой агент на данный момент:
<?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>fubar.plist</string>
<key>ProgramArguments</key>
<array>
<string>/location/of/fubar.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>30</integer>
</dict>
</plist>
А вот сценарий:
currentUser=$( scutil <<< "show State:/Users/ConsoleUser" | awk '/Name :/ && ! /loginwindow/ { print $3 }' )
if [ "$currentUser" == "fubarUser" ]; then
echo "$currentUser is fubarUser. Logging out"
killall loginwindow
fi
Я ожидаю, что он зарегистрирует, что fubarUser
вошел в систему, затем выведет мое сообщение и убьет loginwindow
, таким образом выйдя из системы.
Если я запускаю сценарий как root
в окне терминала, он правильно определяет, кто вошел в систему. Итак, я знаю, что сам сценарий работает. Я просто не могу заставить его загрузить агент запуска или демон запуска.
В моей производственной версии он фактически выводит эхо в файл журнала, который, как он видит, вошел в систему и правильно регистрирует текущего пользователя.