J'ai un démon de lancement qui fonctionne dans le contexte de connexion d'une machine Mac OSX 10.6. Je souhaite lancer un agent pour chaque utilisateur à partir de cet agent et exécuter l'agent dans le contexte de connexion de l'utilisateur. Cependant, je dois contrôler très soigneusement les arguments précis de l'application agent, ce qui explique pourquoi je ne peux pas utiliser un agent launchd, comme je l'ai fait pour le démon.Démarrage de l'agent à partir du démon dans le contexte utilisateur
Comment puis-je créer un processus qui s'exécute dans le contexte de l'utilisateur connecté? J'ai trulé seteuid
et setuid
appels, mais ceux-ci ne changent pas le contexte d'exécution de l'application de l'agent. Je sais que ce n'est pas la manière recommandée par Apple de faire les choses, mais je n'ai pas vraiment le choix - la conception de l'application démon est assez rigide (elle doit traverser plusieurs systèmes). Existe-t-il une solution de contournement qui me permet d'exécuter une application dans le contexte GUI d'un utilisateur connecté, à partir d'un démon qui s'exécute dans le contexte de connexion? J'utilise C++, Carbon & Cocoa.
Pouvez-vous commenter ce que vous avez fait pour passer entièrement à lancer des agents? Parce que je suis en utilisant un agent de lancement que je veux commencer après l'installation, mais que l'installation (plus précisément, le script après le vol) est en cours d'exécution en tant que root. L'angle bsexec utilisé pour démarrer l'agent de lancement comme vous l'avez noté, mais pas dans Lion. Comment lancez-vous votre agent de lancement en premier lieu pour chaque utilisateur connecté? – devguydavid
ps aux | grep loginwindow.app | grep -v grep | awk '{system ("sudo launchctl bsexec" $ 2 "sudo -u" $ 1 "launchctl charger -S Aqua /Library/LaunchAgents/com.my.agent.plist")}' –
Mais cela a un problème avec Lion si vous voulez pour montrer une interface utilisateur. Nous ne le résolvons pas encore. –