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

41

J'ai un script qui est exécuté pour suspendre / reprendre le travail sur mon ordinateur portable. Ensuite, une autre série de commandes xinput , xkbset et xmodmap est exécutée lorsque je lance une session pour que les raccourcis clavier et les raccourcis clavier soient configurés. Lorsque je reprends la suspension, le défilement à deux doigts et les raccourcis clavier ne fonctionnent pas. Je dois 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 "" in
  hibernate|suspend) unbindDev;;
  resume|thaw)       bindDev;;
esac

défilement à deux doigts sur le pavé tactile 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"
    
posée 719016 02.01.2012 - 15:32
la source

2 réponses

38

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

case "" 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 exécutable globalement et remplacez $ USER par le nom d'utilisateur correspondant.

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

    
réponse donnée fader 02.01.2012 - 16:14
la source
2

Sur Ubuntu 16.04, j'ai dû créer un service de cette manière:

  1. créer un fichier

    sudo gedit /etc/systemd/system/somename.service
    
  2. mettre à l'intérieur

    [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 suspension & gt; vérifier les erreurs avec

    journalctl -u somename.service
    
réponse donnée janot 28.05.2018 - 23:41
la source

Lire d'autres questions sur les étiquettes