मैं "स्लीप 3600; लॉगआउट" जैसा कुछ चलाना चाहता हूं, लेकिन लॉगआउट बैश कमांड केवल वर्तमान टर्मिनल को बंद कर देता है। मैं पूर्ण मैक ओएस एक्स सत्र कैसे बंद कर सकता हूं?
मैं "स्लीप 3600; लॉगआउट" जैसा कुछ चलाना चाहता हूं, लेकिन लॉगआउट बैश कमांड केवल वर्तमान टर्मिनल को बंद कर देता है। मैं पूर्ण मैक ओएस एक्स सत्र कैसे बंद कर सकता हूं?
जवाबों:
निम्नलिखित एप्सस्क्रिप्ट वर्तमान उपयोगकर्ता को लॉगआउट करेगा:
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="..."
OS X में टर्मिनल से वर्तमान उपयोगकर्ता को लॉग आउट करने का कोई "अच्छा" तरीका नहीं है। ऐसा करने का 'गन्दा' तरीका उस उपयोगकर्ता की loginwindow
प्रक्रिया को मारना है । यह आपके उपयोगकर्ता नाम के तहत चलने वाली सभी प्रक्रियाओं (कार्यक्रमों) को बेरहमी से मार देगा।
ऐसा करना दो चरणों वाली प्रक्रिया है।
टर्मिनल में, इसे चलाएं:
ps -Ajc | grep loginwindow
फिर भागो
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
प्रक्रिया तुरंत फिर से खोली गई लगती है।
मुझे पता है कि यह एक पुराना सवाल है लेकिन इससे मुझे मदद मिली, OS X 10.8 पर मुझे जो कमांड चाहिए वह है:
ps -Ajc | grep loginwindow | awk '{print $2}' | sudo xargs kill -9
awk
बयान अलग है और kill -9
यह सुनिश्चित लॉगिन शीघ्र दिखाया गया है।
मुझे लगता है कि मुझे मैक ओएस एक्स के 2 मिनट के इंतजार के बिना ग्रेसफुल लॉगआउट करने का जवाब मिल गया है ।
मुझे लगा कि Shift, Option, और Command को पकड़कर "q" दबाकर सुंदर तरीके से लॉग आउट किया जाएगा और "यदि आप लॉग इन करना चाहते हैं तो पूछें" नहीं।
इसलिए मैंने स्वचालक के माध्यम से एक AppleScript कोडित किया:
tell application "System Events"
keystroke "q" using {command down, shift down, option down}
end tell
यदि आप एक शेल में उसी उपयोगकर्ता के रूप में लॉग इन हैं, जो मैक के gui में लॉग इन है, तो आप एक sudo- कम कमांड जारी कर सकते हैं: launchctl reboot logout
जो उपयोगकर्ता को बहुत प्रभावी ढंग से लॉगआउट करता है; इसमें उन ऐप्स को अनुमति नहीं देने की अनुमति है, जिन्हें छोड़ने के दौरान बातचीत के लिए प्रेरित करने से छोड़ दिया जा रहा है, हालांकि इसका मतलब यह नहीं लगता है कि यह वही है जो उन्हें kill
(SIG TERM) या kill -9
(SIG KILL) के रूप में एक समान रूप से मार रहा है ।
मैं तर्क दूंगा कि "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)
यूआईडी की तुलना में बहुत अधिक रिटर्न देता है।
अपने टर्मिनल में जोड़ने के लिए एक अच्छी उपयोगिता लॉगआउट कमांड है, जिसका उपयोग किया जाना है:
logout UserName
यहाँ कैसे:
अपना .bash_profile संपादित करें
nano ~/.bash_profile
इस पंक्ति को जोड़ें:
logout() {sudo launchctl bootout user/$(id -u "$1")}
फ़ाइल को दबाकर सहेजें ctrl+x
टर्मिनल को पुनरारंभ करें
तुम जाने के लिए तैयार हो ;)