XScreenSaver 5.45

XScreenSaver 5.45 is out now, including iOS and Android.

Second release this month! The previous release came out on March 20th, and now it's only March 283rd.

  • New hacks, covid19, headroom, sphereeversion and beats.
  • Shader updates to hypertorus.
  • No more image-loading pause in glslideshow.
  • BSOD supports GNOME.
  • Image loaders support SVG.
  • macOS: Fixed text loading on 10.15.
  • X11: xscreensaver-systemd now allows video players to request that the screen not blank.
  • X11: Glade → GtkBuilder.
  • Android: These hacks work now: carousel, juggler3d, molecule, photopile, polyominoes.
  • Various bug fixes.

I only personally wrote two savers since the plague began. Usually my business going poorly results in more savers, but not this time.

I've wanted to make a Max Headroom screen saver for years, but -- and this is shocking to me -- I could not find a 3D model of Max's head anywhere on the interwebs. Then finally one day I found one! And it was great! Really faithful, and even a reasonable number of polygons. But the guy who made it won't let me use it. I even offered to pay.

So finally I said fuck it, I guess we get Skull Headroom. Maybe this being out there will give someone the incentive to make me a real Max model. Do you have the skill to make one? Or do you have the tech to scan a 3D model from MP4s of the TV show? Lemme know. I very much look forward to replacing the skull.


    Thanks very much to Martin Lucina for leading the way on the systemd integration. I hope that this results in me getting a lot less email.

    For decades, the traditional way for a video player to temporarily inhibit the screen saver was to have a heartbeat command that ran "xscreensaver-command -deactivate" once a minute while the video was playing, and ceased when the video was paused or stopped. The reason to do it as a heartbeat rather than a toggle is so that the player fails SAFE -- if the player exits abnormally, the heart stops beating, and screen saving and locking resumes.

    "Fail safe" is just the most basic of all basic engineering techniques. I shouldn't even have to say this out loud.

    These days, the popular apps try to inhibit blanking by talking to "systemd". The design of the systemd method easily and trivially allows an app to inhibit the screen saver, crash, and then never un-inhibit it, so now your screen will never blank again.

    Furthermore, since the systemd method uses cookies to ensure that only the app that sent "inhibit" can send the matching "uninhibit", simply re-launching the crashed video player does not fix the problem.

    "Did IQs just drop sharply while I was away?" -- Ellen Ripley

    So here's what we're dealing with now, with the various apps you might use to play video on Linux at the end of 2020:

    • Firefox, Chrome, Chromium:
      If they crash or are killed while playing, they leave the screen saver permanently inhibited. They need signal handlers.

      If systemd's sd_bus_creds_get_pid() worked, I could work around this, but it doesn't so I can't.

    • Firefox, Chromium, MPV:
      Playing audio-only inhibits screen blanking. This is horrible. Playing audio should prevent your machine from going to sleep, but it should not prevent your screen from blanking or locking.

    • MPlayer:
      I can't get this weird WinAmp clone to play video at all (it plays them as audio) so who knows what it does.

    • VLC:
      The only one that appears to do everything right!


    There hasn't been much progress recently on the remaining systemic Android bugs. I could use some help with that from anyone with Android experience. The bugs are listed in detail in android/README, but an overview:

    • Rotation is wonky (on some devices?)
    • Deprecation warnings about android.preference, MediaColumns, MediaStore, etc.
    • Grabbing an image of the screen doesn't work.
    • Rendering text into pixmaps doesn't work. Affects 4 savers.
    • Rendering text into textures doesn't work, possibly because of the above, or because retrieving the GL_TEXTURE_MATRIX doesn't work. Affects 24 savers.
    • Retrieving GL_MODELVIEW_MATRIX doesn't work. Affects 7 savers.
    • Pixmap masks don't work. Affects 6 savers.
    • Complex polygon fills don't work. Affects 4 savers.
    • Alpha blending doesn't seem to work. Affects 3 savers.

Two Minutes Hate, Apple Edition:

    I'm still running macOS 10.14.6 because I'm not a crazy person, and guess what! That means that I can no longer install a development version of xscreensaver on my own damned phone! My phone is running iOS 14.2 but the most recent Xcode that I can install on my Mac is 11.3.1, and they won't talk to each other.

    I think that this also means that I barely dodged the bullet of not being able to do a build for distribution in the App Store at all. You can't submit builds that were made against the "Simulator" target, they have to be against a real, physical device. Fortunately my iPad is ancient and the latest iOS released for it is 12.4.5, so I was able to do my build against that.

    All of this also means that these macOS builds are still x86, since my version of Xcode won't emit M1 code. So if you're running this on the new fancy, you'll need Rosetta 2 installed. (I tried to make it so that the dialog nagging you about that will pop up when you run the installer, instead of it waiting until the first time a screen saver is launched, but I'm not sure if that worked. Let me know.)

    I tested image loading and text loading (phosphor, etc.) on both 10.15 and 11.0.1 and it worked for me, but I've had people complain about that with the previous release, so lemme know about that, too.

Make that Four Minutes Hate:

    5.45 Binary Rejected
    Guideline 1.1 - Safety - Objectionable Content

    We found that your app includes content or concepts that some users may find upsetting, offensive, or otherwise objectionable.

    Specifically, your entertainment or gaming app inappropriately references the COVID-19 pandemic in the metadata or binary. Entertainment or gaming apps that directly or indirectly reference the COVID-19 pandemic in any way are not appropriate for the App Store.

    Next Steps

    While your app's current content or concept is not appropriate for the App Store, we would welcome a new app from you in alignment with our App Store Review Guidelines that is not focused on or related to the COVID-19 pandemic.


    For additional information regarding Apple's response to the COVID-19 pandemic, please refer to the Ensuring the Credibility of Health & Safety Information update on the Apple Developer website.

    Please see attached screenshots for details.

    These attachments may display potentially objectionable content, such as nudity, pornography, and profanity.


    I tried renaming it to "Co____9" and changing the description to "This is fine", hoping that spinning the wheel would get me a different reviewer from whatever third world call center handles such things, but that trick didn't work. So no iOS COVID for you.

    Update, April 1, 2021: I re-added the "Co____9" saver to the iOS version of 6.00 and they didn't notice this time. Oh no, oh no, so sad for them!

Tags: , , , , , , , ,