[HN Gopher] Show HN: Prevent your computer sleeping with just a ...
       ___________________________________________________________________
        
       Show HN: Prevent your computer sleeping with just a webpage
        
       There's often times I want to prevent a computer/laptop/VM from
       sleeping and while, yes, there's various Caffeine/Amphetamine apps
       they're often overkill.  Instead, this small (12Kb) page does the
       job and only needs a web browser.  It's just a very simple usage of
       a web api normally used for things like video players:
       https://developer.mozilla.org/en-US/docs/Web/API/Screen_Wake...
        
       Author : bradleyjkemp
       Score  : 131 points
       Date   : 2022-04-22 16:12 UTC (6 hours ago)
        
 (HTM) web link (nosleep.page)
 (TXT) w3m dump (nosleep.page)
        
       | devit wrote:
       | _Your_ computer, maybe.
       | 
       | My workstation will certainly not be prevented from entering
       | sleep by anything a webpage can do.
        
       | Hamcha wrote:
       | That's pretty handy! I remember a coworker asking me for
       | something similar years ago and me just making something on the
       | fly in C++ (a glorified wrapper over "SetThreadExecutionState"):
       | https://gist.github.com/Hamcha/3a7b3e7518e13d1fba7e
       | 
       | I wonder if that page would even work, his work PC at the time
       | (late 2015) was a dual-socket Pentium III which ran surprisingly
       | OK given the already 15+ years of age, but lacked in software
       | support as apps like Skype and Chrome at one point started
       | shipping binaries that required.. SSE2
        
       | eigenvalue wrote:
       | If you absolutely want to prevent a Mac from not only going to
       | sleep, but restarting for any reason at all (say, to install
       | important security updates, which are usually forced on the user
       | with no choice), there aren't many good ways. The only thing I've
       | found that really works reliably is to open MS Word, create a new
       | document, add some random characters to it, and then leave
       | without ever saving. Word will prevent the OS from doing anything
       | that would cause you to lose that unsaved document. I'm sure the
       | MS engineers dug deep into the kernel to find something
       | foolproof. It's a bit annoying that Apple doesn't give you a
       | little switch like that which you could toggle to say "don't
       | restart for any reason at all".
        
         | vulcan01 wrote:
         | Amphetamine[0] works pretty well for me. They also have an
         | extension (a kext, I think) that gives it more reliability. I
         | don't know how reliable it is without that extension though.
         | 
         | [0]:
         | https://apps.apple.com/us/app/amphetamine/id937984704?mt=12
        
           | adamomada wrote:
           | I've been using the more bare-bones KeepingYouAwake[0] just
           | because I came across Caffeine first and this was suggested
           | as the continuation of that simple utility. The icon makes it
           | obvious whether it is enabled or disabled
           | 
           | Edit: I see now that Amphetamine has the option of a similar-
           | looking icon to make it more obvious whether it is enabled or
           | not
           | 
           | [0] https://github.com/newmarcel/KeepingYouAwake
           | 
           | (My first HN comment, via Orion Browser)
        
         | Destiner wrote:
         | I've been using 10 hour videos of black screen with success.
        
         | StrangeSound wrote:
         | You can also do this in the browser, using the beforeunload
         | event
         | 
         | https://developer.mozilla.org/en-US/docs/Web/API/Window/befo...
        
         | huseyinkeles wrote:
         | Same thing happens with JetBrains IDEs. I usually set my Mac to
         | update after midnight but usually find it got stuck with the
         | IDE asking "are you sure you want to quit?"
        
           | keyle wrote:
           | "This application prevented shutdown..."
        
       | boo-ga-ga wrote:
       | Very cool, and looks slick!
        
       | taftster wrote:
       | So I like this and I'm trying it out, it seemingly works OK.
       | 
       | However, the GREEN background is very annoying. I don't need the
       | whole webpage to be green for me to know it's on and working. I
       | can't minimize the browser (firefox) because then it apparently
       | doesn't work. So I'm left with a very big green screen sitting in
       | the corner of my eye. Wondering too the effect of that in terms
       | of screen color burnout (if that's even a thing anymore).
       | 
       | I would definitely recommend to tone down the color scheme. Stay
       | away from green. Just go with grey and darker grey or black for
       | your on/off schemes, including inside of the slider button.
       | 
       | My use case is that I have the "nosleep" computer on the side of
       | my desk. It catches IM/chat messages (from Teams, etc.) and email
       | (from Outlook). I don't like my primary development machine
       | bothered by these notifications, but I do like having that
       | machine "awake" and alert to chat/email notifications (and I
       | can't (or shouldn't) change the default policies on that
       | machine).
        
         | JadeNB wrote:
         | > I can't minimize the browser (firefox) because then it
         | apparently doesn't work.
         | 
         | Can't you have a separate, tiny window?
        
           | throwanem wrote:
           | MDN (linked from the page under discussion) says Firefox
           | doesn't expose this API, so I feel like window configuration
           | may be a side issue here.
        
         | ghotli wrote:
         | I'm confused, kinda. If you want it to be a different color
         | just alter the color?
         | 
         | Lots of ways to attack that, host it yourself, change it with
         | chrome dev tools, a bookmarklet that alters the css, user
         | scripts for css overrides like greasemonkey popularized back in
         | the early days of the web. Hope this helps you get the color
         | you'd like :)
        
       | achairapart wrote:
       | Simple and potentially useful but I think that nosleep.js itself
       | uses the Screen Wake Lock API when available, so maybe it's still
       | overkill using it just as a fallback and writing other code on
       | top of it.
       | 
       | Besides, it's a shame that iOS still doesn't support this API.
       | The video-hack has too many drawbacks and this feature would be
       | very useful for a certain kind of PWAs.
        
       | justusthane wrote:
       | This looks cool! It would be nice if there was a little more info
       | on the page about how it works and any potential limitations. For
       | example, does the page have to remain in the foreground? And if
       | it does work in the background, will it still work if the browser
       | unloads the page from memory?
        
         | bradleyjkemp wrote:
         | Oh, 100% I need some more docs on the page: it's definitely not
         | foolproof.
         | 
         | From my testing, it works even if the window is in the
         | background somewhere but generally it stops working if you
         | switch to a different tab within the same window.
         | 
         | You should get a popup though if you do something that causes
         | the page to lose its Wake Lock (which works by listening to the
         | release event: https://developer.mozilla.org/en-
         | US/docs/Web/API/Screen_Wake...)
        
       | bogota wrote:
       | This is awesome my work computer has a stupid 5 minute setting
       | until it sleeps that is locked.
        
         | robbedpeter wrote:
         | Deliberately bypassing that puts your employment at risk.
         | There's a reason you're being forced to log in.
        
           | TobyTheDog123 wrote:
           | If an employer is going to fire you for running caffeinate
           | while presumably working from home (if you're leaving your
           | laptop alone and unlocked in a public space God help you),
           | maybe it's time to look for a new job :)
        
         | oneweekwonder wrote:
         | playing something in windows media player also keep it open, or
         | running a powershell script that presses F13 or scroll lock
         | also works.
        
       | addsubtract wrote:
       | My work resets my Mac sleep timer settings on reboot or update.
       | This is very annoying for maintaining persistent connections to
       | servers, such as my development machine. I wrote a simple Python
       | script to move my mouse pointer by 1-5 pixels at random
       | intervals. Works great, and it always looks like I'm online for
       | prying eyes in Slack.
        
       | dolmen wrote:
       | Does it really need to be 12 Kb of obfuscated JS+CSS?
       | 
       | That seems huge for the task.
        
         | GlitchMr wrote:
         | Most of the JavaScript is two empty videos encoded in WebM or
         | MP4, encoded using Base64 to be stored in plain text, and
         | picked depending on what the web browser supports. Considering
         | I doubt that video formats are designed with empty videos in
         | mind, this is probably not too bad. As for why videos are here,
         | they are a fallback in case web browser doesn't provide Screen
         | Wake Lock API (in particular, Safari and Firefox don't).
        
       | karussell wrote:
       | As Firefox (& I think Safari too) does not support the
       | ScreenWakeLock API are you using NoSleep.js?
       | https://github.com/richtr/NoSleep.js
       | 
       | This library implements a hack and plays a very tiny video in a
       | loop too. This should even work on mobile devices and (according
       | to my personal&tiny tests) is not that inefficient as it sounds
       | :)
        
         | pdxandi wrote:
         | Are we seeing different sites when you click on the link?
         | Because that is literally all the landing page says.
         | This tiny site uses the Screen Wake Lock API to prevent your
         | device from sleeping.              Where this API isn't
         | supported, an empty silent video is played to emulate this
         | behaviour (using NoSleep.js).
        
           | karussell wrote:
           | I obviously missed the NoSleep.js at the end ... but then I
           | wonder: what is then so special about this website?
        
             | _trampeltier wrote:
             | The idea. A lot of company computers have autolock on, just
             | an example.
        
             | spiderice wrote:
             | It prevents your computer from sleeping with just a
             | webpage. Why does it need to be more special than that?
        
               | rzzzt wrote:
               | I think karrussell is talking about the live demo linked
               | from NoSleep.js' project page:
               | https://richtr.github.io/NoSleep.js/example/
        
               | karussell wrote:
               | I meant that nosleep.page is basically the example page
               | from NoSleep.js hosted on the internet...
        
         | [deleted]
        
       | mrep wrote:
       | Why not just use keep awake?
       | 
       | https://chrome.google.com/webstore/detail/keep-awake/bijihla...
        
         | tailspin2019 wrote:
         | Why not just use nosleep.page?
         | 
         | https://nosleep.page
        
         | 40four wrote:
         | I can think of a few reasons. Looking at that page, the
         | extension seems to only be compatible with Crome OS. A pretty
         | limited audience can use that.
         | 
         | Also, I assume this is a pet project of the author. They had a
         | need, and found a way to solve it. They probably had fun, and
         | learned some things along the way. Often, that's kind of the
         | whole point of a weekend project.
         | 
         | Even if there is another established solution, 'Why not just
         | ... some other thing' isn't great feedback. Discovering
         | people's ideas and projects is one of the beautiful things
         | about HN.
         | 
         | This is a perfect example. I didn't even know the Screen Wake
         | Lock API existed, so I learned something new!
        
           | mrep wrote:
           | It has worked on every OS that has chrome that I have used
           | and takes like 30 seconds to install. It is easier to click a
           | chrome extension to stay awake than go to a webpage in my
           | opinion.
           | 
           | You do you though
        
       | causality0 wrote:
       | Interesting. The various customizations Asus makes with its
       | gaming software on my laptop somehow stops the PowerToys keep-
       | awake utility from functioning as intended. I wonder if this page
       | will do the trick.
        
       | flakiness wrote:
       | FYI: There is also a Chrome extension doing similar thing:
       | https://chrome.google.com/webstore/detail/keep-awake/bijihla...
        
       | singlow wrote:
       | So i get annoyed that my computer doesn't go to sleep sometimes
       | because some website is playing a video. Is there a simple way to
       | tell Linux/Gnome/Chrome to ignore videos and go to sleep anyway?
       | I don't watch long videos on this computer so I hate to come back
       | into my office and find my screen never locked because some
       | website played a video i wasn't even watching.
        
         | bryans wrote:
         | I think the best option would be an extension that disables
         | autoplay across the board. There are many out there, though all
         | flawed in their own way. The least worst for Chrome seems to be
         | AutoplayStopper.
        
         | rsoto wrote:
         | Additionally, something to tell me whether my PC will go to
         | sleep or not if left alone. OP's problem happens to me every so
         | often that I need to make sure the PC is indeed going to sleep
         | before heading out.
        
           | Firmwarrior wrote:
           | I think on Windows you can run powercfg /requests
           | 
           | I'm not sure about linux or Mac though
        
           | monkeybutton wrote:
           | Nothing like packing up your laptop at the end of the day,
           | clicking "sleep" and wondering if it actually will cooperate
           | or if you have open it back up and close random tabs and
           | programs till it does,then waiting for the fan to audibly
           | stop before putting it into a bag!
        
         | zinekeller wrote:
         | Firefox (at least in Windows) does allow sleep when there's a
         | no-audio video.
        
       | ognarb wrote:
       | This is a standard functionality in kde plasma in the system
       | tray.
        
         | mxuribe wrote:
         | Sorry, i'm a kde user but not sure how this would be done...?
         | Would you kindly provide details, or a link to a how to?
        
         | meibo wrote:
         | In the XFCE power menu, this is called "presentation mode",
         | works just as well
        
       | Minor49er wrote:
       | Using this on Firefox for Android causes the application icon and
       | header bar notifications to blink as long as it's enabled. I
       | don't think there's anything the developers could do about that
       | though
        
       | serf wrote:
       | nosleep.js brings firefox from ~3% cpu usage to ~25-30% cpu
       | usage. (it's playing an invisible video)
       | 
       | that's a pretty steep cost to pay to simply keep a computer awake
       | because the browser it's using doesn't support a 'stay-awake
       | api'.
        
         | pessimizer wrote:
         | Or rather because the OS you're using doesn't think you're
         | responsible enough to have that kind of control over your own
         | computer.
         | 
         | edit: Ah, I misunderstood. This is for your highly locked down
         | work computer.
        
         | yyahh wrote:
         | Indeed, how awful.
        
       | gabrielsroka wrote:
       | Thanks for sharing this.
       | 
       | I've seen it on some recipe websites recently and was wondering
       | how it worked.
       | 
       | I would recommend making the links (eg to the Mozilla page) use a
       | different color or underlined.
        
         | bradleyjkemp wrote:
         | Yup, that's my bad CSS I'm afraid. https://bulma.io explicitly
         | resets the color of <a> tags inside a hero, so I need to figure
         | out how to stop/override that
        
           | pkage wrote:
           | The "bulma" way would be to add the `has-text-link` class to
           | the <a> tag [0], which has the benefit of matching your
           | styles as well.
           | 
           | [0] https://bulma.io/documentation/helpers/color-helpers/
        
             | bradleyjkemp wrote:
             | Ah neat, yeah that's exactly what I need, thanks!
        
           | gabrielsroka wrote:
           | One or the other or both of these                 <a
           | href="https://developer.mozilla.org/en-
           | US/docs/Web/API/Screen_Wake_Lock_API" style="text-decoration:
           | underline; color: blue;">Screen Wake Lock API</a>
        
       | catsarebetter wrote:
       | I just turn zoom on
        
       | hoistbypetard wrote:
       | Can this web page keep my computer awake without me explicitly
       | giving it permission? I don't really like that, and would like to
       | tell my browser not to allow it.
        
       | velcrovan wrote:
       | On macOS just run `caffeinate` from the terminal (or `man
       | caffeinate` for more info on the options).
       | 
       | I know OP copped to "various Caffeine/Amphetamine apps" but said
       | they're often "overkill". In this case I think a system-provided
       | command is less overkill than a web page that either uses a
       | browser API or plays an empty video.
        
         | [deleted]
        
         | reidjs wrote:
         | For some reason caffeinate doesn't keep my computer awake
         | (newish macbook pro)
        
           | Tao331 wrote:
           | I've been using a Zoom meeting of just myself, locked, audio
           | and camera off. Worked like a charm when I needed to
           | discharge a swelling battery.
        
           | tomstuart wrote:
           | You might need `caffeinate -d` to prevent the display from
           | sleeping.
        
             | jen729w wrote:
             | While this does work, I agree with OP here. The man page
             | for caffeinate says that it prevents system sleep and, as
             | far as I can tell, it does not do that on my M1 MBP using
             | Monterey.
             | 
             | I do a `caffeinate -d` and then throw my mouse to a hot
             | corner to activate the screen saver.
        
         | SteveDR wrote:
         | Does this stay on indefinitely? I don't like using the command
         | line to enable settings that I only need for an hour or so. I
         | often forget to turn them off.
         | 
         | I like that OP's site turns keeps my machine awake while it's
         | open, and I can just close the tab when I want my machine to
         | behave normally.
        
           | latexr wrote:
           | > Does this stay on indefinitely?
           | 
           | If you want. If you don't, use the `-t` flag for it to turn
           | off after a set number of seconds or `-w` to do so after a
           | specific process ends.
        
             | lambdaba wrote:
             | The more unixy way is probably `timeout <seconds>
             | caffeinate` :)
        
               | bajsejohannes wrote:
               | Or `caffeinate sleep <seconds>` which has the (only)
               | added benefit that it comes pre-installed with MacOS
        
           | jcynix wrote:
           | I regularly use "caffeinate rsync ..." to make sure that
           | syncing finishes before the Macbook is allowed to sleep. So
           | caffeinate just prevents sleeping until rsync terminates.
           | 
           | You can tell caffeinate to watch for other processes too, to
           | make sure a browser thread doing a download will finished
           | uninterrupted before sleeping.
        
       | alloai wrote:
       | with text file saved as .bat file ` @echo off
       | 
       | powercfg.exe -x -monitor-timeout-ac 5 powercfg.exe -x -disk-
       | timeout-ac 180 powercfg.exe -x -standby-timeout-ac 180
       | powercfg.exe -x -hibernate-timeout-ac 999
       | 
       | `
        
         | gabrielsroka wrote:
         | https://news.ycombinator.com/formatdoc                 @echo
         | off       powercfg.exe -x -monitor-timeout-ac 5
         | powercfg.exe -x -disk-timeout-ac 180        powercfg.exe -x
         | -standby-timeout-ac 180        powercfg.exe -x -hibernate-
         | timeout-ac 999
        
       | robbedpeter wrote:
       | Yeah, let's make it harder for the people who have to clean up
       | after security incidents. The automatic logout policies are there
       | for a reason. Bypassing that means one day, somebody's going to
       | forget and leave an important workstation open for a passersby or
       | malicious actor.
       | 
       | If it's _that_ inconvenient, talk with your IT people and make a
       | case for changing it. If you use stuff like this, I hope you get
       | shitcanned.
        
         | A4ET8a8uTh0 wrote:
         | Eh, I hear you and I understand the concern, but.. some very
         | corporate jobs have very corporate ITs with their hands tied by
         | policy that makes exceptions truly exceptional.
         | 
         | I was going to provide a more recent anecdote, but decided
         | against since it was a little too specific.
        
       | viggity wrote:
       | this is baller. I'd love an option that was like "keep awake for
       | [hours] [minutes]"... or "keep awake until [time]" so that it
       | could look like i was online until say 6:18pm
        
       ___________________________________________________________________
       (page generated 2022-04-22 23:00 UTC)