Utilisez la caféine pour éviter de dormir sur le couvercle, fermez sur la batterie

41

L' caffeinateutilitaire natif ne permet pas d'empêcher mon macbook de dormir lorsque je ferme l'écran. Le système se met en veille et divers services réseau (VPN, écrans partagés, appels VOIP, clients de messagerie, transferts de fichiers) échouent pendant que je me rends de mon bureau à ma réunion en moins de 5 minutes.

Se promener avec le couvercle à moitié ouvert rend difficile le transport en toute sécurité avec mon café et est nettement froid.

L' caffeinateutilitaire natif est conçu pour gérer cela comme un remplacement convivial pour l'utilisateur pmset, mais semble être conçu pour ne pas fonctionner lorsqu'il est déconnecté de l'alimentation secteur.

Documents via man caffeinate

-s Créez une assertion pour empêcher le système de dormir. Cette assertion est valide uniquement lorsque le système fonctionne sur le secteur .

Vous recherchez une alternative native à InsomniaX ou au sommeil nocturne .

Une fonction de temporisation est essentielle pour éviter d’empiler accidentellement mon macbook mort-vivant dans un sac, ce qui provoquerait un désordre extrême. ( caffeinate -t, spécifie la valeur du délai d'attente en secondes)

ici
la source
Je crains qu'il n'y ait pas d' alternative native , puisqu'un MacBook est censé s'endormir quand vous le fermez. : - /
Asmus
2
Se promener avec MacBook est précisément la raison pour laquelle je souhaite également une solution pour empêcher le sommeil lorsque le couvercle est fermé.
theonlygusti
Avez-vous essayé l'option -t, comme caffeinate -t 3600? Selon mon expérience, cela fonctionne même si le macbook fonctionne sur batterie.
Qiang Xu
Merci pour la suggestion, n'a pas fonctionné sur les tentatives initiales. Est-ce que je manque quelque chose? Testé 1) caffeinate -t 36002) Fermer l’ordinateur portable 3) Attendre 5s 4) Ouvrir l’ordinateur portable pour trouver l’écran de connexion et les services réseau déconnectés.
ici
@ ici, je n'ai pas essayé de fermer le couvercle. Je viens de lancer la commande avec -toption lorsque mon macbook est sur batterie, et il ne s'est pas endormi. Je n'ai pas essayé avec le couvercle fermé, mais il semble que le macbook sera obligé de dormir dès que vous fermez le couvercle. Désolé pour mon incompréhension. Je pensais que vous cherchiez un moyen de le faire fonctionner uniquement avec la batterie, sans le couvercle fermé.
Qiang Xu

Réponses:

37

Ce n'est pas idéal, mais voici une solution. Pour empêcher l'ordinateur portable de dormir lorsque le couvercle est fermé et que vous utilisez la batterie, exécutez les commandes suivantes:

sudo pmset -b sleep 0; sudo pmset -b disablesleep 1

Pour réactiver l'ordinateur portable en veille lorsque le couvercle est fermé et que vous utilisez la batterie, exécutez les commandes suivantes:

sudo pmset -b sleep 5; sudo pmset -b disablesleep 0

Le "5" dans le deuxième ensemble de commandes représente le nombre de minutes avant de dormir quand on est sur batterie; ajustez comme vous le souhaitez pour votre ordinateur portable.

C'est un peu dangereux, car si vous oubliez de réactiver vos paramètres, l'ordinateur portable ne dormira jamais lorsqu'il est sur batterie. Pour cette raison, j'ai écrit un script shell pour réactiver automatiquement les paramètres:

#!/bin/bash
#***************************************************************************
#*** noz - prevent laptop from sleeping when lid is closed
#***************************************************************************

#***** set some defaults *****
BATTERY_SLEEP=5 # in minutes
DEF_WAKE_LEN=300 # in seconds

#***** determine timeout value *****
timeout_len=${1:-$DEF_WAKE_LEN}

function prevent_sleep() {
    echo
    echo -n "Preventing sleep for $timeout_len seconds; press <enter> to continue..."

    sudo pmset -b disablesleep 1
    sudo pmset -b sleep 0
}

function enable_sleep() {
    # $1: <enter> = 0, timeout = 1, Ctrl-C = undef

    #----- insert a newline for timeout or Ctrl-C -----
    if [[ ${1:-1} -eq 1 ]]; then    echo; fi
    echo "Restoring previous battery sleep setting: $BATTERY_SLEEP"

    sudo pmset -b disablesleep 0
    sudo pmset -b sleep $BATTERY_SLEEP

    #----- sleep on timeout only -----
    if [[ ${1:--1} -eq 1 ]]; then   sudo pmset sleepnow; fi
    exit
}

#***** prevent it from sleeping *****
prevent_sleep

#***** trap Ctrl-C *****
trap enable_sleep INT

#***** wait for an enter *****
read -t $timeout_len
rc=$?

#***** re-enable normal sleep *****
enable_sleep $rc

Le script shell désactive le sommeil jusqu'à ce que vous appuyez sur la Entertouche, à quel point il réactiver les paramètres du sommeil (alternativement, vous pouvez frapper Ctrl- Cet réaliser la même chose). Il définira également un délai d’expiration (par défaut, 300 secondes / 5 minutes) après lequel les paramètres de veille seront automatiquement réactivés et l’ordinateur portable sera forcé de se mettre en veille. Bien que ce soit une douleur si vous utilisez votre ordinateur portable dans une réunion, cela vous sauvera la vie si vous oubliez et mettez votre ordinateur portable dans votre sac pour rentrer chez vous.

Les lecteurs astucieux noteront que ces commandes exigent sudo; malheureusement, c’est inévitable, autant que je sache. Ce que j'ai fait sur mon système, c'est de le faire pour que je n'ai pas à entrer mon mot de passe pour pmsetque je puisse m'exécuter en tant que root. Pour ce faire, éditez le sudoersfichier ( sudo visudo) et ajoutez cette ligne:

joe ALL=(ALL) NOPASSWD: /usr/bin/pmset

en remplaçant "joe" par votre nom d'utilisateur. Vous pourriez probablement obtenir le même résultat (exécuter le script sans avoir à entrer votre mot de passe) en exécutant le script shell SETUID, mais je n'aime pas le faire; ouvrir cette commande via sudoers me semble moins risqué.

Pour exécuter le script, collez-le dans un répertoire PATHet appelez-le ainsi:

noz [<timeout in seconds>]

Lorsque vous arrivez à l'endroit où vous allez, appuyez simplement sur Enterou Ctrl- Cet vous êtes prêt à partir. Et si vous l'oubliez, il se réinitialisera automatiquement et dormira.

Il existe probablement un moyen de réaliser tout cela via AppleScript, de sorte que vous puissiez ensuite lui attribuer une touche de raccourci. J'essaierai cela si je suis fatigué de l'exécuter depuis la ligne de commande.

Joe Casadonte
la source
6
Cool! Merci beaucoup! Une suggestion / simplification: je ne pense pas que vous deviez changer le sleepréglage. Il suffit d'allumer disablesleepet d'éteindre. pmset -a disablesleep 1et pmset -a disablesleep 0fonctionne bien pour moi. Mon MacBook ne doit pas dormir quand je ferme le couvercle. Tous les autres paramètres restent les mêmes.
jcsahnwaldt dit GoFundMonica
L'utilisateur de Github, iccir, a créé une application gratuite appelée Fermata, qui utilise cette astuce sous le capot et la résume parfaitement avec une icône de barre de menu, une minuterie, etc. github.com/iccir/Fermata
Alex Ryan
5

L'utilisateur de Github, iccir, a créé une petite application de barre de menu gratuite très pratique appelée Fermata qui fait exactement ce que vous voulez: garder un MacBook éveillé avec le couvercle fermé et vous permettre de définir une durée de temporisation.

Je viens de l'essayer sur Mojave (10.14.2) et cela a très bien fonctionné pour moi. https://github.com/iccir/Fermata

Alex Ryan
la source
5

Il n'y a pas de moyen indigène de le faire. Voici ce que j'ai obtenu après quelques recherches et essais:

entrez la description de l'image ici

Remarque:

  • L'extension du noyau de Nosleep n'a pas pu être chargée sur High Sierra
  • Le SPI privé n’est PAS supporté par Apple après High Sierra. Fermata est passé à la pmsetméthode après la version 1.1
  • Vous devrez peut-être désactiver Gatekeeper pour laisser Insomnia fonctionner comme prévu.
  • Les autres applications que j'ai essayées ne fonctionnent pas avec le couvercle fermé
Simba
la source
1

Avez - vous essayé cette application ? Je trouve cela très utile pour exactement ce que vous recherchez.

Je suis à peu près sûr qu'il dispose d'une fonctionnalité de délai d'attente que vous avez définie dans les paramètres de l'application.

Mitchell D
la source
6
Merci @ mitchell-d. La question demande spécifiquement une solution native, telle que la caféine. Il y a d'autres applications suggérées dans la façon de régler un macbook-pro-pour-ne-dormir-pas-quand-vous-fermez-le-couvercle. Néanmoins, j'ai essayé l' application de la caféine que vous recommandez. n'empêche pas mon macbook de dormir lorsque je ferme le couvercle.
ici