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 pmset
que je puisse m'exécuter en tant que root. Pour ce faire, éditez le sudoers
fichier ( 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 PATH
et 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.