O launchd mantém uma lista separada de itens para cada sessão de usuário ("agentes de lançamento") e um para o contexto do sistema ("daemons de lançamento"). Quando você executa launchctl load
como root, o item é carregado na lista do sistema (ou seja, como um daemon de ativação em vez de um agente) não importa onde o arquivo está localizado . O que você precisa fazer depende exatamente do que você está tentando realizar:
-
Se você estiver tentando fazer com que o item seja carregado como um agente de lançamento em sessões de usuário futuras (ou seja, na próxima vez que fizer login), coloque-o em / Library / LaunchAgents, defina as permissões corretamente. depois sente-se e relaxe. Quando um usuário faz o login, ele varre o diretório e carrega o que encontrar.
-
Se você estiver tentando fazer com que o item seja carregado em uma sessão de login existente, será necessário executar
launchctl load
nessa sessão . Exatamente o que isso significa e como você faz isso é complicado, e pode depender de qual versão do OS X você está rodando (a Apple continua mudando a arquitetura do launchd ...). Pelo menos nas versões mais antigas do OS X, você teria que encontrar o ID do processo de algum processo em execução na sessão que está segmentando e executar algo como:sudo launchctl bsexec $PIDInTargetSession sudo -u $TargetUsername launchctl load /Library/LaunchAgents/youritem.plist
Explicação: o primeiro
sudo
muda para root, entãolaunchctl bsexec $PIDInTargetSession
muda para o contexto de bootstrap mach das sessões de destino (eu disse que era complicado), entãosudo -u $TargetUsername
troca o UID da raiz para o usuário alvo e finalmentelaunchctl load /Library/LaunchAgents/youritem.plist
carrega o agente nessa sessão.
Se isso não acontecer, verifique esta mensagem para alguns alternativas.