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 xinput
name __, xkbset
et xmodmap
qui 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:
/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"
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
).
Sur Ubuntu 16.04, je devais créer un service de cette façon:
créer un fichier
Sudo gedit /etc/systemd/system/somename.service
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
activer le service
Sudo systemctl enable somename
(facultatif) si ne fonctionne pas après la reprise de susp> contrôlez les erreurs avec
journalctl -u somename.service
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.