Skip to content

Instantly share code, notes, and snippets.

@sbamin
Last active April 28, 2023 19:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sbamin/d3a5a0dfb42fbdb90f19790a539d1e9e to your computer and use it in GitHub Desktop.
Save sbamin/d3a5a0dfb42fbdb90f19790a539d1e9e to your computer and use it in GitHub Desktop.
toggle sleep mode for mac os ventura on M2 macbook, especially with unplugged power, monitors attached, and closed lid (closed diplay mode or clamshell).
#!/usr/bin/env bash
## Enable/Disable sleep on closed display
## strict mode on
set -euo pipefail
## can be one of status|on|off
cmd="${1:-"status"}"
if [[ "${cmd}" != "status" ]] && [[ "${cmd}" != "on" ]] && [[ "${cmd}" != "off" ]]; then
echo "ERROR: Invalid first positional argument: ${cmd}. It should be one of: status,on,off" >&2
exit 1
fi
## bash functions
_get_sleep_state() {
sleep_state="$(pmset -g | grep -E "SleepDisabled" | awk -F"\t" '{print $3}')"
if [[ "${sleep_state}" == 0 ]]; then
echo -e "SleepDisabled is set to 0 or default. Display will sleep on closing lid.\n\nRun ${0##*/} on to toggle to a non-default.\n"
elif [[ "${sleep_state}" == 1 ]]; then
echo -e "WARN: SleepDisabled is set to non-default 1.\nDisplay will NOT sleep on closing lid and can\ndrain battery to zero without any warning.\n\nRun ${0##*/} off to toggle to a default state.\n" >&2
else
echo -e "ERROR: Invalid sleep state reported for SleepDisabled row below.\n" >&2
pmset -g
exit 1
fi
}
export -f _get_sleep_state
if [[ "${cmd}" == "status" ]]; then
_get_sleep_state
exit 0
fi
sleep_state="$(pmset -g | grep -E "SleepDisabled" | awk -F"\t" '{print $3}')"
if [[ "${cmd}" == "on" ]] && [[ "${sleep_state}" == 0 ]]; then
_get_sleep_state
echo "Disabling default sleep mode. Require sudo."
sudo pmset -a disablesleep 1
_get_sleep_state
elif [[ "${cmd}" == "off" ]] && [[ "${sleep_state}" == 1 ]]; then
_get_sleep_state
echo "Enabling default sleep mode. Require sudo."
sudo pmset -a disablesleep 0
_get_sleep_state
else
_get_sleep_state
echo -e "sleep mode is already what you've intended it to be.\nNo further action needed." >&2
fi
## end ##
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment