Me parece que el error de permisos es solo un síntoma de un problema mucho más profundo: estás intentando cargar el elemento en el mal mach bootstrap context . Específicamente, está ejecutando el comando launchctl como xyz, pero está intentando cargar el elemento en el contexto de la raíz, por lo que xyz no tiene permisos para hacerlo. Lo que desea es cargar el elemento en el contexto de xyz en su lugar (para lo que xyz debería tener permisos)
Bien, déjame hacer una copia de seguridad un poco y te daré un resumen de la jerarquía launchd en OS X. Cuando arranca el SO, se inicia una instancia maestra de launchd (el "system" launchd), que se carga elementos de las diversas carpetas Library / LaunchDaemons.
Cuando un usuario inicia sesión (o inicia una "sesión"), se crea un nuevo "contexto de rutina de arranque", se inicia una nueva instancia de launchd (el "usuario" launchd) (en ese nuevo contexto) que carga elementos de las diversas carpetas de Biblioteca / Agentes de lanzamiento (todo dentro de ese nuevo contexto).
Cuando usas sudo -u xyz ...
, cambia las ID de usuario a xyz, pero no cambia al contexto de xyz.
Ahora, hay un par de casos aquí: primero, si xyz no ha iniciado sesión (es decir, no tiene una sesión activa), no tienen un contexto bootstrap o una instancia launchd, por lo que puede ' t cargar un LaunchAgent como ellos. Básicamente, los agentes de inicio se cargan en las sesiones de usuario, por lo que si no hay sesión no hay nada para cargarlo. Por otro lado, esto no debería ser un problema: la próxima vez que xyz inicie sesión, su elemento se cargará automáticamente (siempre que esté en el lugar correcto).
Si xyz está conectado, puede obtener el ID de proceso de algún proceso dentro de su sesión y usar launchctl bsexec
para cambiar al contexto de arranque del proceso (y luego usar sudo -u xyz
para cambiar UID a xyz, y luego cargar el elemento):
loadUser=xyz
loadPID=$(ps -axj | awk "/^$loadUser / {print \;exit}")
launchctl bsexec $loadPID sudo -u $loadUser launchctl load /Users/xyz/Library/LaunchAgents/x.y.z.plist