web-dev-qa-db-fra.com

comment exécuter une commande après la reprise de la suspension?

J'ai un script qui est exécuté pour que la suspension/reprise fonctionne dans mon ordinateur portable. Ensuite, j'ai une autre série de commandes xinputname __, xkbsetet xmodmapqui sont exécutées lorsque j'initie une session avec le défilement à deux doigts et la configuration de raccourcis clavier. Lorsque je reprends la suspension, le défilement à deux doigts et les raccourcis clavier ne fonctionnent pas. J'ai besoin d'exécuter manuellement les commandes dans le deuxième fichier à nouveau. Comment puis-je les ajouter au script de suspension/reprise pour que cela soit fait automatiquement? Voir ci-dessous:

suspendre/reprendre le script

/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

clavier de défilement à deux doigts et script de raccourcis clavier

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"
43
719016

Vous pouvez placer vos scripts dans le répertoire /etc/pm/sleep.d pour les exécuter après la suspension. Vous devrez ajouter une condition pour que votre script ne s'exécute que pendant la reprise, pas plus que pendant le processus de suspension. Par exemple, votre script de pavé tactile ressemblerait à ceci:

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

Assurez-vous que votre script est marqué comme étant globalement exécutable et remplacez $ USER par le nom d'utilisateur correspondant.

Vous trouverez des informations plus détaillées dans la page de manuel pm-suspend (man pm-suspend) ou en consultant la documentation dans /usr/share/doc/pm-utils (en particulier /usr/share/doc/pm-utils/HOWTO.hooks.gz).

40
fader

Sur Ubuntu 16.04, je devais créer un service de cette façon:

  1. créer un fichier

    Sudo gedit /etc/systemd/system/somename.service
    
  2. mettre dedans

    [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. activer le service

    Sudo systemctl enable somename
    
  4. (facultatif) si ne fonctionne pas après la reprise de susp> contrôlez les erreurs avec

    journalctl -u somename.service
    
6
janot

Ouvrez ce fichier:

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

Contenu:

 #!/bin/sh 
 
 cas 1 dollar 
 post) 
 /usr/lib/pm-utils/power.d/95hdparm -apm resume 
 ## Collez votre commande pour exécuter votre script 
 ;; esac 

Votre commande sera exécutée avec privilèges d'administrateur.

2
Abhishek Singh