मैं ओएस एक्स से किसी अन्य डेस्कटॉप उपयोगकर्ता को लॉग आउट करने के लिए कैसे मजबूर करूं?


1

हम ऐसे परीक्षण चला रहे हैं जिनके लिए मैक मिनी पर कई डेस्कटॉप की आवश्यकता होती है।

स्क्रीन शेयरिंग बनाने के लिए हम लोकलहोस्ट, 5900 से 6900 तक की ssh TCP टनल का सफलतापूर्वक उपयोग कर रहे हैं, हमें vnc: // यूजर: पासवर्ड @ लोकलहोस्ट: 6900 और कुछ एप्सस्क्रिप्ट के साथ इसी मशीन पर लॉग इन करें ताकि परिणामी संवाद को दबाया जा सके। बटन। मैं Java 1.7 के तहत एक प्रोग्राम चलाने वाले ssh के माध्यम से सफल लॉगिन का पता लगा सकता हूं export AWT_TOOLKIT=CToolkit यह द्वितीयक उपयोगकर्ता के रूप में एक AWT विंडो खोलने की कोशिश करता है, जो विफल हो जाता है यदि डेस्कटॉप शुरू नहीं हुआ है।

यह काफी विश्वसनीय है, हालांकि मैं खुशी से अधिक विश्वसनीय तरीकों के बारे में सुनूंगा!

जहां चीजें गलत हो रही हैं:

हमें उन रोबोट उपयोगकर्ताओं को लॉग आउट करने में समस्या हो रही है, मशीन को अन्य परीक्षणों के लिए नए सिरे से छोड़ने के लिए जो आवारा प्रक्रियाओं द्वारा व्यर्थ की गई सभी मेमोरी के लिए ऑब्जेक्ट उपयोगकर्ता को चलाना छोड़ देता है।

मैं वर्तमान में उपयोग कर रहा हूं

for i in $users ; do
  ssh ${i}@localhost "osascript -e 'tell application \"System Events\"'
                                  -e 'log out'
                                  -e 'delay 3'
                                  -e 'keystroke return'
                                -e end" &
done; wait

लेकिन कभी - कभी System Events जाहिरा तौर पर नहीं चल रहा है और शुरू करने से इनकार करता है:

33:40: execution error: System Events got an error: Application isn’t running. (-600)

मैंने हाल ही में जोड़ा है -e 'if it is not running then launch' -e 'delay 5' से पहले तुरंत -e 'log out' लेकिन यह मदद करने के लिए एक पूरी बहुत कुछ करने के लिए प्रतीत नहीं होता है।

मैंने सोचा था कि कुछ के साथ कि सब कुछ Applescript सामान की जगह ssh kill -KILL -1 काम करेगा - कम-से-कम उन उपयोगकर्ताओं के लिए बैक-अप के रूप में जिनके System Events टूट रहे हैं - लेकिन यह दर्जनों CoreServices, PrivateFrameworks और फ्रेमवर्क GUI- दिखने वाली चीजों की एक अच्छी जोड़ी को छोड़ देता है जिनमें से अधिकांश चल रहे हैं, जिनमें से अधिकांश के साथ मरने से मना कर दिया जाता है kill -9 मैन्युअल रूप से उनके PIDs के उद्देश्य से। मैंने दो चरणों वाली स्क्रिप्ट के साथ काफी मेहनत की, एक फाइल में किल-एस के आउटपुट को पकड़ा और एक दूसरे ssh सत्र में इसे फुलाया।

क्या इन उपयोगकर्ताओं को लॉग आउट करने और उनकी सभी प्रक्रियाओं को मारने का एक अधिक विश्वसनीय तरीका है? मेरे पास बॉक्स पर व्यवस्थापक अधिकार हैं, लेकिन मैं GUI में हेरफेर करने के लिए आगे दर्दनाक AppleScript लिखने से बचने के लिए यूनिक्स कमांड-लाइन पर कुछ पसंद करूंगा।

धन्यवाद!

जवाबों:


0

मैंने पाया कि एक व्यावहारिक मार्ग कैसा दिखता है, लेकिन यह अनिर्णायक है:

एक उपयोगकर्ता के लिए 'लॉगिनविंडो' प्रक्रिया को मारें (जड़ के रूप में - उपयोगकर्ता अपनी स्वयं की प्रक्रिया (!)) को नहीं मार सकता है (ध्यान दें, [एन] रेगेक्स मिलान करने से खुद को रोकता है), फिर मारने के लिए किल -9 -1 का उपयोग करें शेष गड़बड़:

    $ for i in $users; do
       echo $pword |
       ssh $i@localhost '
         sudo -S kill -9 $(
           ps -axf | awk "/^ *$(id -u '$i') .*logi[n]window/{ print \$2 }"
         );
         kill -9 -1
       ';
      done

यह दो प्रक्रियाओं को छोड़ देता है

  • /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker -s mdworker -c MDSImporterWorker -m com.apple.mdworker.saring
  • / usr / sbin / cfprefsd एजेंट

... जो विभिन्न मैक पृष्ठों का दावा करते हैं वे सामान्य ओएस एक्स अजीब हैं।

मैं विशेष रूप से इस समाधान को पसंद नहीं करता, क्योंकि यह बहुत अचानक है और मैं असंगत अवस्थाओं में आईओएस फोन सिमुलेटर या अन्य फ़ाइलों जैसी चीजों को छोड़ने के बारे में चिंतित हूं, लेकिन एक और उत्तर की अनुपस्थिति, ऐसा लगता है कि मेरे पास कोई अन्य विकल्प नहीं है।

जब Applescript रूट विफल होता है, और कम से कम मैं इसे एक आपातकालीन बैक-अप के रूप में उपयोग कर सकता हूं kill -9 -1 एप्पल के सामान्य लेकिन घटिया लॉगआउट प्रक्रिया को वैसे भी लटका दिया जाता है।

मैं यह भी नोट करूँगा कि कई डेस्कटॉप उपयोगकर्ताओं के साथ कुछ भी करने से मेरे लिए नेटवर्क कनेक्टिविटी गड़बड़ हो जाती है, जाहिरा तौर पर Apple को यह सोचने की जहमत नहीं उठानी चाहिए कि कैसे प्रमाणित नेटवर्क को व्यवहार करना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.