Любая работа вокруг запуска пользовательского интерфейса из демона OSX

У меня есть запущенный демон, который загружает установщики (pkg) и устанавливает его с помощью команды установки. Установщик копирует файл plist пользовательского интерфейса в / Library / LaunchAgent, поэтому пользовательский интерфейс может быть запущен после входа пользователя в систему. Но в конце установки установка должна запустить пользовательский интерфейс. Я понимаю, что пользовательский интерфейс не может быть запущен из демона из-за архитектуры оконного сервера OSX, когда демон не может напрямую запускать какой-либо процесс пользовательского интерфейса.

Не могли бы вы предложить какое-либо решение, чтобы пользовательский интерфейс можно было запустить без перезагрузки или выхода из системы?

С уважением, Ананд Чуби


person Anand Choubey    schedule 15.01.2014    source источник


Ответы (1)


Вы ищете launchctl bsexec, дополнительную информацию см. В man launchctl и технических примечаниях OS X по пространствам имен начальной загрузки.

  1. Выберите зарегистрированного пользователя, для которого вы хотите это сделать; учтите, что их может быть несколько или ни одного. Текущий пользователь консоли является владельцем /dev/console; если UID владельца равен 0 (root), то никто не вошел в систему.

  2. Найдите loginwindow процесс, принадлежащий этому UID пользователя.

  3. Exec /bin/launchctl bsexec PID_OF_THAT_LOGINWINDOW_PROCESS command args ... для выполнения команды так же, как если бы она была запущена самими пользователями. Это позволяет запускать процессы графического интерфейса пользователя, выполнять launchctl setenv/start/load и т. Д. Не забудьте _7 _ / _ 8_ для UID целевого пользователя.

Если вам нужно запустить LaunchAgent, вы должны сделать это с помощью launchctl load, а не запускать агент напрямую, иначе он не будет присутствовать в launchd, как должен.

person hamstergene    schedule 17.01.2014
comment
Итак, было достаточно времени для альтернативных ответов, но уже было трудно превзойти ваш отличный ответ. +100, спасибо за информацию! - person DarkDust; 21.01.2014