В OS X вы можете создать предварительно запущенный агент запуска. Например, сохраните этот список свойств как /Library/LaunchAgents/some.label.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>some.label</string>
<key>LimitLoadToSessionType</key>
<array>
<string>LoginWindow</string>
<string>Aqua</string>
</array>
<key>ProgramArguments</key>
<array>
<string>say</string>
<string>a</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Убедитесь, что plist принадлежит root. Если это не так, он может быть загружен, если вы запускаете launchd load
от имени пользователя, но он не загружается launchd автоматически.
Затем, если вы перезапустите компьютер, команда say должна быть запущена один раз при отображении окна входа в систему и еще раз после графического входа пользователя.
Если вы не хотите, чтобы программа запускалась снова, когда пользователь входит в систему графически, удалите <string>Aqua</string>
.
Если автоматический вход в систему включен, а для LimitLoadToSessionType
задано только LoginWindow
, программа вообще не запускается.
Обратитесь к технической заметке Daemons and Agents или man launchd.plist
для получения дополнительной информации.