Comment exécuter des scripts et des commandes lors de la suspension et de la reprise sous Linux
Le moyen le plus efficace pour déclencher des scripts et des commandes lors des phases de suspension et de reprise sous Linux, que ce soit avant ou après ces événements, est de recourir au système d'initialisation systemd. Cette préférence est due à l'interaction directe de systemd avec le noyau et les mécanismes de gestion de l'alimentation. La maîtrise de cet outil confère à l'utilisateur un contrôle étendu sur son environnement Linux.
Il est primordial de souligner que toute modification du système d'initialisation peut comporter des risques si elle est effectuée sans la connaissance requise. Il est donc vivement conseillé de suivre les instructions de ce guide avec la plus grande attention afin d'éviter tout problème potentiel.
Il est important de noter que toutes les distributions Linux modernes n'utilisent pas systemd comme système d'initialisation. Certaines distributions peuvent s'appuyer sur upstart ou d'autres alternatives. Ce guide se concentrera sur systemd, car il s'agit du système d'initialisation le plus largement répandu. Si votre distribution utilise un système différent, il est recommandé de consulter la documentation spécifique de votre système d'exploitation.
Avis aux utilisateurs de Debian : Remplacez toutes les occurrences de `usr/lib/systemd/system-sleep` par `/lib/systemd/system-sleep/`.
Exécuter une commande avant la mise en veille
Pour activer un script avant la mise en veille, vous devez placer votre script bash dans le répertoire `/usr/lib/systemd/system-sleep/`. Bien que ces scripts puissent être personnalisés, il est important de respecter une certaine structure. Commencez par ouvrir un terminal et passez en mode administrateur avec `sudo -s`.
Utilisez ensuite l'éditeur de texte nano pour créer un nouveau script dans le répertoire system-sleep :
nano /usr/lib/systemd/system-sleep/pre-suspend.sh
Il est essentiel d'ajouter la ligne shebang au début du script, car sans elle, l'interpréteur ne pourra pas exécuter correctement les commandes.
#!/bin/bash
La partie suivante du script est la condition "if". Cette condition va signaler au système de gestion de l'énergie que si le système est sur le point d'entrer en mode veille, une action spécifique doit être exécutée. Intégrez le code suivant :
if [ "${1}" == "pre" ]; then
sh /chemin/vers/le/script/a/executer.sh
Remplacez `sh /chemin/vers/le/script/a/executer.sh` par la commande ou le script que vous souhaitez exécuter juste avant la suspension. Il est important de noter que cette ligne peut être remplacée par une commande directe si souhaité. L'important est que bash puisse l'interpréter comme une commande valide.
La dernière partie du script "avant la suspension" est la clause "elif". Cette section n'a pas besoin d'être modifiée, car notre objectif est de déclencher une action avant la mise en veille, et non lors du réveil.
elif [ "${1}" == "post" ]; then
# Cette section est vide
fi
Une fois que tout est configuré, sauvegardez le fichier dans nano en appuyant sur Ctrl + O.
Exécuter une commande après la sortie de veille

Le processus d'exécution d'une commande après la reprise ressemble beaucoup à celui d'une action avant la suspension. La principale différence est que l'action spécifique est placée après la ligne "elif" au lieu de la ligne "if".
Pour configurer un script post-reprise, commencez par ajouter la ligne shebang comme première ligne :
#!/bin/bash
Ensuite, ajoutez la section "if" :
if [ "${1}" == "pre" ]; then
# Cette section est vide
Une fois ce code inséré, ajoutez la section "else if" :
elif [ "${1}" == "post" ]; then
sh /chemin/vers/le/script/a/executer.sh
fi
De même, vous pouvez placer n'importe quelle commande valide après la ligne "elif". Systemd et bash s'assureront de son exécution.
Exécuter des commandes au démarrage et à la reprise

Il est tout à fait possible d'exécuter deux commandes distinctes, une avant la suspension et une autre après la reprise. Cela implique simplement de personnaliser le script en ajoutant des actions sous les lignes "if" et "elif".
Comme pour les étapes précédentes, commencez par inclure la ligne shebang :
#!/bin/bash
Ensuite, intégrez la section "if" :
if [ "${1}" == "pre" ]; then
# Remplacer avec la commande
Sous "if", remplacez `# Remplacer avec la commande` par la commande que vous souhaitez exécuter avant la mise en veille. Puis, passez à la section "elif" et procédez de la même manière :
elif [ "${1}" == "post" ]; then
# Remplacer avec la commande
fi
Sauvegardez le fichier avec Ctrl + O.
Ajuster les permissions et utiliser le script
Bien que les commandes soient définies dans le script, il est impératif de mettre à jour les permissions avant de pouvoir l'utiliser. Ouvrez un terminal et passez en mode administrateur avec `su` ou `sudo -s`. Exécutez ensuite la commande suivante :
chmod +x /usr/lib/systemd/system-sleep/pre-suspend.sh
Désormais, à chaque suspension ou reprise du système, les commandes définies dans le script devraient s'exécuter.
Remarque : Pour toute question relative à systemd system-sleep, consultez le manuel avec la commande `man systemd-suspend.service`.