SSH कनेक्शन चालू होने पर मशीन को सोने से रोकें


13

मैं निष्क्रिय होने पर डेस्कटॉप को बंद करके बिजली बचाने की कोशिश कर रहा हूं। लेकिन कई डेस्कटॉप भी उनके मालिकों द्वारा एसएसएच के माध्यम से एक्सेस किए जाते हैं। मालिकों को मशीन पर स्विच करने में सक्षम करने के लिए एक वेकोलान समाधान तैनात किया गया है, लेकिन समस्या यह है कि एसएसएच कनेक्शन चालू होने के बावजूद 10 मिनट में मशीनें फिर से ऑटो-सस्पेंड हो जाएंगी।

मैं जो करने की कोशिश कर रहा हूं वह सक्रिय एसएसएच सत्रों को "गतिविधि" परिभाषाओं में शामिल करना है।

सवाल यह है कि क्या यह एक पुलकित नियम स्थापित करने के माध्यम से किया जा सकता है? क्या यह एक स्क्रिप्ट डालने के माध्यम से किया जा सकता है जो वास्तविक निलंबन से पहले चलता है, और यदि एसएसएच सत्र पाए जाते हैं तो इसे रद्द कर देता है? मुझे ऐसा करने का एक साफ कानूनी तरीका चाहिए। अगर ऐसा नहीं है, तो हैक करने के तरीके भी स्वागत योग्य हैं।

वर्तमान भोली हैसी समाधान: संपादित करें /usr/sbin/pm-suspend:

#check for SSH sessions, and prevent suspending:
if [ "$(who | grep -cv "(:")" -gt 0 ]; then
    echo "SSH session(s) are on. Not suspending."
    exit 1
fi

यह उद्देश्य को पूरा करता है। लेकिन मुझे नहीं पता कि कोई अपडेट कब फ़ाइल को अधिलेखित कर देगा /usr/sbin/pm-suspend। मुझे यह भी पता नहीं है कि यह कैसे अन्य सस्पेंड कार्यान्वयनों के साथ काम करेगा जैसे tuxonice।


2
क्या मैं सुझाव दे सकता हूं कि मैं grep -cv :0गुजरने के बजाय इसका उपयोग कर रहा हूं wc?
टेराडॉन

1
अधिक लालित्य के लिए एक और विचार: [यदि आप लिखते हैं तो आप इनवोकेशन को छोड़ सकते हैं if who | grep -qv :0; then(यह मानते हुए कि आपके पास grepजीएनयू जीआरईपी की तरह एक पॉसिक्स अनुरूप है )।
डेविड फ़ॉस्टर

जवाबों:


19

Ubuntu 14.10 तक (अपस्टार्ट-आधारित)

एक नज़र डालें pm-action(8)और /etc/pm/sleep.d"FILES" अनुभाग में खोजें । यदि इनमें से एक स्क्रिप्ट गैर-शून्य निकास स्थिति के साथ लौटती है, तो निलंबन रोका जाता है।

स्पष्टता के लिए अद्यतन निर्देश:

  1. इसलिए एक फाइल बनाएं /etc/pm/sleep.d/05_ssh_keepawake

  2. इस फाइल में एक शेबंग ( #!/bin/sh) और प्रश्न में उल्लिखित कोड डालें ।

  3. उस पर निष्पादन अनुमतियाँ सेट करें:

    chmod +x /etc/pm/sleep.d/05_ssh_keepawake
    

Ubuntu 15.04 (सिस्टम-आधारित) के बाद से

systemd का उपयोग नहीं करता बजे-utils अपनी शक्ति राज्य हुक का प्रबंधन करने, लेकिन एक ही अंत करने के लिए अपने स्वयं के बुनियादी ढांचे है। स्लीप इनहिबिटर चेकर्स को अब नींद पर अमल नहीं किया जाता है, लेकिन नींद को बाधित करने वाली क्रिया द्वारा सेट किया जाना चाहिए (देखें 1 )।

जैसे कि आपको SSH सत्र लॉग-इन और लॉग-आउट के लिए कमांड जोड़ना होगा जो सिस्टमड (जैसे के माध्यम से systemd-inhibit(1)) के साथ एक नींद अवरोधक को पंजीकृत करता है और बाद में अवरोधक को छोड़ता है। यदि कोई व्यक्ति SSH लॉग-इन और लॉग-आउट करने का तरीका जानता है, तो मैं एक टिप्पणी या संपादन का स्वागत करूंगा ताकि हम संबंधित चरणों और आदेशों को पूरा कर सकें।

निम्न अनुभाग कार्य प्रगति पर है - केवल इसका उपयोग करें जब आप जानते हैं कि आप क्या कर रहे हैं!

आप एक सिस्टमड यूनिट लिखने में सक्षम हो सकते हैं जो विकल्प /etc/systemd/system/ssh-inhibt-sleep.serviceका sleep.targetउपयोग करने की एक निर्भरता बनाता है RequiredBy। यदि आपकी नई इकाई विफल हो जाती है (इसकी आह्वान प्रक्रिया से गैर-शून्य निकास स्थिति के साथ), तो यह sleep.targetऔर इस प्रकार बाद की नींद की कार्रवाई करेगा।

[Unit]
Description=Check for running SSH sessions and, if any, inhibit sleep
Before=sleep.target

[Service]
Type=oneshot
ExecStart=/bin/sh -c '! who | grep -qv :0'`

[Install]
RequiredBy=sleep.target

हमेशा की तरह आपको उन्हें प्रभावी करने के लिए सिस्टमड इकाइयों को सक्रिय करने की आवश्यकता है:

sudo systemctl enable ssh-inhibt-sleep.service

अधिक जानकारी के लिए देखते हैं systemd.unit(5)और systemd.service(5)


यह 18.04 में काम नहीं करता है। क्या यह अब समाधान नहीं है?
माइकल जेरेट

1
@MichaelJarret: वास्तव में। मैंने अपने प्रश्न को सिस्टमड के साथ स्थिति के बारे में कुछ जानकारी के साथ अद्यतन किया।
डेविड फ़ॉस्टर

मैंने कल इसे छाँटने की कोशिश करते हुए निम्नलिखित पाया, लेकिन यहाँ
माइकल जेरेट

मैं अपने टिप्पणी संपादित नहीं कर सकते, लेकिन यह भी इस प्रासंगिक लगता है
माइकल Jarret

1
@ मिचेल जारेट: मेरा एक और विचार था कि आप कोशिश कर सकते हैं। मेरे उत्तर के लिए अद्यतन देखें।
डेविड फ़ॉस्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.