Использовать агент запуска. Все остальные способы взорвут ваш мозг тоннами бесполезных деталей и скрытых трюков. В общем, это очень сложная задача со многими угловыми случаями, и ее очень трудно правильно реализовать. Агент Launchd позволит вам сконцентрироваться на своей задаче и сэкономить много времени.
Лучшее решение для вас - переписать агент не для использования командной строки, а для подключения к демону launchd и запросить правильные параметры / настройки.
Если это невозможно или сложно, вы можете написать агент запуска оболочки, который при запуске подключится к демону, запросить параметры и затем запустить оригинальный агент с соответствующей командной строкой.
Если вы считаете, что слишком сложно реализовать механизм "подключения к демону" ... возможно, это так, но это намного проще, чем запуск агента в другом сеансе из демона (если реализовано правильно с поддержкой различных угловых случаев).
Но если вы действительно, действительно, неважно, чего хотите, грязно, вы можете поиграть с «launchctl bsexec». Некоторые примеры этой работы:
Запуск / остановка агента launchd для всех пользователей с сеансами графического интерфейса пользователя (вместо «launchctl load» он может запустить любой исполняемый файл в контексте сеанса).
Некоторые обновления по этому вопросу.
Под "игрой с launchctl bsexec" я имею в виду нечто подобное:
ps aux | grep loginwindow | grep user | awk '{ system("sudo launchctl bsexec "$2" sudo -u user /Applications/TextEdit.app/Contents/MacOS/TextEdit") }'
Найдите какое-либо приложение в сеансе, который вы хотите, возьмите его PID и вызовите "launchctl bsexec", чтобы запустить то, что вы хотите в том же сеансе. Приведенный выше пример запустит TextEdit в сеансе пользователя, вошедшего в систему, даже если эта строка выполняется под другим пользователем, вошедшим в систему под учетной записью пользователя или из службы.
Но я проверил это на Lion - он не работает. Это работает только для леопардов (10,5 / 10,6) для меня.
То, что я пытался сказать, - не использовать агенты запуска, будет вызывать постоянную боль в твоей заднице и больше ничего. После десятка таких вещей мы переключились на агентов запуска и теперь счастливы:)