Espresso

Gestion du sleep macOS sur batterie via le terminal.

v1.0 macOS 13+ zsh · bash

Contexte

Par défaut, macOS met le Mac en veille à la fermeture du couvercle. Ce comportement interrompt les processus en cours (builds, tâches CLI, tunnels SSH).

Espresso désactive ce comportement sur batterie uniquement, sans toucher au profil secteur.

⚠️ La batterie se vide et chauffe quand le Mac tourne fermé. Sur Apple Silicon la consommation reste faible ; sur Intel prévoir une durée limitée.

Installation

Coller le bloc suivant dans le terminal. Il écrit les fonctions dans ~/.zshrc et les active immédiatement.

~/.zshrc — installation
cat >> ~/.zshrc << 'EOF'

# --- Espresso / Sleep management ------------------------------------------

'espresso-on'() {
  sudo pmset -b disablesleep 1
  caffeinate -i &
  echo $! > /tmp/.caffeinate_pid
  echo "Espresso ON — Mac ne dormira pas sur batterie"
  echo "Ne pas oublier de faire 'espresso-off' a l'arrivee"
}

'espresso-off'() {
  sudo pmset -b disablesleep 0
  if [ -f /tmp/.caffeinate_pid ]; then
    kill $(cat /tmp/.caffeinate_pid) 2>/dev/null
    rm /tmp/.caffeinate_pid
  fi
  echo "Espresso OFF — Mac revient en mode normal"
}

'espresso-status'() {
  local sleep_state=$(pmset -g | grep "SleepDisabled" | awk '{print $2}')
  if [ "$sleep_state" = "1" ]; then
    echo "Espresso ON — le Mac ne dort pas sur batterie"
  else
    echo "Espresso OFF — le Mac se met en veille normalement"
  fi
}

# Warning automatique a l'ouverture du terminal
if pmset -g | grep "SleepDisabled" | grep -q " 1"; then
  echo "RAPPEL : Espresso est encore ON — faire 'espresso-off' si arrive a destination"
fi

# --------------------------------------------------------------------------
EOF
source ~/.zshrc

Le mot de passe sudo est demandé lors du premier appel à espresso-on ou espresso-off.

Commandes

CommandeAction
espresso-onDésactive le sleep sur batterie + lance caffeinate
espresso-offRéactive le sleep + coupe caffeinate
espresso-statusAffiche l'état actuel

Utilisation

  1. Lancer la tâche longue dans le terminal.
  2. Exécuter espresso-on.
  3. Fermer le Mac et se déplacer.
  4. À destination, exécuter espresso-off.

En cas d'oubli, un warning s'affiche automatiquement à la prochaine ouverture d'un terminal.

Fonctionnement

ComposantRôle
pmset -b disablesleepModifie le profil batterie pour désactiver la veille système
caffeinate -iEnvoie des assertions de wake au kernel, empêche la veille idle
/tmp/.caffeinate_pidStocke le PID de caffeinate pour le terminer proprement
SleepDisabledClé lue dans pmset -g pour déterminer l'état réel (sensible à la casse)

Compatibilité

EnvironnementStatut
macOS 13+ (Ventura, Sonoma, Sequoia)Testé
Apple Silicon (M1 → M4)Consommation faible
IntelFonctionne — batterie se vide plus vite
zsh (défaut depuis Catalina)Compatible

Contexte

Même fonctionnement que la version zsh, avec deux adaptations nécessaires pour bash :

Les noms de fonctions avec tirets ne sont pas supportés en bash. Les fonctions sont donc nommées avec des underscores (espresso_on, etc.) et appelées de la même façon.

ℹ️ bash est le shell par défaut sur les Mac sous macOS Mojave (10.14) et antérieur. Depuis Catalina (10.15), le shell par défaut est zsh. Pour vérifier : echo $SHELL
⚠️ La batterie se vide et chauffe quand le Mac tourne fermé. Sur Apple Silicon la consommation reste faible ; sur Intel prévoir une durée limitée.

Installation

Coller le bloc suivant dans le terminal. Il écrit les fonctions dans ~/.bash_profile et les active immédiatement.

~/.bash_profile — installation
cat >> ~/.bash_profile << 'EOF'

# --- Espresso / Sleep management ------------------------------------------

espresso_on() {
  sudo pmset -b disablesleep 1
  caffeinate -i &
  echo $! > /tmp/.caffeinate_pid
  echo "Espresso ON — Mac ne dormira pas sur batterie"
  echo "Ne pas oublier de faire 'espresso_off' a l'arrivee"
}

espresso_off() {
  sudo pmset -b disablesleep 0
  if [ -f /tmp/.caffeinate_pid ]; then
    kill $(cat /tmp/.caffeinate_pid) 2>/dev/null
    rm /tmp/.caffeinate_pid
  fi
  echo "Espresso OFF — Mac revient en mode normal"
}

espresso_status() {
  local sleep_state=$(pmset -g | grep "SleepDisabled" | awk '{print $2}')
  if [ "$sleep_state" = "1" ]; then
    echo "Espresso ON — le Mac ne dort pas sur batterie"
  else
    echo "Espresso OFF — le Mac se met en veille normalement"
  fi
}

# Warning automatique a l'ouverture du terminal
if pmset -g | grep "SleepDisabled" | grep -q " 1"; then
  echo "RAPPEL : Espresso est encore ON — faire 'espresso_off' si arrive a destination"
fi

# --------------------------------------------------------------------------
EOF
source ~/.bash_profile

Le mot de passe sudo est demandé lors du premier appel à espresso_on ou espresso_off.

Commandes

CommandeAction
espresso_onDésactive le sleep sur batterie + lance caffeinate
espresso_offRéactive le sleep + coupe caffeinate
espresso_statusAffiche l'état actuel

Utilisation

  1. Lancer la tâche longue dans le terminal.
  2. Exécuter espresso_on.
  3. Fermer le Mac et se déplacer.
  4. À destination, exécuter espresso_off.

En cas d'oubli, un warning s'affiche automatiquement à la prochaine ouverture d'un terminal.

Différences avec la version zsh

Pointzshbash
Noms de fonctionsespresso-onespresso_on
Fichier de config~/.zshrc~/.bash_profile
Reloadsource ~/.zshrcsource ~/.bash_profile

Le fonctionnement interne (pmset, caffeinate, SleepDisabled) est identique.

Compatibilité

EnvironnementStatut
macOS 10.14 Mojave et antérieurCompatible (bash natif)
macOS 10.15+ avec bash manuelCompatible
Apple Silicon (M1 → M4)Consommation faible
IntelFonctionne — batterie se vide plus vite