वर्तमान उपयोगकर्ता को लॉग आउट करने के लिए मैक ओएस एक्स टर्मिनल कमांड क्या है?


19

मैं "स्लीप 3600; लॉगआउट" जैसा कुछ चलाना चाहता हूं, लेकिन लॉगआउट बैश कमांड केवल वर्तमान टर्मिनल को बंद कर देता है। मैं पूर्ण मैक ओएस एक्स सत्र कैसे बंद कर सकता हूं?

जवाबों:


22

निम्नलिखित एप्सस्क्रिप्ट वर्तमान उपयोगकर्ता को लॉगआउट करेगा:

tell application "System Events" to log out

आप osascriptकमांड का उपयोग करके इसे बैश उपनाम में लपेट सकते हैं :

alias maclogout="osascript -e 'tell application \"System Events\" to log out'"

यह "Log> लॉग आउट [उपयोगकर्ता नाम] ..." पर क्लिक करने के समान है, और 2 मिनट के इंतजार के बाद लॉगआउट होगा

यह आसानी से sleepकमांड के साथ संयुक्त है :

alias delayedlogout="sleep 3600; maclogout"

.. एक एकल उपनाम में जोड़ा जा सकता है:

alias delayedlogout="sleep 3600; osascript -e 'tell application \"System Events\" to log out'"

अच्छे से कहा। इस सवाल का सही जवाब देने के लिए एन्हांसमेंट में यह भी शामिल होगा कि 'स्लीप' सिंटैक्स एपलस्क्रिप्ट में क्या होगा। इसके अलावा, मैं समझता हूं कि दूसरी पंक्ति का कोड टर्मिनल से चिपकाया गया था, लेकिन इसलिए यह सिस्टम इवेंट्स के आसपास दोहरे उद्धरणों से अनावश्यक रूप से बच गया।
यक्षिणी

@ स्लीप कमांड के बारे में अच्छा संकेत। "सिस्टम इवेंट्स" भाग पर बच गए उद्धरण आवश्यक हैं, क्योंकिalias maclogout="..."
dbr

2
मैंने हाल ही में पाया है कि टर्मिनल में कमांड चलाने से सिस्टम बंद नहीं होगा / बंद हो जाएगा क्योंकि टर्मिनल ही वर्तमान प्रक्रिया नहीं होने के कारण लॉगआउट को रोक सकता है। यह आसानी से तय किया जा सकता है '(स्लीप 1; कमांड) और', जहां नींद बैकग्राउंड में काम को रोक देती है और जब तक यह टर्मिनल निष्पादित नहीं करता है तब तक यह नहीं लगता कि यह व्यस्त है।
ग्रेज़गोरोज़ एडम हंकीविज़

17

OS X में टर्मिनल से वर्तमान उपयोगकर्ता को लॉग आउट करने का कोई "अच्छा" तरीका नहीं है। ऐसा करने का 'गन्दा' तरीका उस उपयोगकर्ता की loginwindowप्रक्रिया को मारना है । यह आपके उपयोगकर्ता नाम के तहत चलने वाली सभी प्रक्रियाओं (कार्यक्रमों) को बेरहमी से मार देगा।

ऐसा करना दो चरणों वाली प्रक्रिया है।

  1. टर्मिनल में, इसे चलाएं:

    ps -Ajc | grep loginwindow
    
  2. फिर भागो

    sudo kill <pid>
    

    <pid>उपरोक्त कमांड से आउटपुट में पहला नंबर (दूसरा कॉलम) कहां है।

सुडो किल -9 का उपयोग करके उस प्रक्रिया को मारने के लिए मजबूर करें जो मुझे यह काम करने के लिए करना था।

उदाहरण के लिए, जब पहली कमांड के लिए आउटपुट हो तो:

joshhunt    41     1    41 5e15c08    0 Ss     ??    3:13.09 loginwindow

फिर मैं दौड़ता sudo kill 41, अपना पासवर्ड दर्ज करता और फिर मैं लॉग आउट हो जाता।

इसे बैश उपनाम में जोड़ा जा सकता है:

alias messylogout="ps -Ajc | grep loginwindow | grep -v grep | awk '{print \$2}' | sudo xargs kill"

क्या आप सिर्फ इस्तेमाल नहीं कर सकते sudo killall loginwindow? कम से कम 10.7 पर loginwindowप्रक्रिया तुरंत फिर से खोली गई लगती है।
लारी

3

मुझे पता है कि यह एक पुराना सवाल है लेकिन इससे मुझे मदद मिली, OS X 10.8 पर मुझे जो कमांड चाहिए वह है:

ps -Ajc | grep loginwindow | awk '{print $2}' | sudo xargs kill -9

awkबयान अलग है और kill -9यह सुनिश्चित लॉगिन शीघ्र दिखाया गया है।


@gronostaj क्या आप वास्तव में मानते हैं कि इस तरह एक संपादन स्वीकार किया जाएगा? मुझे सुझाव दिया गया है कि इस तरह अस्वीकार किए गए संपादन "अमान्य संपादन (मौजूदा पोस्ट पर टिप्पणी करने या टिप्पणी करने का प्रयास)" या "कट्टरपंथी परिवर्तन" के रूप में हर समय - और मार्क स्पष्ट रूप से अभी तक पोस्ट पोस्ट करने के लिए पर्याप्त प्रतिनिधि नहीं है।
स्कॉट

@ आप सही हैं, मुझे उस टिप्पणी को पोस्ट करने की बहुत जल्दी है।
ग्रोनोस्तज

2

मुझे लगता है कि मुझे मैक ओएस एक्स के 2 मिनट के इंतजार के बिना ग्रेसफुल लॉगआउट करने का जवाब मिल गया है ।

मुझे लगा कि Shift, Option, और Command को पकड़कर "q" दबाकर सुंदर तरीके से लॉग आउट किया जाएगा और "यदि आप लॉग इन करना चाहते हैं तो पूछें" नहीं।

इसलिए मैंने स्वचालक के माध्यम से एक AppleScript कोडित किया:

tell application "System Events"
     keystroke "q" using {command down, shift down, option down}
end tell

0

यदि आप एक शेल में उसी उपयोगकर्ता के रूप में लॉग इन हैं, जो मैक के gui में लॉग इन है, तो आप एक sudo- कम कमांड जारी कर सकते हैं: launchctl reboot logoutजो उपयोगकर्ता को बहुत प्रभावी ढंग से लॉगआउट करता है; इसमें उन ऐप्स को अनुमति नहीं देने की अनुमति है, जिन्हें छोड़ने के दौरान बातचीत के लिए प्रेरित करने से छोड़ दिया जा रहा है, हालांकि इसका मतलब यह नहीं लगता है कि यह वही है जो उन्हें kill(SIG TERM) या kill -9(SIG KILL) के रूप में एक समान रूप से मार रहा है ।


0

मैं तर्क दूंगा कि "nicest" रास्ता पोस्ट OS X 10.9 हो सकता है launchctl gui/$(id -u <username>) bootout

लॉन्चर के लिए OS X 10.9 डॉक्यूमेंट रनिंग द्वारा पाया जाता है launchctl help, लेकिन अनिवार्य रूप से ऊपर दिया गया कमांड उपयोगकर्ता के अस्थायी सत्र को तोड़ देगा। वैकल्पिक launchctl user/$(id -u <username>) bootoutउपयोगकर्ता को लॉग इन नहीं करते हुए उपयोगकर्ता सत्र चलाने वाले स्थायी सत्र को आँसू देता है।

इसे चलाकर परीक्षण किया जा सकता है launchctl gui/$(id -u) bootout, यह आपको तुरंत लॉग आउट कर देगा और सिस्टम को लॉगिन विंडो (कुछ देरी के साथ) प्रदर्शित करने का कारण होगा।


कम से कम एल कैपिटान के तहत, सही कमांड वह है sudo launchctl bootout gui/XXXजहां XXXसंख्यात्मक उपयोगकर्ता आईडी (यूआईडी) है। ध्यान दें कि i) bootoutउपकमांड पहले आता है, और ii) $(id)यूआईडी की तुलना में बहुत अधिक रिटर्न देता है।
लैरीक्स डेसीडुआ

आईडी (आईडी -यू) को ठीक से कॉल करने के लिए अपडेट किया गया
इयान हेंडरसन

0

अपने टर्मिनल में जोड़ने के लिए एक अच्छी उपयोगिता लॉगआउट कमांड है, जिसका उपयोग किया जाना है:

logout UserName

यहाँ कैसे:

  1. अपना .bash_profile संपादित करें

    nano ~/.bash_profile

  2. इस पंक्ति को जोड़ें:

    logout() {sudo launchctl bootout user/$(id -u "$1")}

  3. फ़ाइल को दबाकर सहेजें ctrl+x

  4. टर्मिनल को पुनरारंभ करें

तुम जाने के लिए तैयार हो ;)

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