Rendered at 18:49:25 GMT+0000 (Coordinated Universal Time) with Cloudflare Workers.
tristanj 2 days ago [-]
Why download a third-party script when this feature is built into MacOS? Just run:
sudo pmset -a disablesleep 1
to prevent macOS from sleeping. This works even when you close the lid and are on battery power. To re-enable normal sleep again, change the 1 to a 0.
clash 2 days ago [-]
1) Because you will eventually forget to reactivate it, which then leads to obvious problems.
2) Because you can for example be connected via ssh: You run the script and if your connection is disconnected, caffeinate+ shuts down the MacBook.
Edit: The API call that 'sudo pmset -a disablesleep 1' does is literally the first thing caffeine+ does. As soon as the lid closes the command is automatically reverted so you can't forget to do it yourself.
tristanj 2 days ago [-]
Both of those are trivial to do in a few lines of shell. There's no need to write or download a custom tool for this. I asked Opus to draft one up and it's just five lines long.
#!/bin/bash
[ "$EUID" = 0 ] || exec sudo "$0" "$@"
pmset -a disablesleep 1
trap exit HUP INT TERM
trap 'pmset -a disablesleep 0; ioreg -r -k AppleClamshellState | grep -q "State\" = Yes" && pmset sleepnow' EXIT
"${@:-read}"
How to use it:
./caf.sh # stay awake until you press Enter
./caf.sh make build # stay awake only while the command runs
Sleep is re-enabled when: the command finishes, the user presses Enter, on Ctrl-C, on SSH disconnect, or on kill (excluding SIGKILL). If the lid is closed when the command finishes, sleep is re-enabled and the Mac goes to sleep.
clash 1 days ago [-]
You say "No need to write a tool", then immediately write a tool. Brilliant :)
My first attempt was a shell script almost exactly like yours.
Then I thought I want to be able to set SUID so I don't have to use sudo. This ruled out the shell script. I could have just done a bunch of 'system("pmset ...")' calls but thought I might as well use the native commands.
nomel 2 days ago [-]
There are probably 20 of these at this point. I use amphetamine [1] (free on the app store). It has configurable timeouts with optional warnings/notifications, to reduce the ability for your MacBook to melt in your backpack. Can also have it disable when an app closes/download completes/battery percentage, and all sorts of triggers (like bluetooth presence, useful for backpack proximity).
First one I used was around 9 years ago. Nearly melted my backpack with the hot Intel CPU!
If you don't want to install anything, you can disable sleep with the built in tools:
sudo pmset -a disablesleep 1
clash 2 days ago [-]
Yeah, most of these repositories contain more files than caffeinate+ has lines of code.
The API call that 'sudo pmset -a disablesleep 1' does is literally the first thing caffeine+ does. But is only part of the full solution: As soon as the lid closes the command is automatically reverted so you can't forget to do it yourself. Also if you kill caffeinate+, the MacBook is put to sleep when the lid is still closed.
nomel 2 days ago [-]
Yes, most of the very many that you didn't know existed just a moment ago also handle that tricky case of restoring normal operation.
clash 1 days ago [-]
Bold accusation ;)
You forgot to argue about the LOC vs file count issue.
Also, you are wrong: None does auto sleep on script exit.
nomel 1 days ago [-]
Oops, didn't follow user names. My mistake.
And, I've been using these for around 9 years. A few I tried most definitely did re-enable on exit. Not sure why file count is a concern, or especially LOC (a truly horrendous metric to target, with the outcome being unintelligible code golf when optimized for). All that I used were exactly one file I was concerned with: a binary or shell script.
This has become strange. Cheers!
clash 7 hours ago [-]
Obviously code-golfed LOC is bullshit.
50 files and GUI for a near-trivial functionality is excessive, though.
What are you talking about? It’s a one line terminal invocation. These apps are utterly useless. Of course there’s a million open source ones.
clash 2 days ago [-]
Can your one line terminal invocation automatically put the MacBook to sleep when you are connected via ssh and the connection is lost?
nomel 2 days ago [-]
Technically one line ;)
sudo bash -c 'trap "pmset -a disablesleep 0" EXIT; s=; while :; do if lsof -nP -iTCP:22 -sTCP:ESTABLISHED >/dev/null 2>&1 || pgrep -xq ssh;
then n=1; else n=0; fi; [ "$n" != "$s" ] && pmset -a disablesleep $n && s=$n; sleep 10; done'
tstrimple 16 hours ago [-]
Switching between headphone output and speaker output on my system is also just one line. I have no idea what that line is because I created a toggle-able icon in waybar which is a really simple script that switches between the two outputs and shows me the correct icon. I didn't need a "tool" to do it, but the packaging and UX are far better than popping up a terminal any time I want to do this.
olyjohn 2 days ago [-]
This is neat. I ended up having to buy one of those dummy HDMI dongles to keep my MacBook awake so that I could remote into it. If it thinks there's an external monitor attached, it won't sleep. Or at least you can set it up that way.
WarOnPrivacy 2 days ago [-]
Windows has been surprisingly good about this (lid closed, laptop awake). I have a number of always-closed laptops deployed for customers (+ mother in law). Some are desktops that can be easily moved; others are on-prem devices that are left alone to handle certain tasks.
This isn't my first reading about the struggles MacBook users have here. It is bizarre to me that Apple doesn't natively and reliably support closed+awake devices; it feels like they've dug in their heels and I can't imagine why.
el_benhameen 2 days ago [-]
Windows is so good at this that it refuses to let my work laptop sleep when I close it and put it in my backpack no matter how many settings I try tweaking.
cosmic_cheese 2 days ago [-]
For the desk setup scenario, it's less of a problem since they'll stay awake in clamshell if they've got a power source and are hooked up to an external monitor. I've used my personal MacBook in a hybrid home/work setup like this for years without issue. It's only if you want clamshell on battery and/or with no external monitor that tools like this become necessary.
clash 2 days ago [-]
I wrote a small caffeine-like macOS command-line utility to keep your MacBook awake when you close the lid.
This can be handy when you have a long running task active but need to close your MacBook – for example to change trains, head home from a café or commute to the office.
WarOnPrivacy 2 days ago [-]
> I wrote a small caffeine-like macOS command-line utility to keep your MacBook awake when you close the lid.
Small purposeful utilities like this are Glob's own gift to us. Your counterpart in my Windows world might be the guy who wrote AlwaysActiveHours - a util that prevents update-related reboots.
hurfdurf 1 days ago [-]
"Active Hours"? Who comes up with that kind of stuff? And you cannot even disable it, only out"smart" it. Unbelievable.
clash 2 days ago [-]
Haha, every operating system has its quirks. The auto reboot is certainly a very nasty one.
2 days ago [-]
dlivingston 2 days ago [-]
Just read through the source code. Very simple and the first non-AI coded project I've seen here in a while.
Nice work.
pseudosaid 2 days ago [-]
amphetamine has been around forever.
clash 2 days ago [-]
I found this before I implemented my solution and it did not solve my problem:
1) It does not behave like caffeine where I can just kill the process and the behavior is reverted.
2) It does not put the MacBook to sleep automatically.
sys_64738 2 days ago [-]
brew install vorssaint
Thank me later.
clash 2 days ago [-]
Nope, not thanking you now or later.
1) It is an insane bloat if you just want that one feature.
2) There is no CLI, just GUI.
2) Because you can for example be connected via ssh: You run the script and if your connection is disconnected, caffeinate+ shuts down the MacBook.
Edit: The API call that 'sudo pmset -a disablesleep 1' does is literally the first thing caffeine+ does. As soon as the lid closes the command is automatically reverted so you can't forget to do it yourself.
My first attempt was a shell script almost exactly like yours. Then I thought I want to be able to set SUID so I don't have to use sudo. This ruled out the shell script. I could have just done a bunch of 'system("pmset ...")' calls but thought I might as well use the native commands.
[1] https://apps.apple.com/us/app/amphetamine/id937984704
I did not want GUI, just super simple caffeinate-like CLI. Also I wanted auto-shutdown afterwards.
https://www.google.com/search?q=site%3Agithub.com+keep+mac+o...
First one I used was around 9 years ago. Nearly melted my backpack with the hot Intel CPU!
If you don't want to install anything, you can disable sleep with the built in tools: sudo pmset -a disablesleep 1
The API call that 'sudo pmset -a disablesleep 1' does is literally the first thing caffeine+ does. But is only part of the full solution: As soon as the lid closes the command is automatically reverted so you can't forget to do it yourself. Also if you kill caffeinate+, the MacBook is put to sleep when the lid is still closed.
You forgot to argue about the LOC vs file count issue.
Also, you are wrong: None does auto sleep on script exit.
And, I've been using these for around 9 years. A few I tried most definitely did re-enable on exit. Not sure why file count is a concern, or especially LOC (a truly horrendous metric to target, with the outcome being unintelligible code golf when optimized for). All that I used were exactly one file I was concerned with: a binary or shell script.
This has become strange. Cheers!
https://github.com/search?q=caffeinate+lid+close&type=reposi...
This isn't my first reading about the struggles MacBook users have here. It is bizarre to me that Apple doesn't natively and reliably support closed+awake devices; it feels like they've dug in their heels and I can't imagine why.
This can be handy when you have a long running task active but need to close your MacBook – for example to change trains, head home from a café or commute to the office.
Small purposeful utilities like this are Glob's own gift to us. Your counterpart in my Windows world might be the guy who wrote AlwaysActiveHours - a util that prevents update-related reboots.
Nice work.
1) It does not behave like caffeine where I can just kill the process and the behavior is reverted.
2) It does not put the MacBook to sleep automatically.
Thank me later.
1) It is an insane bloat if you just want that one feature. 2) There is no CLI, just GUI.