J'ai besoin de pouvoir démarrer / arrêter un agent d'interface graphique par session à partir d'un démon de niveau racine.
Les problèmes similaires sont discutés ici , ici et Ici . P>
Ce que je veux pouvoir faire est fondamentalement p> mais cela ne commence / arrête que d'une instance et il s'exécute comme racine dans la session d'interface graphique actuelle. Si je quitte le sudo, commencez, je reçois p> J'ai essayé de jouer avec une variété d'autres permutations de BSexec (y compris appeler un script secondaire de BSexec avec la charge / Décharger la commande), mais je ne peux jamais obtenir l'instance pour commencer comme autre chose que la racine et jamais dans une autre session d'interface graphique. P> J'ai également essayé de jouer avec Quelqu'un a-t-il des pensées? P> EDIT:
J'ai essayé de faire cela avec un outil wrapper comme suggéré ci-dessous par Graham Lee, mais j'obtiens l'erreur suivante: p> Ceci est la commande de ligne de commande, wrapper et script i ' M Utilisation (501 est l'ID utilisateur et 63093 Le PID de Launchd pour un autre utilisateur connecté au système): p> ligne de commande: p> wrapper: p> script: p> SU -
sudo -u
4 Réponses :
Utiliser LaunkCtl BSExec code> est correct, mais vous devez lancer un outil d'emballage qui tombe uid sur l'utilisateur cible avant d'exécuter l'exécutable "Real". Oh, et il est probablement préférable de rechercher des processus code> loginWindow CODE>, comme ce sont les leaders des sessions de connexion (bien que
laucité code> est très susceptible de fonctionner aussi). P>
Lorsque je le fais (voir la modification avec l'outil wrapper ci-dessus), je reçois un launch_msg (): socket n'est pas connecté code> erreur
Est-ce que je dépose l'UID de la bonne façon?
En fait, je pensais celui-ci. Il semble que l'environnement de test que j'avais configuré n'était pas tout à fait identique à un vrai démon de niveau de racine. Merci pour l'aide.
On dirait que les instances de lanceur par utilisateur ne fonctionnent pas dans le même espace de noms de bootstrap comme LaunchCtl lancé à partir de la borne.
En utilisant Dock.app sous forme de donateur PID et de Sudo Magic: P>
ps aux | grep Dock.app | grep -v grep | awk '{system("sudo launchctl bsexec "$2" sudo -u "$1" launchctl load -S Aqua /Library/LaunchAgents/com.my.agent.plist")}'
Aussi ne fonctionnera pas sur 10.9. L'agent sera lancé dans un contexte différent et, par exemple, il ne peut pas montrer l'interface utilisateur (aucune erreur, juste invisible).
J'ai eu le même problème. Pour résoudre ce problème, utilisez une PID "sous" Launchd, le PID d'un processus qui a commencé. P>
Le PID que vous vous engagez à "LaunkCtl BSexec" est utilisé pour trouver la bonne bootstrap. Si vous utilisez le PID de Launchd (dans le contexte de l'utilisateur) que vous travaillez dans le lanceur racine Bootstrap. Si vous utilisez PE. Le Finder ou le Dock PID de l'utilisateur, vous pouvez travailler dans ce «par utilisateur» bootstrap p>
Pour El Capitan (10.11) suivant devrait fonctionner LaunkCtl Bootstrap GUI / $ UID /Library/launchagents/myagent.plist Code>