J'essaie d'économiser de l'énergie en basculant les bureaux en mode suspension lorsqu'ils sont inactifs. Mais de nombreux bureaux sont également accessibles via SSH par leurs propriétaires. Une solution wakeonlan est déployée pour permettre aux propriétaires d'allumer la machine, mais le problème est que les machines se suspendent à nouveau automatiquement dans 10 minutes, même si la connexion SSH est activée.
Ce que j'essaie de faire, c'est d'inclure les sessions SSH actives dans les définitions "d'activité".
La question est de savoir si cela peut être fait en définissant une règle polkit? Cela peut-il être fait en mettant un script qui s'exécute avant la suspension réelle et l'abandonne si des sessions SSH sont trouvées? J'ai besoin d'une manière propre et légitime de le faire. Si ce n'est pas le cas, les méthodes hacky sont également les bienvenues.
Solution de piratage naïf actuelle: modifier /usr/sbin/pm-suspend
:
#check for SSH sessions, and prevent suspending:
if [ "$(who | grep -cv "(:")" -gt 0 ]; then
echo "SSH session(s) are on. Not suspending."
exit 1
fi
Cela sert le but. Mais je ne sais pas quand une mise à jour écrasera le fichier /usr/sbin/pm-suspend
. Je ne sais pas non plus comment cela fonctionnera avec d'autres implémentations suspendues comme tuxonice.
la source
grep -cv :0
au lieu de passerwc
?[
si vous écrivezif who | grep -qv :0; then
(en supposant que vous avez un POSIX conformegrep
comme GNU grep).Réponses:
Jusqu'à Ubuntu 14.10 (basé sur Upstart)
Jetez un œil
pm-action(8)
et recherchez/etc/pm/sleep.d
dans la section «FICHIERS». Si l'un de ces scripts revient avec un état de sortie différent de zéro, la suspension est empêchée.Instructions mises à jour pour plus de clarté:
Créez donc un fichier
/etc/pm/sleep.d/05_ssh_keepawake
.Mettez un shebang (
#!/bin/sh
) et le code mentionné dans la question dans ce fichier.Définissez les autorisations d'exécution sur celui-ci:
Depuis Ubuntu 15.04 (basé sur systemd)
systemd n'utilise pas pm-utils pour gérer ses hooks d'état d'alimentation mais dispose de sa propre infrastructure à la même fin. Les vérificateurs d'inhibiteur de sommeil ne sont plus exécutés en mode veille, mais doivent être définis par l'action qui inhibe le sommeil (voir 1 ).
En tant que tel, vous devez ajouter des commandes à la connexion et à la déconnexion de session SSH qui enregistrent un inhibiteur de sommeil avec systemd (par exemple via
systemd-inhibit(1)
) et libèrent plus tard l'inhibiteur. Si quelqu'un sait comment se connecter et se déconnecter de SSH, j'accueillerais un commentaire ou une modification afin que nous puissions déterminer les étapes et les commandes pertinentes.La section suivante est en cours de réalisation - Utilisez-la uniquement lorsque vous savez ce que vous faites!
Vous pourrez peut-être écrire une unité systemd
/etc/systemd/system/ssh-inhibt-sleep.service
qui se rend dépendante de l'sleep.target
utilisation de l'RequiredBy
option. Si votre nouvelle unité échoue (avec un état de sortie non nul de son processus invoqué), elle effectuerasleep.target
et donc l'action de sommeil suivante.Comme toujours, vous devez activer les unités systemd pour qu'elles prennent effet:
Pour plus d'informations, voir
systemd.unit(5)
etsystemd.service(5)
.la source