कैसे निलंबित से फिर से शुरू करने के बाद एक कमांड निष्पादित करने के लिए?


44

मुझे एक स्क्रिप्ट मिली है जिसे मेरे लैपटॉप में काम करने को निलंबित / फिर से शुरू करने के लिए निष्पादित किया गया है। तब मेरे पास एक और श्रृंखला है xinput, xkbsetऔर xmodmapजब मैं दो-उंगली स्क्रॉलिंग और कीबोर्ड शॉर्टकट सेट करने के लिए सत्र आरंभ करता हूं, तो इसे निष्पादित किया जाता है। जब मैं सस्पेंड से फिर से शुरू होता हूं, टू-फिंगर स्क्रॉलिंग और मेरे कीबोर्ड शॉर्टकट काम नहीं करेंगे। मुझे दूसरी फ़ाइल में फिर से कमांड को मैन्युअल रूप से निष्पादित करने की आवश्यकता है। मैं इसे स्वचालित रूप से करने के लिए सस्पेंड / फिर से शुरू करने वाली स्क्रिप्ट में कैसे जोड़ सकता हूं? निचे देखो:

सस्पेंड / स्क्रिप्ट फिर से शुरू

/etc/pm/sleep.d/20_custom-ehci_hcd

#!/bin/sh
#inspired by http://art.ubuntuforums.org/showpost.php?p=9744970&postcount=19
#...and http://thecodecentral.com/2011/01/18/fix-ubuntu-10-10-suspendhibernate-not-working-bug    
# tidied by tqzzaa :)

VERSION=1.1
DEV_LIST=/tmp/usb-dev-list
DRIVERS_DIR=/sys/bus/pci/drivers
DRIVERS="ehci xhci" # ehci_hcd, xhci_hcd
HEX="[[:xdigit:]]"
MAX_BIND_ATTEMPTS=2
BIND_WAIT=0.1

unbindDev() {
  echo -n > $DEV_LIST 2>/dev/null
  for driver in $DRIVERS; do
    DDIR=$DRIVERS_DIR/${driver}_hcd
    for dev in `ls $DDIR 2>/dev/null | egrep "^$HEX+:$HEX+:$HEX"`; do
      echo -n "$dev" > $DDIR/unbind
      echo "$driver $dev" >> $DEV_LIST
    done
  done
}

bindDev() {
  if [ -s $DEV_LIST ]; then
    while read driver dev; do
      DDIR=$DRIVERS_DIR/${driver}_hcd
      while [ $((MAX_BIND_ATTEMPTS)) -gt 0 ]; do
          echo -n "$dev" > $DDIR/bind
          if [ ! -L "$DDIR/$dev" ]; then
            sleep $BIND_WAIT
          else
            break
          fi
          MAX_BIND_ATTEMPTS=$((MAX_BIND_ATTEMPTS-1))
      done  
    done < $DEV_LIST
  fi
  rm $DEV_LIST 2>/dev/null
}

case "$1" in
  hibernate|suspend) unbindDev;;
  resume|thaw)       bindDev;;
esac

टचपैड टू-फिंगर स्क्रॉलिंग और कीबोर्ड शॉर्टकट स्क्रिप्ट

xinput set-int-prop "SynPS/2 Synaptics TouchPad" "Two-Finger Scrolling" 8 1
xinput set-int-prop "SynPS/2 Synaptics TouchPad" "Synaptics Two-Finger Scrolling" 8 1 1
xinput set-int-prop "SynPS/2 Synaptics TouchPad" "Synaptics Two-Finger Pressure" 32 10
xinput set-int-prop "SynPS/2 Synaptics TouchPad" "Synaptics Two-Finger Width" 32 8
setxkbmap -layout gb
xkbset m
xkbset exp =m
xmodmap -e "keycode 135 = Pointer_Button2"

यह Askubuntu.com/questions/226278/run-script-on-wakeup/483714 का डुप्लिकेट प्रतीत होता है । मेरी टिप्पणी askubuntu.com/a/483714/170127 पर भी देखें ।
जमदग्नि

जवाबों:


41

आप अपनी स्क्रिप्ट को /etc/pm/sleep.dनिर्देशिका में रख सकते हैं ताकि उन्हें निलंबित करने के बाद चलाया जा सके। आपको अपनी स्क्रिप्ट को फिर से शुरू करने के लिए चलाने के लिए एक सशर्त जोड़ना होगा और सस्पेंड प्रक्रिया के दौरान भी नहीं। उदाहरण के लिए, आपकी टचपैड स्क्रिप्ट इस तरह दिखाई देगी:

case "${1}" in
    resume|thaw)
        DISPLAY=:0.0 ; export DISPLAY
        xinput set-int-prop "SynPS/2 Synaptics TouchPad" "Two-Finger Scrolling" 8 1
        xinput set-int-prop "SynPS/2 Synaptics TouchPad" "Synaptics Two-Finger Scrolling" 8 1 1
        xinput set-int-prop "SynPS/2 Synaptics TouchPad" "Synaptics Two-Finger Pressure" 32 10
        xinput set-int-prop "SynPS/2 Synaptics TouchPad" "Synaptics Two-Finger Width" 32 8
        setxkbmap -layout gb
        xkbset m
        xkbset exp =m
        su $USER -c "sleep 3; /usr/bin/xmodmap -e "keycode 135 = Pointer_Button2"" &
;;
esac

सुनिश्चित करें कि आपकी स्क्रिप्ट वैश्विक रूप से निष्पादन योग्य के रूप में चिह्नित है और $ USER को संबंधित उपयोगकर्ता नाम में परिवर्तित करें।

आप pm- सस्पेंडेड मैनपेज ( man pm-suspend) में या /usr/share/doc/pm-utils(विशेषकर /usr/share/doc/pm-utils/HOWTO.hooks.gz) में डॉक्यूमेंटेशन को देखकर और विस्तृत जानकारी पा सकते हैं ।


2
इसे आप जो चाहें कह सकते हैं। यह एक अच्छा विचार है कि इसे 00-49 के बीच एक नंबर के साथ शुरू करें, प्रति-सस्पेंडेड मैनपेज के अनुसार: "00 - 49 उपयोगकर्ता और अधिकांश पैकेज ने हुक की आपूर्ति की। यदि एक हुक मानता है कि सभी सामान्य सेवाएं और उपयोगकर्ता स्थान अभी भी चल रहे हैं, तो यह यहां होना चाहिए। "
फादर

3
एक और (अब हटाए गए) उत्तर में यह था: 'कृपया निम्नलिखित बग रिपोर्ट पर ध्यान दें: लॉन्चपैड.net / ubuntu /+ source / pm-utils/+ bug/ 1455097 के बाद ज्वलंत लिपियों को अपग्रेड करने की आवश्यकता है /lib/systemd/system-sleep/'
विल्फ

8
पर उबंटू 15.10 , लिपि में हो गया है /lib/systemd/system-sleep/के बजाय /etc/pm/sleep
मार्क बेलमोंट

7
उबंटू 16.04 पर स्क्रिप्ट के लिए दिए गए तर्क preसस्पेंड में प्रवेश करने से पहले और postफिर शुरू होने के बाद हैंsuspendresume
जर्मर

3
यहां अंतिम दो टिप्पणियों को यकित (16.10) पर आजमाया, और यह काम नहीं किया। कैसे करें निवारण?
ग्रिंगो सुवे

7

Ubuntu 16.04 पर मुझे इस तरह से सर्विस बनानी थी:

  1. फ़ाइल बनाएँ

    sudo gedit /etc/systemd/system/somename.service
  2. अंदर डालो

    [Unit]
    Description=Some description
    Before=sleep.target
    StopWhenUnneeded=yes
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStop=-/path/to/your/script.sh
    
    [Install]
    WantedBy=sleep.target
  3. सेवा सक्षम करें

    sudo systemctl enable somename
  4. (वैकल्पिक) यदि सस्पेंड से फिर से शुरू होने के बाद काम नहीं कर रहा है, तो त्रुटियों की जांच करें

    journalctl -u somename.service

यह भी Ubuntu 18.04 पर काम करने लगता है, धन्यवाद!
केलुनिक

अगर यह इसका उपयोग नहीं करता है तो उबंटू /etc/pm/sleep.d के आसपास क्यों पड़ा रहता है? यह भ्रामक और भ्रामक है।
जोनाथन नेफेल्ड

इसने मेरे लिए ubuntu 18.04 (वास्तव में केडीई नियॉन) पर काम किया, लेकिन मुझे एक): [सेवा] के तहत, उपयोगकर्ता = टिम डाल दिया ताकि स्क्रिप्ट मेरे उपयोगकर्ता के रूप में चले) मेरी स्क्रिप्ट में) DISPLAY =: 0.0; निर्यात प्रदर्शन
टिम रिचर्डसन

3

इस फ़ाइल को खोलें:

sudo vim / lib / systemd / system-sleep / hdparm

सामग्री:

#! / Bin / श

केस $ 1 में 
  पद)
    /usr/lib/pm-utils/power.d/95hdparm-apm फिर से शुरू करें
    ## अपनी स्क्रिप्ट चलाने के लिए अपना कमांड पेस्ट करें
    ;; esac

आपका आदेश व्यवस्थापक विशेषाधिकार के साथ निष्पादित करेगा ।

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