Mi sistema (Z390 Aorus Elite + i9-9900K + RX 6600 XT) con macOS 15 Sequoia no siempre entra en reposo como debe. En algunas ocasiones lo hace, apagando luces y ventiladores, pero en otras se mantiene activo, incluso con la pantalla encendida. Esto sucede con la misma configuración que utilizo en macOS 14 Sonoma y macOS 13 Ventura en los que el sistema entra en suspensión con normalidad.
Origen del fallo
Hay 2 situaciones que pueden provocar este comportamiento:
- Información del Sistema >> Alimentación >> Eventos de Activación: el reposo suele fallar cuando aparecen Eventos Programados generados por diferentes procesos dependientes de com.apple.alarm (son de Tipo Wake). También puedes verlos con el comando
sudo pmset -g sched
. Estos eventos se pueden borrar con el comandosudo pmset schedule cancelall
- El proceso apsd (Apple Push Notification Services Daemon): cuando está activo el reposo puede fallar. Este proceso parece estar relacionado con las notificaciones de varias aplicaciones y servicios. Puede ser detenido con uno de estos comandos:
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.apsd.plist
o este otrosudo launchctl bootout -w /System/Library/LaunchDaemons/com.apple.apsd.plist
En mi caso los eventos programados parecen afectar más al reposo que el proceso apsd. El reposo falla frecuentemente cuando hay eventos programados pero suele funcionar bien sin deshabilitar apsd. Sin embargo, en foros de Internet hay comentarios de usuarios que no solucionan este problema hasta que no actúan sobre apsd.
Por ello, mi recomendación es cancelar los eventos programados en primer lugar, probar si el sistema entra y sale del reposo como debe y desactivar apsd sólo como recurso secundario si el reposo sigue fallando. Añadiendo a esto que la cancelación de eventos programados puede ser planificada sin modificar el valor de SIP pero desactivar apsd obliga a trabajar con SIP parcialmente deshabilitada.
Proceso launchd
macOS usa launchd para administrar daemons y agentes (tareas, procesos o programas residentes que corren en segundo plano sin interacción con el usuario) y puedes usarlo para ejecutar scripts de shell. No se puede interactuar con launchd directamente, hay que usar el comando launchctl para arrancar o parar daemons y agentes. Durante el arranque, launchd es el primer proceso que ejecuta el kernel. Estos son los lugares donde macOS guarda los archivos de configuración de estos procesos que corren en segundo plano:
- /Sistema/Librería/LaunchDaemons: Daemons del sistema instalados por Apple, carpeta protegida
- /Sistema/Librería/LaunchAgents: Agentes instalados por Apple, carpeta protegida
- /Librería/LaunchDaemons: Daemons del sistema añadidos por otras aplicaciones
- /Librería/LaunchAgents: Agentes añadidos por otras aplicaciones
- ~/Librería/LaunchAgents: Agentes añadidos por otras aplicaciones que se aplican sólo al usuario que inicia sesión.
Existe la posibilidad de crear tareas controladas por launchctl con archivos plist localizados en las carpetas /Library/LaunchAgents, /Library/LaunchDaemons o ~/Library/LaunchAgents. Una diferencia importante es que las tareas existentes en /Library/LaunchDaemons pueden ser ejecutas como root pero las de las carpetas LaunchAgents se ejecutan como el usuario en sesión.
He creado una tarea que se lanza cada cierto tiempo ejecutando el comando requerido. Como ambos comandos llevan sudo, el archivo plist ha de ir en /Library/LaunchDaemons. Lo siguiente es una guía de cómo lo he hecho. Sobre esto hay mucha información en Internet, yo me limitaré a describir mi experiencia personal en lo que aplica al modo de reposo en macOS Sequoia.
1.- Cancelar eventos programados
Crear archivo de comandos de Terminal y guardarlo como nosched.sh:
#!/bin/zsh
sudo pmset schedule cancelall
#sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.apsd.plist
Copiarlo a /usr/local/bin:
sudo cp /Users/yo/Desktop/LaunchDaemons/nosched.sh /usr/local/bin
Hacer a root propietario del archivo:
sudo chown root:wheel /usr/local/bin/nosched.sh
Crear un archivo plist y guardarlo como com.user.nosched.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.nosched</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/nosched.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>300</integer>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
En este archivo tenemos:
- Label: etiqueta que ha de coincidir con el nombre del archivo sin la extensión .plist
- ProgramArguments: el comando o archivo que se ha de ejecutar
- RunAtLoad: activar desde el arranque
- StartInterval: intervalo de tiempo en segundos entre ejecuciones
- KeepAlive: mantener activo.
Copiarlo a /Library/LaunchDaemons. Ya se ha comentado que los archivos plist de la carpeta /Library/LaunchDaemons pueden ser ejecutados como root pero los de la carpeta /Library/LaunchAgents son ejecutados como el usuario activo.
sudo cp /Users/yo/Desktop/LaunchDaemons/com.user.nosched.plist /Library/LaunchDaemons
Hacer a root propietario del archivo:
sudo chown root:wheel /Library/LaunchDaemons/com.user.nosched.plist
2.- Deshabilitar el proceso apsd
Recuerda hacer esto sólo si con el método 1 no es suficiente y/o compruebas que con apsd inactivo el reposo funciona bien.
Respecto al proceso apsd, /System/Library/LaunchDaemons/com.apple.apsd.plist ya existe pero la carpeta /System está protegida y macOS no deja modificarla o actuar sobre ella por lo que, para poder detener apsd, es necesario funcionar con SIP (parcialmente) deshabilitada.
Puedes usar csr-active-config=03080000
en config.plist de OpenCore (0x803 en Clover), es el mismo valor que requiere OCLP para aplicar sus parches por lo que, si ya usas OCLP, no necesitas modificar config.plist. Esta configuración devuelve Unknown state
al ejecutar csrutil status en Terminal y las variables de seguridad que deshabilita son:
CSR_ALLOW_UNTRUSTED_KEXTS - 0x1 (1)
CSR_ALLOW_UNRESTRICTED_FS - 0x2 (2)
CSR_ALLOW_UNAUTHENTICATED_ROOT - 0x800 (2,048).
EL archivo nosched.sh ha de ser modificado para quitar la marca de comentario al comando que desactiva apsd:
#!/bin/zsh
sudo pmset schedule cancelall
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.apsd.plist
3.- Poner en marcha la tarea
Respecto a los eventos programados, puedes arrancar la tarea para que esté activa en segundo plano con uno de estos de estos comandos (en mi caso ambos parecen funcionar igual):
sudo launchctl load /Library/LaunchDaemons/com.user.nosched.plist
sudo launchctl start /Library/LaunchDaemons/com.user.nosched.plist
Respecto a apsd, después de reiniciar con el valor modificado de SIP el proceso apsd deja de interferir con el reposo.
Si al ejecutar load obtienes este error:
Load failed: 5: Input/output error
Try running launchctl bootstrap as root for richer errors.
Cambia a bootstrap para recibir información detallada del motivo del error.:
sudo launchctl bootstrap /Library/LaunchDaemons/com.user.nosched.plist
Para ver si está arrancada la tarea (com.user.nosched ha de estar presente):
sudo launchctl list | grep com.user.nosched
- 0 com.user.nosched
Para ver si ya apsd está inactivo (el comando no devuelve nada si com.apple.apsd está detenido):
sudo launchctl list | grep com.apple.apsd
Ahora puedes configurar Ahorro de Energía con el comando pmset. Ejemplo:
sudo pmset displaysleep 1;sudo pmset disksleep 2;sudo pmset sleep 6
El script de shell aparece en los Ítems de inicio (Ajustes del Sistema >> General).
Hola Pol
Una breve consulta, ¿A qué se debe que tanto el mouse y como el teclado ambos, con ARGB, se queden encendidos al entrar en reposo el equipo?
Gracias por tus comentarios.
Hola, Pablo. En teoría, en reposo (luces y ventiladores apagados) no deberían encenderse las luces de ratón o teclado. En mi experiencia he visto que, si están conectados a puertos USB3, suelen apagar esas luces pero, si están conectados a puertos USB2, a veces quedan encendidas, no sé por qué.
¿Tu PC entra en reposo bien, con silencio absoluto (ventiladores apagados) y sin luces parpadeantes en la caja?
Hola, Pol, muchas gracias por tu respuesta. Efectivamente mi equipo entra perfectamente en reposo, se apaga totalmente, ventiladores apagados, ni luces, ni teclado ARGB, solo queda encendido, en mi caso, el mouse ARGB solamente.
Pues si se apagan luces de la caja y ventiladores, es que está bien. Dado que el ratón es un poco especial (luces ARGB) y que los puertos USB pueden dar energía incluso estando el PC apagado (se puede comprobar poniendo a cargar un dispositivo en un USB3 con el PC apagado o en reposo a condición de que la placa no esté desconectada de la corriente) puede ser normal este comportamiento. Yo no le daría más vueltas y lo dejaría así.
Ok, pol, perfecto. Entonces así queda, aparte que no molesta en nada, era sólo mi consulta para salir de esa duda que se me presentaba con el mouse al quedar encendido. Muchas gracias por tu respuesta.
Buenas noches. Yo he probado actuando sólo sobre los eventos programados y no sobre apsd para no tener que modificar SIP.
Con este cambio se han solucionado los fallos con sleep que tenía en Sequoia, parece que en mi sistema no es necesario deshabilitar el proceso apsd.
Llevo poco tiempo con ello, hasta ahora no he observado nada raro.
Gracias por la información.
Hola, Antonio. Yo también he probado con y sin la parte que activa o desactiva apsd y es cierto que el reposo parece funcionar bien con una única acción: ejecutar cada cierto tiempo el comando
sudo pmset cancelall
para no tener eventos de activación programados.Cuando escribí el artículo había leído en foros que apsd podía estropear el reposo en Sequoia y lo diseñé con ambas acciones. Pero, igual que te pasa a ti, parece funcionar también sin la parte de apsd.
Sin embargo, en InsanelyMac y en Reddit hay posts de usuarios con Sequoia en cuyos sistemas no funciona bien sleep si no desactivan apsd.