Configurer veille Macbook (pmset)

Fonzerelli

Membre actif
24 Juin 2014
298
31
Lausanne
encoremerci.blogspot.ch
Bonjour,

J'essaie de configurer précisément la veille de mon Macbook (12 Retina) en fonction de diverses situations mais j'ai quelques doutes…

En premier, je souhaite une « hibernation » quand je rabat le capot.
J'ai donc mis : hibernatemode à 25.
Cela fonctionne très bien avec l'avantage que la batterie ne baisse plus et le réveil est quasiment aussi rapide que la veille standard.

Par contre, j'aimerais, quand le capot reste relevé, que l'écran s'éteigne après 5 minutes mais sans hibernation. C'est là que j'hésite avec les paramètres standby, standbydelay, sleep etc.

Est-ce qu'un pro pourrait me donner le bon paramètre ? Je mets un grand delay à standbydelay comme cela la veille est empêchée mais s'active quand je ferme le capot ?

Merci d'avance !
 
Salut Fonzerelli.

Le paramètre concernant le délai temporel avant mise-en-sommeil de l'écran (obscurcissement) est celui du displaysleep (car "display" = "écran" en Américain). La valeur associée s'indique par un nombre qui équivaut à tant de minutes : 3 = 3 minutes, 12 = 12 minutes etc.

La définition de ce paramètre peut être annoncée, après l'invocation de pmset, par 3 sortes de flags : -a ("all" => pour toutes les situations : sur batterie comme sur secteur) ; -b ("battery" => sur batterie) ; -c ("charger" => sur secteur). Une même commande peut comporter un ou plusieurs flags à la suite. Si tu passes une commande annoncée par le flag -a, elle vaudra dans tous les cas. Si tu veux affecter 2 valeurs distinctes pour les situations sur batterie ou sur secteur, alors tu introduis successivement le flag -b suivi du paramètre impliqué (ici displaysleep) et de sa valeur numérique, puis le le flag -c, suivi à nouveau du paramètre impliqué (displaysleep encore) et de sa valeur numérique différente (avec un espace séparant chaque terme).

Le délai de mise-en-sommeil du Système est déterminé par le paramètre disksleep dont tu comprends que la valeur à lui associer doit toujours être supérieure à celle du displaysleep pour que cette dernière soit pertinente. Si le Système se met en veille avant que l'écran n'ait pu être obscurci, il entraîne automatiquement cet obscurcissement avec lui. Par contre, l'écran peut être obscurci sans que le Système ne soit en veille (eg. des téléchargements ou des processus-Système peuvent continuer de s'exécuter).

Les choix d'hibernatemode n'ont aucun impact sur le délai d'obscurcissement de l'écran ou celui de la mise-en-sommeil du Système. Ils déterminent ce qui se passe au moment où le Système passe en sommeil : pas d'écriture des contenus de la RAM à une sleepimage du disque (0) ; écriture d'une sleepimage (3) etc. Les choix de standbydelay ajoutent une option passée au kernel pour qu'après tant de temps de sommeil, il vire le Système à l'hibernation ou sommeil profond (deep sleep).


Les exemples seront plus parlants pour le cas du paramètre displaysleep isolé :

Bloc de code:
sudo pmset -a displaysleep 5
=> pour -a (= toutes les situations : batterie / secteur), le displaysleep (délai de mise-en-sommeil de l'écran) est associé à la valeur 5 (5 minutes de délai sans activité au clavier ni au pointeur de l'utilisateur dans sa session avant obscurcissement de l'écran).

Bloc de code:
sudo pmset -b displaysleep 2 -c displaysleep 8
=> pour -b (batterie) le displaysleep est de 2 (minutes) mais pour -c (secteur) le displaysleep est de 8 (minutes). Tu piges la syntaxe et ses variations ?

La commande pmset doit être exécutée en droits root pour tout ce qui n'est pas information sur l'état des lieux (flag -g) donc implique sudo en tête de ligne => après ↩︎ (pression sur la touche "Entrée" du clavier pour activer la commande), une demande de password s'affichera --> taper le mot-de-passe admin à l'aveugle - aucun caractère ne s'affichant à la frappe - et derechef ↩︎. Dans un délai de grâce de 5' par défaut après une première authentification admin pour passer une commande sudo, aucune nouvelle authentification n'est requise pour d'autres commandes sudo.

Pour vérifier l'état des lieux, passe la commande :

Bloc de code:
pmset -g custom
et tu verras s'afficher les paramètres (notamment du displaysleep qui t'importe) triés par situations : Battery Power suivi de AC Power.
 
Dernière édition par un modérateur:
Merci pour ta réponse. C'est bien ce que j'avais lu.
Mais on est bien d'accord que displaysleep ne fait qu'éteindre l'écran mais ne concerne pas la veille?

Car j'ai displaysleep à 2 minutes et l'arrêt du disque à 10.
J'ai également standby à 1 et standbydelay à 10800
J'ai l'impression qu'il se met en hibernation au bout de 2 minutes…

edit : bon déjà j'avais sleep plus petit que displaysleep, pas très juste.

Donc si je mets displaysleep 2 et sleep 10 -> l'écran s'éteint à 2min et la veille s'effectue à 10min -> hibernation à 10min comme j'ai hibernatemode 25

Quand je ferme le capot, je passe directement à la veille et donc à l'hibernation.

J'ai juste ? ;)
 
Dernière édition:
En effet, le displaysleep mesure le délai d'extinction de l'écran à partir du seul moment où l'utilisateur n'agit plus graphiquement (ni action sur le clavier ni déplacement du pointeur ni clic sur le pad) - sans que cela n'implique ni n'impacte en quoi que ce soit l'effectuation de processus du Système : une recopie de fichiers du disque interne sur un DDE continuera de s'effectuer une fois l'écran en veille (obscurci), par exemple, de même que les processus du kernel, de launchd, des divers services de daemons etc. continueront de s'exécuter. Donc si ton écran s'obscurcit après 2' d'inaction graphique de ta part, le Système lui n'est pas en sommeil pour autant avant 10' dans ton cas.

Le paramètre du standby (sommeil avec RAM désactivée = hibernation) est binaire : soit 1 (activé) soit 0 (désactivé). Si le standby est sur activé (1), alors un standbydelay est à renseigner, qui indique à partir de combien de temps de sommeil simple (où la RAM continue d'être soutenue) il y a désactivation de la RAM qui implique la suppression de ses contenus (avec ou non écriture de ce contenu à une sleepimage en préalable selon le choix d'hibernatemode).

Chez toi, il doit donc y avoir la séquence :

- après 2' d'inaction graphique => displaysleep (écran obscurci)
- après 10' d'inaction graphique continue (donc 8' après l'obscurcissement de l'écran) => mise-en-sommeil du Système avec RAM maintenue (si tu es en hibernatemode 3, alors il y a écriture à la sleepimage avant mise en sommeil du Système)
- après 10800' de sommeil, il y a hibernation (sommeil profond) avec vidage de la RAM (autant dire jamais : 180 H).
- si tu rabats le capot, il y a extinction de l'écran + sommeil Système primant les 2 délais par défaut (mais la mise en sommeil du système, même s'il n'y a pas écriture d'une sleepimage préalable, n'est pas absolument instantanée : 15" environ sans sleepimage à écrire sur mon MacBook Pro Early_2011).​

--------------------​

EDIT => comme tu as continué d'écrire sans que je m'en avise, j'en tiens compte : si tu as l'option hibernatemode 25, alors effectivement après 10' d'inactivité graphique, ou à la fermeture directe du capot, il y a mise en sommeil du Système de type « hibernation » relative (que personnellement j'appelle plutôt : « sommeil profond »), par désactivation de la RAM, ce qui implique une écriture préalable de ses contenus à la sleepimage du disque (at: /private/var/vm/sleepimage). Ce qui fait que le voyant de la tranche avant ne doit pas passer au mode clignotant lent avant le délai de cette écriture d'autant de Go environ que tu as de RAM - ce qui peut demander les 2' que tu constates.

Le standbydelay chez toi doit mesurer le temps de cette « hibernation » (relative = sommeil profond) avant passage au quasi gel du Mac (léthargie ou hibernation radicale).

Lorsque tu réveilles ton Mac, il doit y avoir réactivation de la session sur la base de la sleepimage du disque - ce qui prend un court délai.
 
Dernière édition par un modérateur:
Oui, j'ai mis hibernatemode 25 car cela me permet de préserver la batterie et la reprise est tout de même très rapide sur ce nouveau Macbook.

Quand je ferme le capot, cela passe donc directement en hibernation.

Par contre, quand je reste ouvert, il est préférable que seul l'écran s'éteigne et que l'hibernation intervienne seulement si je m'absente longtemps. Donc, 2 et 10 me paraissent bien.

Sur secteur, je vais enlever l'hibernation et mettre des paramètres plus longs.

Je pourrais éventuellement remettre hibernatemode à 3 et ainsi avoir de nouveau 3 étapes (2, 10 et 30 par exemple)

Si je fais tout ceci, c'est qu'avec la config de base, le macbook consommait presque 5% de batterie par heure en veille ! Avec l'hibernation, la batterie ne bouge pas même si je vois quand même des entrées dans la console toutes les deux heures environ.
 
Bonjour Fonzerelli.

Le « crépuscule du matin » est plus favorable à ma faculté de discernement que le « crépuscule du soir ». Je m'avise donc ce matin d'une confusion de termes que j'ai commise hier soir : j'ai écrit disksleep à la place de sleep.

- disksleep est une assertion en voie d'obsolescence, qui n'a de pertinence qu'avec des disques à plateaux : elle cible le délai d'inactivité graphique avant intervention d'un ralentissement de la vitesse de rotation du HDD. Pour des Macs à SSD (comme le tien), cette assertion est nulle, quand bien même elle serait associée à une valeur numérique.

- sleep est l'assertion qui cible la mise en sommeil de l'activité du Système après un délai d'inactivité graphique de l'utilisateur. C'est donc elle qui doit être associée à une valeur numérique supérieure à l'assertion displaysleep (sommeil de l'écran = obscurcissement). Par exemple : displaysleep 2 sleep 5.​

Une fois fixé le délai de sleep > displaysleep, le choix de la valeur de l'hibernatemode fixe la modalité du sleep en question : 0 = mise en sommeil simple passé le délai = maintien en charge de la RAM pendant le sommeil sans écriture à la sleepimage des contenus de la RAM en préalable (=> la session se re-déploie sur la base de la RAM) ; 3 = mise en sommeil simple passé le délai = maintien en charge de la RAM pendant le sommeil mais impliquant une écriture préalable à la sleepimage par précaution (=> la session se re-déploie encore sur la base de la RAM) ; 25 = mise en sommeil profond passé le délai = sommeil avec RAM déchargée de ses contenus et désactivée, avec écriture préalable à la sleepimage de ses contenus (=> la session se re-déploie sur la base de la sleepimage).

Le standby est l'hibernation à proprement parler : un état du Système plus radicalement désactivé que lors du sommeil (simple ou profond) = léthargie. La passage du sommeil au standby est réglé par la valeur de l'assertion du standbydelay : délai de sommeil avant mise en hibernation radicale. Le standby implique la désactivation de la RAM avec effacement de ses contenus : il présuppose donc une écriture de ses contenus à la sleepimage afin que la session puisse se re-déployer sur la base de la sleepimage. En cas d'hibernatemode 25, cette écriture à la sleepimage a été accomplie en préalable à un sommeil profond impliquant une RAM effacée et désactivée : le standby s'opére donc directement passé le délai imparti ; en cas d'hibernatemode 3, l'écriture à la sleepimage a été aussi accomplie en préalable à un sommeil simple impliquant une RAM maintenue en charge avec ses contenus : le standby s'opère donc par désactivation de la RAM après ré-écriture de ses contenus à la sleepimage (il y aura donc re-déploiement de la session sur la base de la sleepimage par overriding du redéploiement régulier sur la base de la RAM maintenue en charge pendant le sommeil simple) ; en cas d'hibernatemode 0, aucune écriture à la sleepimage n'a été accomplie en préalable du sommeil simple impliquant une RAM maintenue en charge avec ses contenus : le standby intervient alors en surpassement (overriding) de l'assertion de l'hibernatemode 0, par écriture des contenus de la RAM à la sleepimage avant effacement de la RAM et sa désactivation. La session se re-déploiera également sur la base de la sleepimage, par overriding du redéploiement régulier sur la base de la RAM maintenue en charge pendant le sommeil simple).

--------------------​

Il y a clairement, là, prévoyance d'une issue logique en cas d'assertions contradictoires : le standby impliquant effacement/désactivation de la RAM et re-déploiement de session sur la base d'une sleepimage ayant sauvegardé les contenus de la RAM / l'hibernatemode 3 et 0 impliquant la préservation de la RAM dans le sommeil et le re-déploiement de la session sur la base de la RAM => le standby a priori surpasse (override) les préférences de ces hibernatemode en effaçant la RAM et en déterminant un réveil sur la base de la sleepimage : il opère donc une assimilation à l'hibernatemode 25.

À scruter les choses de près, la résolution de la contradiction entre l'hibernatemode 3 et le standby (préservation de la RAM vs effacement de la RAM) par privilège du standby (overriding de l'hibernatemode 3 avec effacement de la RAM), en déterminant un redéploiement de la session sur les bases de la sleepimage (comme dans l'hibernatemode 25) n'introduit pas de problème logistique majeur, car l'hibernatemode 3 implique intrinsèquement une écriture par précaution à la sleepimage => le standby "actualise" cette précaution.

Par contre, la résolution de la contradiction entre l'hibernatemode 0 et le standby (préservation de la RAM vs effacement de la RAM) par privilège du standby (overriding de l'hibernatemode 0 avec effacement de la RAM), ne peut déterminer un re-déploiement de la session sur les bases de la sleepimage (comme dans l'hibernatemode 25) qu'en rendant fonctionnel un fichier sleepimage sur le disque que l'hibernatemode 0 a précisément pour vocation d'invalider - ce qui permet a priori sa suppression pour gagner de l'espace-disque (par exemple, sur mon MacBook Pro, je privilégie toujours l'hibernatemode 0, afin de pouvoir remplacer la sleepimage de 8 Go à 16 Go - étendue de ma RAM - par un fichier sleepimage verrouillé vide de 0 Ko). Si j'optais pour un standbydelay susceptible d'intervenir dans la pratique, alors le standby aurait pouvoir de surpassement (overriding) de l'assertion de l'hibernatemode 0, et il y aurait création de force d'une sleepimage > 8 Go (après déverrouillage du fichier vide verrouillé) afin de permettre un re-déploiement de la session sur sa base en sortie du standby - ce qui serait en antagonisme majeur avec mes choix de gestion de l'espace-disque. Pour surmonter ce paradoxe, il faut donc que je désactive le standby, ou du moins que je fixe un standbydelay insusceptible d'intervenir dans la pratique, afin de préserver une valeur de 0 Ko de la sleepimage verrouillée.

--------------------
Il est, bien entendu, possible de différencier les assertions selon les 2 flags fondamentaux -b (situation nomade sur batterie) et -c (situation sédentaire sur secteur) en optant y compris pour chacun de ces flags pour des hibernatemode différents. Par exemple :

Bloc de code:
sudo pmset -b hibernatemode 25 -c hibernatemode 3
en interpolant éventuellement des valeurs différentes relatives au standby et au standbydelay :

Bloc de code:
sudo pmset -b hibernatemode 25 displaysleep 2 sleep 4 standby 1 standbydelay 10 -c hibernatemode 3 displaysleep 5 sleep 10 standby 0 standbydelay 10800
où les cas de contradiction logique des assertions se trouvent réduits à néant.

Par contre, en cas de choix des hibernatemode :

Bloc de code:
sudo pmset -b hibernatemode 25 -c hibernatemode 0
je pourrais certes moduler ainsi mes assertions :

Bloc de code:
sudo pmset -b hibernatemode 25 displaysleep 2 sleep 4 standby 1 standbydelay 10 -c hibernatemode 0 displaysleep 5 sleep 10 standby 0 standbydelay 10800
un cas majeur de contradiction logique ne pourrait être évité : la présence au disque d'une sleepimage requise par l'hibernatemode 25 et recréée par lui alors que l'hibernatemode 0 a pour vocation de permettre de se dispenser de l'existence d'une sleepimage. Il y aurait alors arbitrage logique en faveur de l'hibernatemode 25 par overriding du 0, ce qui conduit l'utilisateur à des décisions éthiques : si le mode nomade est privilégié avec l'hibernatemode 25, il convient d'opter en position sédentaire -c pour l'hibernatemode 3 impliquant aussi une sleepimage ; si le mode sédentaire est privilégié avec l'hibernatemode 0 impliquant une suppression de la sleepimage, alors le mode nomade sur batterie -b doit être considéré comme forclos (c'est personnellement parlant, mon choix éthique radical : je n'utilise jamais hors de chez moi aucun appareil électronique : ni ordinateur, ni téléphone ni quoi que ce soit d'autre. J'ai choisi d'être entièrement dépouillé de tout autre autre contact que celui délivré par ma perception naturelle du monde...).

--------------------​
 
Dernière édition par un modérateur:
Bonjour, à tous ...:coucou:

Juste une petite chose qui me chagrine:
@ Macomaniac , tu dis :

- après 10800' de sommeil, il y a hibernation (sommeil profond) avec vidage de la RAM (autant dire jamais : 180 H).

Hors après quelques essais que j'ai eu à effectuer sur ma machine le délai (10800) d'origine, était de 3 heures que j'avais passé à 43200 (12 heures) justement pour éviter que la machine se mette en standby la nuit (j'avais ,à l'époque, des problème lors de la sortie de veille).

Bonne journée!
 
:coucou: François.

Tu as raison : n'ayant pas de bécane postérieure à des modèles de 2011, je ne suis pas concerné par l'assertion autopoweroff et j'ai tendance à la négliger. Pour être peinard, il faudrait donc passer une assertion -c autopoweroff 0 (pour le mode sédentaire) ; et, pour le mode nomade -b, toute assertion de standby 1 avec un standbydelay inférieur à 14 400 (secondes = 4 H = délai de déclenchement automatique de l'hibernation radicale si l'autopoweroff est laissé sur le default = 1) devance le déclenchement de cet autopoweroff et donc en court-circuite la fonctionnalité.

--------------------​

:coucou: zeltron

Je venais juste de m'aviser avoir encore commis une erreur (malgré le « crépuscule du matin »), relative cette fois à l'unité de compte du standbydelay dans mes exemples => alors que la valeur numérique associée au displaysleep comme au sleep est comptée par défaut en minutes ; celle associée au standbydelay (comme à l'autopoweroff s'il y a lieu) est comptée par défaut en secondes. La valeur de 10 que j'avais donnée en exemple de standbydelay pour le flag -b (sur batterie) est donc sans pertinence, car équivalant à 10 secondes de délai après le commencement du sommeil, alors que j'avais en tête 10 minutes : j'aurais donc dû saisir 600 dans mon exemple (= 600 secondes = 10 minutes).

Cette erreur concernant l'unité de compte de temps du standbydelay (évaluer en minutes alors qu'il s'agit de secondes), je l'avais déjà commise hier soir à propos des 10800 dans l'exemple de Fonzerelli : ce nombre doit s'évaluer en secondes et pas en minutes => cela donne donc 3 H et pas 180 H. Pas de doute : les ombres du « crépuscule du soir » ont voilé la lumière du « crépuscule du matin » en l'obscurcissant de leur toile. « Araignée du matin : chagrin » [de zeltron
361608_original.png
]...

--------------------
 
J'ai pu régler assez précisément les différents paramètres, ça devrait le faire, merci bien !

Je n'ai pas bien compris la différence entre standby et la nouvelle fonction autopoweroff (dictée par l'UE). Est-ce que ce dernier éteint complètement l'ordinateur de sorte qu'on ne puisse plus le réveiller avec une touche du clavier ou en levant le capot ?
 
Je n'ai pas bien compris la différence entre standby et la nouvelle fonction autopoweroff (dictée par l'UE). Est-ce que ce dernier éteint complètement l'ordinateur de sorte qu'on ne puisse plus le réveiller avec une touche du clavier ou en levant le capot ?

Encore un truc difficilement scrutable. D'après le man de pmset, standby est synonyme d'hibernation rigoureuse, autopoweroff de low_power sleep => je conjecture (sans garantie) que autopoweroff pourrait désigner un état intermédiaire entre le deepsleep (sommeil avec RAM désactivée) et l'hibernation radicale. Disons : quelques désactivations de plus, sans atteindre le seuil de l'hibernation. Car, en-dessous de l'hibernation, il n'y a plus que l'extinction.

L'autopoweroff détermine une écriture des contenus de la RAM à la sleepimage comme l'hibernation : dans les 2 cas, impliquant un effacement des contenus de la RAM, il doit y avoir réactivation des processus-Système puis re-déploiement de la session sur la base de la sleepimage rien que par ré-ouverture du capot ou pression d'une touche => donc un petit délai d'attente...​
 
Bonjour,
Depuis les dernières mises à jour macOS appliquées en mai et juin, mes deux iMac ont des problèmes de mise en veille.

Auparavant, avec l'iMac 2018 (SSD, Mojave), la sortie de veille demandait 3 à 4 secondes, ce qui est tout à fait normal comme expliqué ici par Apple (mode hibernation). Depuis début juin, parfois c’est comme avant, mais parfois le réveil est instantané et le boîtier est dans ce cas resté (très légèrement) chaud, y compris si la veille a duré une nuit entière. L'hibernation semble aléatoire.

Avec l'iMac 2012 (disque dur, High Sierra), c'est l'inverse. Auparavant, la sortie de veille était toujours instantanée. Depuis la dernière mise à jour système en juin, les veilles prolongées deviennent des hibernations, comme l’explique le lapin. Le problème, c’est qu’avec un disque dur la sortie d’hibernation prend environ 30 secondes, ce qui est trop long. Mais le pire est que parfois le clavier n'est plus reconnu au réveil ! Donc, plus possible de taper son mot de passe…

Tout fonctionnait bien jusque-là. Suis-je le seul à rencontrer ces problèmes ?

J'ai tenté de comprendre mes paramètres avec cette page et le présent fil, mais à vrai dire je suis perdu… Faudrait un dessin, je sais pas… 19 paramètres pour régler la veille, c'est incompréhensible !