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 la mise en veille de l'ordinateur portable lorsque le couvercle est fermé et que la batterie est faible, exécutez les commandes suivantes :
sudo pmset -b sleep 5; sudo pmset -b disablesleep 0
Le "5" dans la deuxième série de commandes représente le nombre de minutes avant la mise en veille lorsque l'ordinateur est sur batterie ; ajustez-le 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 se mettra jamais en veille lorsqu'il est sur batterie. Pour cette raison, j'ai écrit un shell script 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 shell script désactivera le sommeil jusqu'à ce que vous appuyiez sur la touche Enter pour réactiver les paramètres de sommeil (vous pouvez également appuyer sur la touche Ctrl - C et obtenir la même chose). Il définit également un délai d'attente (300 secondes/5 minutes par défaut) après lequel les paramètres de veille seront automatiquement réactivés et l'ordinateur portable sera forcé de se mettre en veille. Si cela peut être pénible si vous utilisez votre ordinateur portable lors d'une réunion, cela vous sauvera la vie si vous avez oublié et mis votre ordinateur portable dans votre sac pour rentrer chez vous.
Les lecteurs avisés noteront que ces commandes requièrent sudo
malheureusement, c'est inévitable AFAIK. Ce que j'ai fait sur mon système, c'est de faire en sorte que je n'aie pas à entrer mon mot de passe pour lancer le programme pmset
en tant que racine. Pour ce faire, modifiez le fichier 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 (c'est-à-dire exécuter le script sans avoir à entrer votre mot de passe) en exécutant le shell script SETUID, mais je n'aime pas faire cela ; ouvrir cette seule commande via sudoers me semble moins risqué.
Pour exécuter le script, placez-le dans un répertoire sur votre ordinateur. PATH
et l'invoquer comme tel :
noz [<timeout in seconds>]
Lorsque vous arrivez à l'endroit où vous allez, appuyez simplement sur Enter o Ctrl - C et vous êtes prêt à partir. Et si vous l'oubliez, il se réinitialisera et se mettra en veille automatiquement.
Il y a probablement un moyen de réaliser tout cela via AppleScript, de sorte que vous puissiez lui attribuer une touche de raccourci et ainsi de suite ; j'essaierai si jamais je me lasse de l'exécuter en ligne de commande.