OS X: comment empêcher l'ordinateur de dormir pendant une session ssh

29

Lorsque je ssh dans un ordinateur OS X sur mon réseau, la session dure jusqu'à ce que l' OS X passe en mode veille .

Existe-t-il un moyen d'empêcher que cela ne se produise pendant ma session SSH , en plus de heurter physiquement la souris ou de taper les touches, ou de désactiver manuellement la fonction de veille?

EDIT: La session ssh serait normalement un simple montage sshfs.

Stefan
la source
Ne voudriez-vous pas également l'empêcher de s'endormir avant votre session SSH?
SamB

Réponses:

9

Ce n'est pas une solution prête à l'emploi, mais cela fonctionnera probablement si personne d'autre ne propose une solution :-)

Vous pouvez manipuler les paramètres de gestion de l'alimentation avec la commande pmset. Voir la page de manuel pour plus d'informations à ce sujet.

Le paramètre intéressant que nous voulons manipuler est le sommeil :

sleep - minuterie de mise en veille du système (valeur en minutes ou 0 pour désactiver)

Nous pouvons donc utiliser les commandes suivantes:

sudo pmset sleep 25      # go to sleep after 25 minutes
sudo pmset sleep 0       # disable sleep

Nous devons maintenant déclencher ces commandes après une connexion et une déconnexion. Si je me souviens bien, Bash est le shell par défaut pour Mac OS X qui nous amène à ces deux fichiers:

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bash_logout
          The individual login shell cleanup file, executed when a login shell exits

Modifiez-les ou créez-les dans votre répertoire personnel et ajoutez les commandes appropriées. Si vous le souhaitez, enregistrez la valeur de veille actuelle dans un fichier temporaire et restaurez-la ensuite.

Le dernier problème à résoudre est l'invite de mot de passe de sudo. Pour donner à votre utilisateur la permission d'invoquer pmset sans mot de passe, modifiez vos / etc / sudoers avec sudoedit. Vous devez utiliser la NOPASSWDbalise. Si c'est nouveau pour vous, consultez le manuel sudoers .

écho
la source
1
cette méthode fonctionnerait-elle si la connexion ssh n'était qu'un montage sshfs?
Stefan
1
Je ne suis pas sûr, mais je ne pense pas que sshfs ouvrira un shell de connexion, donc cela ne fonctionnera pas avec sshfs.
echox
9

Cela m'a permis d'utiliser mon mac sur SSH, peu importe quoi, tant que le mac est connecté à une source d'alimentation.

Préférences système, économiseur d'énergie, empêche l'ordinateur de se mettre automatiquement en veille lorsque l'écran est éteint

Tout s'arrête lorsque le Mac se déconnecte de sa source d'alimentation, vous n'avez donc pas à vous soucier de la durée de vie de la batterie.

Benoit Duffez
la source
1
Cette option est inutile sur macOS Sierra. Mon iMac se met en veille quel que soit ce paramètre, se met en veille sur l'accès SSH, puis se met immédiatement en veille après la déconnexion SSH. C'est vraiment agaçant.
Bruno Philipe
Cette réponse a finalement résolu mon problème après avoir tripoté ~ / .ssh / config pendant des heures sur un iMac Mojave
n1000
6

L'utilitaire pmset intégré à OS X a un paramètre qui peut faire ce que vous voulez. Consultez la pmsetpage de manuel pour le ttyskeepawakeparamètre et l'explication qui l'accompagne.

La commande suivante fera probablement ce que vous voulez:

sudo pmset -c ttyskeepawake 1

L' -cindicateur rend ce paramètre actif spécifiquement lorsque l'ordinateur fonctionne sur courant alternatif (par opposition à la batterie ou à l'onduleur) et ttyskeepawake 1empêche l'ordinateur de dormir pendant une session tty active (vraisemblablement à distance). Il va permettre le sommeil si la session a été inactif pendant plus longtemps que la minuterie de sommeil, mais si c'est un problème, peut - être l'ordinateur ne doit pas être réglé sur le sommeil du tout.

robo
la source
6

Pour utiliser SSH pour ouvrir un shell sur une machine OSX distante et l'empêcher de dormir pendant la durée de la session SSH:

$ ssh -t me@mymacbook caffeinate -i bash
étoilé
la source
5

Depuis Mac OS X 10.8, vous devriez pouvoir utiliser la caffeinate(8)commande.

Essayez caffeinate -s ssh server.example.com.

200_success
la source
9
L'OP essaie d'empêcher le Mac distant (c'est-à-dire le serveur ssh) de dormir. Sauf erreur, votre exemple ne fera qu'empêcher le sommeil sur le terminal du client.
Owen
3

J'ai ajouté le script suivant dans .bash_profile

if expr "$(ps -o comm= $PPID)" : '^sshd:' > /dev/null; then
  caffeinate -s $SHELL --login
  exit $?
fi

Si le processus est un enfant direct d'un démon ssh, exécutez un même shell via la commande caffeinate (8) pour empêcher le système de dormir pendant la session ssh.

Kubo Takehiro
la source
2

Une recherche sur le Web pour empêcher le sommeil de Mac fournit de nombreuses bonnes informations sur les utilitaires et les astuces que vous pouvez utiliser.

Cependant, dans votre situation, je soupçonne que ce que vous voulez vraiment faire, c'est d'avoir une session ssh distincte qui exécute un programme de ligne de commande très simple qui empêche le Mac de dormir. Apple donne le code source complet dans la FAQ technique 1160: Empêcher le sommeil . (Malheureusement, cette page est actuellement brisée sur le site d'Apple, mais vous pouvez extraire une copie du cache de Google.)

Je n'ai pas testé pour voir si ce programme peut être exécuté avec succès à partir d'une session ssh, mais il semble qu'il le pourrait.

Notez que les implémentations sshfs ne restent généralement pas connectées au système distant tout le temps, et exécutent simplement une session quand elles veulent un fichier ou un répertoire. Vous avez donc besoin d'une session ssh distincte, exécutée dans une fenêtre de terminal réduite, pour exécuter le programme d'insomnie.

L'avantage de cette approche est que vous n'avez pas besoin d'utiliser sudo ou de jouer avec les paramètres de gestion de l'alimentation du système.

Neil Mayhew
la source