ArchLinux में शानदार शटडाउन


21

मैं आर्चलिनक्स में गनोम शेल के साथ एक सुंदर शटडाउन / रिबूट प्राप्त करने की कोशिश कर रहा हूं। अब, जब मैं शट-डाउन करने के लिए कहता हूं, तो यह तुरंत खुले कार्यक्रमों को खुलेआम बंद करने / खुली फाइलों को सहेजने का समय दिए बिना बंद कर देता है। परिणामस्वरूप, जब भी मैं क्रोम को पुनः आरंभ करता हूं (उदाहरण के लिए) यह मुझे बताता है कि सत्र को सही ढंग से बंद नहीं किया गया था आदि। वेब पर पढ़कर मैंने प्रक्रियाओं को बंद करते समय उस सिस्टम को सीखा, यह पहले प्रक्रिया SIGTERMद्वारा SIGKILLबंद न होने पर उसके बाद भेज देता है एक निश्चित समय समाप्त होने पर। हालाँकि मुझे लगता है कि मेरे सिस्टम पर SIGKILLतुरंत बाद भेजा जाता है SIGTERMऔर मुझे लगता है कि यह एक गैर-सुशोभित कार्यक्रम समाप्ति का कारण है।

मुझे कुछ दस्तावेज मिले हैं (यदि मैं इसे सही तरीके से पढ़ता हूं) कहता है कि भेजने से पहले समय समाप्ति विकल्प SIGKILLद्वारा निर्धारित की जा सकती है TimeoutStopSec=। इसके अलावा भेजने SIGKILLको भी SendSIGKILL=विकल्प द्वारा अक्षम किया जा सकता है। लेकिन मुझे नहीं पता है कि उन विकल्पों को कॉन्फ़िगर करने के लिए ... क्या कोई सिस्टमड शटडाउन / रिबूट कॉन्फ़िगरेशन फ़ाइल है जहां मैं उन विकल्पों को सेट कर सकता हूं?

संपादित करें:

मैंने कुछ परीक्षण किया और मुझे दो रोचक बातें पता चलीं:

  1. अगर मैं मैन्युअल रूप से क्रोम को इस तरह से बंद कर देता हूं killall -SIGTERM chrome, तो यह शिकायत नहीं करेगा कि इसे अगली बार फिर से शुरू करने के बाद सही ढंग से बंद नहीं किया गया है। अगर मैं इसके बजाय इसे बंद कर देता हूं killall -SIGKILL chrome, तो यह शिकायत करेगा। यह मुझे बताता है कि क्रोम SIGTERM को सही ढंग से संभाल रहा है।
  2. मेरी शटडाउन प्रक्रिया के आउटपुट को देखते हुए, सिस्टमड प्रिंट Sending SIGTERM...तुरंत उसके बाद आता हैSending SIGKILL...

नीचे टिप्पणी के अनुसार, systemd अपनी प्रक्रियाओं को ही संभाल रहा है। इसलिए मेरे मामले में जी.डी.एम. यह मुझे बताता है कि मुद्दा हो सकता है:

  1. जीडीएम या तो इसे बंद नहीं कर रहा है बच्चे की प्रक्रिया (जैसे क्रोम) सही ढंग से (यानी उन्हें SIGTERM भेजकर)
  2. या systemd GDM को एक SIGKILL संदेश भेज रहा है जो इसे अपने बच्चों को सही ढंग से बंद करने का समय नहीं दे रहा है।

क्या वास्तव में जीडीएम अपने बच्चों को बंद करने की जांच / कॉन्फ़िगर करने का एक तरीका है?


1
सिस्टमड केवल नियंत्रण के तहत प्रक्रियाओं को सीधे संकेत देता है। क्रोम जैसी चीजें उन प्रक्रियाओं में से एक नहीं हैं। Systemd आपके डिस्प्ले मैनेजर (xdm, gdm, kdm, जो भी होगा) को संकेत देगा, यह तब डिस्प्ले मैनेजर पर निर्भर है कि वह अपने बच्चों को संकेत दे सकता है, और इसलिए जब तक आप क्रोम नहीं ले जाते हैं, तब तक लाइन डाउन करें। यदि कुछ भी क्रोम को संकेत नहीं देता है, तो यह तब मर जाता है जब xorg सर्वर बंद हो जाता है और यह प्रदर्शित हो जाता है।
पैट्रिक

@ पैट्रिक: धन्यवाद, मैंने ऐसा अनुमान लगाया। इसीलिए मैंने 'TimeoutStopSec = 90s' को '[Service]' खंड के '/etc/systemd/system/display-manager.service' में जोड़ने का प्रयास किया, इसके अनुसार: freedesktop.org/software/systemd/man/systemd.service। html लेकिन कुछ भी नहीं बदलता है: :(
lviggiani

क्रोम चाहिए के तहत किया systemd'sनियंत्रण - systemdहै pid 1- लेकिन बाद में एक subshell और आह्वान बच्चे की प्रक्रिया में अपनी आवरण स्क्रिप्ट से बाहर क्रोम अधिकारियों। फिर भी, यह वही करेगा जो इसे zygotesतब तक मारने की जरूरत है जब तक कि आपका सिस्टम ठीक से कॉन्फ़िगर न हो जाए। क्या आप क्रोम के लिए उन अस्थायी-अंतरिक्ष समाधानों में से एक का उपयोग कर रहे हैं जो आपको आर्क विकी में अनुशंसित होंगे?
मिकसेर्व

1
मैं आर्क पर केडीई और फ़ायरफ़ॉक्स के साथ एक समान समस्या में चलता हूं। मैंने कभी यह जानने की कोशिश नहीं की कि आखिर क्यों।
स्ट्रॉन्गबैड

2
जीडीएम सिग्नलिंग प्रक्रिया नहीं है। GDM अनिवार्य रूप से Xorg और PAM को हुक करने का एक गूंगा तरीका है। असली अपराधी है gnome-session
स्ट्रगलर

जवाबों:


2

अपने डेस्कटॉप को शालीनतापूर्वक बंद करने के लिए, आपको TimeoutStopSec=जीडीएम, या जो भी अन्य डिस्प्ले मैनेजर आप उपयोग कर रहे हैं, उसके लिए उठाना पड़ सकता है ।


मुझे लगता है कि जीडीएम को सिस्टमड को पहली जगह में बंद करने के लिए कभी नहीं कहना चाहिए था अगर यह नहीं जानता था कि क्या सभी ग्राहक बंद हो सकते हैं।
enigmaticPhysicist

2

इसने गनोम 3.12 के साथ मेरे आर्क लिनक्स पर मेरे लिए काम किया। यह पता चला कि यह शायद विन्यास में संबंधित है /etc/gdm/PostSession/Default

  1. sudo pacman -S wmctrlविंडोज़ प्रबंधन के लिए wmctrl स्थापित करने के लिए चलाएँ ।

  2. सभी विंडो बंद करने के लिए एक निष्पादन योग्य फ़ाइल बनाएं। उदाहरण के लिए, मैंने इसे /home/[your_username]/bin/close-all-windowsइन सामग्रियों के साथ रखा :

    #!/bin/sh
    wmctrl -l | while read -r line
    do
        wmctrl -c `echo "$line" | sed 's/.*  [0-9]* [your_hostname] //'`
    done
    
  3. /etc/gdm/PostSession/Defaultपहले इन सामग्रियों को संशोधित करें और जोड़ें exit 0:

    echo " Closing selected windows programs gracefully"
    export DISPLAY=:0
    su [your_username] -c /home/[your_username]/bin/close-all-windows
    

उम्मीद है कि ये काम करेंगे।


प्लाज्मा 5 के लिए, इस स्क्रिप्ट को .config / प्लाज्मा-कार्यक्षेत्र / शटडाउन / प्रॉब्लम को हल करने में
AF7

-1

sorpass की wmctrl स्क्रिप्ट मेरे लिए अच्छा काम करती है (CentOS 7 पर मुझे सिर्फ 'yum install wmctrl' को पहले चलाना था)। हालाँकि मैंने पाया कि / etc / gdm / PostSession / Default केवल लॉगआउट में ही लगता था, शटडाउन नहीं। इसलिए / etc / gdm / PostSession / Default का उपयोग करने के बजाय अब मैं Sorpus Phelan की python स्क्रिप्ट से sorpass की wmctrl स्क्रिप्ट कहता हूं जो इन दो साइटों पर मिल सकती है:

स्क्रिप्ट्स का यह संयोजन फ़ायरफ़ॉक्स, क्रोम आदि को बंद करने के लिए बहुत अच्छा काम करता है, जब मैं अपने CentOS 7 डेस्कटॉप मशीन को लॉगआउट या बंद करता हूं। ध्यान दें कि CentOS 7 के साथ आपको इस अजगर स्क्रिप्ट के काम करने के लिए 'yum install gnome-python2-gnome' चलाना होगा।

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