सवाल क्या एक्स को सोना संभव है, बाकी की प्रणाली जागृत हो रही है?


दो कार्यों के साथ एक कंप्यूटर की कल्पना करो:

  1. एक फाइलसेवर और स्थानीय वेबसर्वर, 24/7 की आवश्यकता है।
  2. मीडिया केंद्र के लिए एक ग्राफिकल सर्वर, केवल तब आवश्यक होता है जब कोई इसका उपयोग कर रहा हो।

मैं ऐसी मशीन बनाने पर विचार कर रहा हूं इसलिए मुझे अपने अविश्वसनीय रूप से बिजली-भूखे डेस्कटॉप से ​​कुछ डिस्क को लात मारने और हमारे धीमे दूसरे-जनरल एटम मीडिया केंद्र को बदलने की अनुमति दें।

इस बिल्ड के साथ समस्या एक्सबीएमसी एक पावर-खाने वाला जानवर है। अपने स्वयं के उपकरणों के लिए बाएं, सीपीयू नींद की स्थिति के करीब भी कुछ भी नहीं डालेगा। हालात में सुधार हुआ है लेकिन कुशल होने का एकमात्र तरीका यह है कि इसे एस 3 नींद में रखा जाए। जाहिर है यह कुछ भी चल रहा है बंद कर देता है। हम वर्तमान में यूएसबी (एक आईआर रिसीवर) पर जागते हैं।

एस 3 नींद नई मशीन पर संभव नहीं होगी क्योंकि मैं चाहता हूं कि यह सर्वर चीजें चलाए, लेकिन मैं एक्स सर्वर (और उसके सभी ग्राहकों) को सोने के लिए रखना चाहता हूं। यदि यह संभव है। क्या यह?

यह असफल रहा, मैं हमेशा एक्स छोड़ सकता हूं लेकिन वह एक्सबीएमसी के राज्य को खो देगा और मैं इससे बचूंगा। यदि यह एकमात्र तरीका है, तो क्या आप आईआर कमांड से एक्स को फिर से शुरू करने का एक तरीका सुझा सकते हैं? (और इस तरह से एक्सबीएमसी के आईआर के हैंडलिंग के साथ संघर्ष नहीं करता है)।

ध्यान दें: मैं ग्राफिकल ढेर के साथ पूरी तरह से लचीला हूँ। यह वर्तमान में सिर्फ एक्स और है nodm एक्सबीएमसी का एक स्टैंडअलोन संस्करण लोड करना लेकिन यदि आपको आवश्यकता है तो कुछ और चाहिए, यह ठीक है। मैं एक नई मशीन (मौजूदा एक पर) बनाने से पहले इसका परीक्षण करने में भी सक्षम हूं।


4
2018-05-24 09:55


मूल


kill -[STOP|CONT] <PID> ऐसा लगता है कि वे सहायक हो सकते हैं iff वे एक प्रक्रिया पेड़ पर काम कर सकते हैं तथा मैं ट्रिगर कर सकता हूँ CONT आईआर से संकेत। - Oli♦


जवाब:


एक प्रक्रिया पेड़ को रोकना

मैं वहां आधे रास्ते हूँ। मुझे मिला kill -STOP <PID> जो एक प्रक्रिया को जमा करता है। वहां एक CONT संस्करण भी जो इसे उठाता है। इसलिए मैं पा सकता हूं और STOP  nodm इस सेक्सी कमांड के साथ पेड़ की प्रक्रिया:

pstree -p $(ps ux | awk '/nodm$/ {print $2}') | grep -oP '\d+' | xargs kill -STOP

और हम सभी बंद प्रक्रियाओं (वर्तमान उपयोगकर्ता के लिए) को जगा सकते हैं:

ps ux | awk '$8 ~ /^T/ {print $2}' | xargs kill -CONT

यह वास्तव में काम करता प्रतीत होता है। मैंने अभी इसका परीक्षण किया है और मुझे आश्चर्य है कि न तो एक्स, एक्सबीएमसी या एनएफएस पर यह फाइल चल रही है (हाँ यह मध्य-वीडियो काम करता है) ऐसा लगता है कि इसे पांच मिनट तक रोक दिया जा रहा है।

आईआर से शुरू हो रहा है

यह अगली चुनौती थी - मैं इन प्रक्रियाओं को आईआर से कैसे पुनरारंभ कर सकता हूं? इसके लिए हमें चाहिए irexec जो किसी भी बटन के लिए मनमाने ढंग से कमांड चला सकता है, भले ही एलआईआरसी क्या सुन रहा हो।

ऐसा करने के लिए हमें कुछ स्क्रिप्ट की आवश्यकता है। प्रथम ~/.lircrc

begin
prog = irexec
button = *
config = ~/.resume &
end

तथा ~/.resume (इसकी आवश्यकता होगी chmod +x ~/.resume इसके निर्माण के बाद चल रहा है)

#!/bin/sh
ps ux | awk '$8 ~ /^T/ {print $2}' | xargs kill -CONT

तो हमें बस इतना करना है कि भार है irexec। STOP कमांड चलाए जाने पर इसे ज़ोंबीफाइड होने से रोकने के लिए, हमें वर्तमान पेड़ से प्रक्रिया को शंट करना होगा जिसे सरल बनाया गया है setsid। मेरे मामले में, मैं xbmc के लॉन्चर से पहले निम्नलिखित जोड़ता हूं ~/.xsession:

setsid irexec

अंतिम रहस्य: मैं XBMC को सोने की बजाय STOP स्क्रिप्ट चलाने के लिए कैसे प्राप्त कर सकता हूं?

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


3
2018-05-24 10:30





मैं एक्सबीएमसी विशेषज्ञ नहीं हूं लेकिन अगर यह आईआर संदेशों को पकड़ने के लिए लिर्क का उपयोग करता है तो आप अपनी स्क्रिप्ट को ट्रिगर करने के लिए ~ / .licrc या / etc / lirc / lircrc फ़ाइलों में ऐसा कुछ जोड़ सकते हैं।

  begin wakeupwait
       button = OK (of course you may prefer to use another button for that purpose) 
       prog = irexec
       config = <your wake-up script path>
       quit
  end wakeupwait

  begin
       button = OK (same button) 
       prog = irexec
       config = <your pause script path>
       mode = wakeupwait
  end

कुछ दस्तावेज:

irexec http://www.lirc.org/html/irexec.html

.lircrc http://www.lirc.org/html/configure.html (मोड विकल्प पढ़ने के लायक है)

एम्मानुएल


1
2018-05-24 11:57



हाँ, यह अलग से मिला। नौकरी करने लगता है लेकिन इसे एक्स लूप (इस मामले में) के बाहर लोड किया जाना है या इसे भी निलंबित कर दिया जाएगा। - Oli♦
ऐसा करने का एक तरीका बैच कमांड का उपयोग कर रहा है: echo कमांड | जत्था - Emmanuel