यह मुझे लगता है कि अनुमतियाँ त्रुटि सिर्फ एक बहुत गहरी समस्या का एक लक्षण है: आप आइटम को गलत मच बूटस्ट्रैप संदर्भ में लोड करने का प्रयास कर रहे हैं । विशेष रूप से, आप लॉन्च कमांड को xyz के रूप में चला रहे हैं, लेकिन यह आइटम को रूट के संदर्भ में लोड करने की कोशिश कर रहा है, जिसे xyz के पास अनुमति नहीं है। आप जो चाहते हैं वह वस्तु को xyz के संदर्भ में लोड करना है (जिसके लिए xyz के पास अनुमतियाँ होनी चाहिए)।
ठीक है, मुझे थोड़ा बैक अप करें, और आपको ओएस एक्स में लॉन्च किए गए पदानुक्रम का एक सारांश प्रदान करता है। जब ओएस बूट होता है, तो यह लॉन्च का एक मास्टर उदाहरण ("सिस्टम" लॉन्च) शुरू करता है, जो आइटम से लोड करता है विभिन्न पुस्तकालय / LaunchDaemons फ़ोल्डर।
जब कोई उपयोगकर्ता (या अन्यथा "सत्र" शुरू करता है) में प्रवेश करता है, तो एक नया "बूटस्ट्रैप संदर्भ" बनाया जाता है, लॉन्च का एक नया उदाहरण ("उपयोगकर्ता" लॉन्च) शुरू होता है (उस नए संदर्भ में) जो विभिन्न से आइटम लोड करता है लाइब्रेरी / LaunchAgents फ़ोल्डर (उस नए संदर्भ में सभी)।
जब आप उपयोग करते हैं sudo -u xyz ...
, तो यह उपयोगकर्ता आईडी को xyz पर स्विच करता है, लेकिन xyz के संदर्भ में स्विच नहीं करता है।
अब, यहाँ कुछ मामले हैं: पहला, अगर xyz लॉग इन नहीं हुआ है (यानी एक सक्रिय सत्र नहीं है), उनके पास बूटस्ट्रैप संदर्भ या एक लॉन्च उदाहरण नहीं है, इसलिए आप लोड नहीं कर सकते LaunchAgent उनके रूप में। मूल रूप से, LaunchAgents उपयोगकर्ता सत्रों में लोड करता है, इसलिए यदि कोई सत्र नहीं है तो इसे लोड करने के लिए कुछ भी नहीं है। दूसरी ओर, यह एक समस्या नहीं होनी चाहिए: अगली बार जब xyz लॉग इन करता है, तो आपका आइटम स्वचालित रूप से लोड हो जाएगा (जब तक यह सही जगह पर है)।
Xyz तो है में लॉग इन, आप अपने सत्र के भीतर कुछ प्रक्रिया की प्रक्रिया आईडी प्राप्त कर सकते हैं, और प्रयोग launchctl bsexec
है कि इस प्रक्रिया के बूटस्ट्रैप संदर्भ के लिए स्विच करने के लिए (और उसके बाद का उपयोग sudo -u xyz
xyz को UIDs स्विच करने के लिए, और फिर आइटम लोड):
loadUser=xyz
loadPID=$(ps -axj | awk "/^$loadUser / {print \$2;exit}")
launchctl bsexec $loadPID sudo -u $loadUser launchctl load /Users/xyz/Library/LaunchAgents/x.y.z.plist
/Library/LaunchAgents/
और एकUserName
कुंजी जोड़ सकते हैं ?