<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/blog/rss.xsl" type="text/xsl" media="screen" ?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>xscreensaver - jwz</title>
	<atom:link href="https://cdn.jwz.org/blog/tag/xscreensaver/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.jwz.org/blog/</link>
	<description></description>
	<lastBuildDate>Thu, 09 Apr 2026 09:45:38 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/>
<atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>
<atom:link rel="hub" href="https://websubhub.com/hub"/>
<atom:link rel="self" href="https://cdn.jwz.org/blog/tag/xscreensaver/feed/"/>
	<item>
		<title>Important XScreenSaver policy update</title>
		<link>https://www.jwz.org/blog/2026/04/important-xscreensaver-policy-update/</link>
					<comments>https://www.jwz.org/blog/2026/04/important-xscreensaver-policy-update/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Thu, 09 Apr 2026 09:45:38 +0000</pubDate>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yk56</guid>

					<description><![CDATA[25:

No contributions built with, or assisted by, LLMs or any kind of "generative AI" tools will be considered. If you didn't bother writing it, I'm not going to bother reading it. XScreenSaver is art by humans for humans.]]></description>
										<content:encoded><![CDATA[<A HREF="https://www.jwz.org/xscreensaver/faq.html#writing-savers">25:</A> <P><BLOCKQUOTE STYLE="margin: 1em 0 1em 1.5em; padding: 0.75em 0.5em 0.75em 1em; border: 1px solid; border-left: 4px solid;">No contributions built with, or assisted by, LLMs or any kind of "generative AI" tools will be considered. If you didn't bother writing it, I'm not going to bother reading it. XScreenSaver is art by humans for humans.</BLOCKQUOTE>]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2026/04/important-xscreensaver-policy-update/feed/</wfw:commentRss>
			<slash:comments>49</slash:comments>
		
		
			</item>
		<item>
		<title>XScreenSaver 6.15</title>
		<link>https://www.jwz.org/blog/2026/03/xscreensaver-6-15/</link>
					<comments>https://www.jwz.org/blog/2026/03/xscreensaver-6-15/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Tue, 31 Mar 2026 01:15:32 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[maps]]></category>
		<category><![CDATA[mpegs]]></category>
		<category><![CDATA[phones]]></category>
		<category><![CDATA[space]]></category>
		<category><![CDATA[wiki]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yk5c</guid>

					<description><![CDATA[XScreenSaver 6.15 is out now, including iOSand Android. A whopping thirteen new savers this time:

New hack by me, worldpieces.
New Shadertoy hacks brought into the fold: bestill, bubblecolors, darktransit, downfall, driftclouds, goldenapollian, noxfire, prococean, rigrekt, ...]]></description>
										<content:encoded><![CDATA[<A HREF="https://www.jwz.org/xscreensaver/"><IMG SRC="https://cdn.jwz.org/xscreensaver/logo.png" STYLE="width: 20%; height: auto; max-width: 600px; max-height: 600px; border: 0; box-sizing: border-box; margin: 0 0 1em 1em; float: right; clear: right;" SRCSET="https://cdn.jwz.org/xscreensaver/logo.png 600w, https://cdn.jwz.org/xscreensaver/logo.png 360w" SIZES="(max-width: 660px) 20vw, 15em" LOADING="lazy" data-size="600x600" WIDTH="600" HEIGHT="600"></A> <A HREF="https://www.jwz.org/xscreensaver/">XScreenSaver 6.15</A> is out now, including <A HREF="https://itunes.apple.com/app/xscreensaver/id539014593?mt=8">iOS</A> <!-- <I>(soon)</I> --> and <A HREF="https://www.jwz.org/xscreensaver/download.html">Android</A>. A whopping <I>thirteen</I> new savers this time: <P><UL> <LI> New hack by me, <B>worldpieces</b>. </LI><LI> New Shadertoy hacks brought into the fold: <B>bestill</B>, <B>bubblecolors</B>, <B>darktransit</B>, <B>downfall</B>, <B>driftclouds</B>, <B>goldenapollian</B>, <B>noxfire</B>, <B>prococean</B>, <B>rigrekt</B>, <B>trainmandala</B>, <B>trizm</B> and <B>universeball</B>. </LI></UL> <P>Shadertoys are so wild; you'll see like 30 lines of code, and when it runs it build an <I>entire environment</I> without there being a polygon or a model apparent anywhere. <I>What witchcraft is this??</I> Well, here's a really good article that explains the techniques used: <A HREF="https://blog.maximeheckel.com/posts/painting-with-math-a-gentle-study-of-raymarching/">Painting With Math: A Gentle Study of Raymarching.</A> <P>I fixed a bunch of Android bullshit, too (some of which meant needing to reimplement <tt>glRotatef</tt> etc. from first principles). Android's implementation of GLES is a buggy mess. Also I think Android has again lost the ability to ask for permission to load photos. I can't figure it out, so someone who gives a shit will have to send me a patch. I also still can't figure out why <A HREF="https://www.jwz.org/blog/2026/03/gles-1-x-transparency/">transparency doesn't work on Android</A>. This makes <B>Peepers</B> be particularly horrifying. <P><B>Map Scroller:</B> I updated the list of available maps, and made it show the name of the nearest city. One of the new map sets that works is the Google Satellite Map, and if you have two monitors, I highly recommend running that map in "Fully random location" mode. It has a habit of picking two places many thousands of miles apart that look surprisingly similar, like Greenland and Syria. <P><DIV STYLE="text-align: center; width: 65%; max-width: 640px; margin: 0 0 1em 1em; float: right;"><DIV STYLE="display: inline-block; margin: 2px; width: 100%;" STYLE=" margin-bottom: 0.5em"><DIV STYLE="overflow: hidden; position: relative; padding-bottom: 56.25%; display: inline-block; width: 100%;" STYLE="padding-bottom: 56%"><A HREF="https://www.youtube.com/view_play_list?p=PLbe67PprBSpqM_-HU49fmIS8ncApw4i08" ONCLICK="return popup_video(this)"><DIV STYLE="position: absolute; top: 0; left: 0; border: 0; margin: 0; padding: 0; z-index: 1; width: 100%; height: 100%;" STYLE="background-image: url('https://cdn.jwz.org/images/2026/3sv3-uqi5ve.jpg')"><DIV ><DIV >&#x25B6;&#xFE0E;</DIV></DIV></DIV></A></DIV></DIV></DIV> Boy do I have a lot to say about <B>World Pieces:</B> <P>This one took so much time! Most of my screensavers are pretty quick; generally they'll percolate in my head for a while, then I do the first 90% in half a day, and then the second 90% in another half day to two days. But this one was composed <I>entirely of ratholes</I>. <P><OL> <LI> Oh, first I have to find some sane way to get the country outlines. That means learning about <A HREF="https://en.wikipedia.org/wiki/GeoJSON">GeoJSON</A> and getting the proper data set from <A HREF="https://www.naturalearthdata.com/downloads/50m-cultural-vectors/">Natural Earth Data</A>. Then that data has to be massaged and merged, and while there's probably some command-line way to do that, using <A HREF="https://mapshaper.org/">mapshaper.org</A> was easier. <P></LI><LI> Now I've got a bunch of polylines with weird "hole" rules (not winding-rule!) and I need to triangulate them. Next rathole: learning how to use <A HREF="http://www.cs.cmu.edu/~quake/triangle.html">triangle.c correctly</A>. <P></LI><LI> Then I notice that while the GeoJSON has population data for countries, it does not for states and provinces. Ok, that should be easy to grab from Wikipedia, right? Next rathole: learning about <A HREF="https://query.wikidata.org/">SparQL</A>, the <A HREF="https://www.wikidata.org/wiki/Wikidata:SPARQL_tutorial">Wikidata query language</A>. It is one of the <I>nastiest</I> and most baffling query languages I've seen. Good job on that. <P></LI><LI> Then I realize that while the GeoJSON contains the names of the countries translated into various languages, it doesn't tell you which ones are the official languages! Next rathole! Ok, surely we can get that from Wikidata too... Nope. While the Wiki<U>pedia</U> pages contain the endonyms in the local character set, the Wiki<U>data</U> items only have them transliterated into Latin characters. To fix that, I had to scrape the Wikipedia page and parse the Wiki markup using regexps, dooming us to inhuman toil, etc. etc. Anyway, I got it working so that Japan can be spelled &#x65E5;&#x672C;... <P></LI><LI> ...on macOS, iOS and Android. Why doesn't it work on Linux? Oh ho ho ho, <A HREF="https://www.jwz.org/blog/2026/03/linux-xft-unicode-fonts/">another rathole</A>, this one un-solved! So on Linux it notices when all of the characters came out as square boxes and falls back to the transliterated Latin versions. You're welcome. <P></LI><LI> Ok, it's starting to come together. But since I'm zooming in a lot, the Earth imagery is looking a little grainy, since the image I have is 2048x1024. Well let's just go upgrade that. Next rathole! The old images I had were from the public domain 2002 <A HREF="https://web.archive.org/web/20120107191339/https%3A//visibleearth.nasa.gov/view.php?id=57730">NASA "Blue Marble" images</A> and 2000 <A HREF="https://web.archive.org/web/20111120102136/https%3A//visibleearth.nasa.gov/view.php?id=55167">"Visible Earth, City Lights" images</A> none of which still exist on NASA's site (all praise archive.org!) <P>They seem to have deprecated those data sets in favor of the 2025 <A HREF="https://science.nasa.gov/earth/earth-observatory/blue-marble-next-generation/base-map/">"Blue Marble: Next Generation" images</A> and the 2012 <A HREF="https://science.nasa.gov/earth/earth-observatory/earth-at-night/maps/">"Black Marble" images</A>. But... they're weird. First, both sets of images completely omit the North polar ice. Second, the 2025 daytime oceans are colored completely flat, whereas the 2002 images contained bathymetry details. And third, and worst of all, is no pairing of 2025 day images and 2016 night images where the pair have the same ice extents. This means that when we blend between the day and night images, it looks very weird. It took me days to finally accept that there was nothing that I could do to work around that. <P></LI><LI> So now that those various ratholes are out of the way, it's trigonometry time. The way the countries pop up and face forward toward whereever the camera is a technique called "billboarding" and it's pretty easy. But what's not easy is doing a smooth transition <I>between</I> the object being billboarded, and the object being back in the scene. Especially since it's position in the scene is spinning and wobbling about willy-nilly. (Remember, you can also spin the globe with the mouse, and it has to keep track of that as well!) <P></LI><LI> So the final rathole was finally coming to terms with quaternions. Quaternions and I have had a passing acquaintance for many years, but I finally had to get down and dirty and <I>really understand them</I> to make all of this work. <P>Wikipedia describes quaternions as: <P><BLOCKQUOTE STYLE="margin: 1em 0 1em 1.5em; padding: 0.75em 0.5em 0.75em 1em; border: 1px solid; border-left: 4px solid;"> Quaternions form a four-dimensional associative normed division algebra over the real numbers, and therefore a ring, also a division ring and a domain. It is a special case of a Clifford algebra, classified as <NOBR>Cl&#x2080;,&#x2082;(&#x211D;)&cong;Cl&#x207A;&#x2083;,&#x2080;(&#x211D;).</NOBR> According to the Frobenius theorem, the algebra &#x210D; is one of only two finite-dimensional division rings containing a proper subring isomorphic to the real numbers; the other being the complex numbers. </BLOCKQUOTE> <P>"I did not understand a math thing, and then I read the Wikipedia article on it, and now I understand the math thing" -- said <B><I>literally no one ever.</I></B> As far as I can tell, every math article on Wikipedia is written with the target audience of "person who wrote their grad school thesis on it" and no one else. Wikipedia's math articles are absolutely fucking useless for purposes of, you know, <I>education.</I> <P>Anyway, <A HREF="https://www.youtube.com/watch?v=d4EgbgTm0Bg">3Blue1Brown has a good intro video</A> that is not like that! <P>By the way, I propose that "Quaternions" should be pronounced like extruded cornmeal toroid "Funyuns". </LI></OL> <P><A HREF="https://www.jwz.org/blog/2026/01/xscreensaver-6-14/">Previously</A>, <A HREF="https://www.jwz.org/blog/2026/03/gles-1-x-transparency/">previously</A>, <A HREF="https://www.jwz.org/blog/2026/03/linux-xft-unicode-fonts/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2026/03/xscreensaver-6-15/feed/</wfw:commentRss>
			<slash:comments>91</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/xscreensaver/logo.png" width="600" height="600" length="26938" type="image/png"/>
<enclosure url="https://cdn.jwz.org/images/2026/3sv3-uqi5ve.jpg" length="7033" type="image/jpeg"/>
	</item>
		<item>
		<title>GLES 1.x transparency</title>
		<link>https://www.jwz.org/blog/2026/03/gles-1-x-transparency/</link>
					<comments>https://www.jwz.org/blog/2026/03/gles-1-x-transparency/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Sat, 28 Mar 2026 05:48:50 +0000</pubDate>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[lazyweb]]></category>
		<category><![CDATA[phones]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yk5Y</guid>

					<description><![CDATA[Dear Lazyweb, why doesn't alpha blending work when lighting is enabled on Android? Transparency works with glColor but not with glMaterial.

GL_VERSION in the Android simulator is "OpenGL ES-CM 1.1 (4.1 Metal - 88.1)".

This works fine on iOS and Cocoa, so it's not strictly ...]]></description>
										<content:encoded><![CDATA[Dear Lazyweb, why doesn't alpha blending work when lighting is enabled on Android? Transparency works with <tt>glColor</tt> but not with <tt>glMaterial</tt>. <P><tt>GL_VERSION</tt> in the Android simulator is "OpenGL ES-CM 1.1 (4.1 Metal - 88.1)". <P>This works fine on iOS and Cocoa, so it's not strictly a GLES thing, just Android. GLSL is not involved. <P>Test case: <P><pre style="border:1px solid; padding: 1em; margin: 1em; font-size: smaller; overflow: auto; max-height: 10em;">Bool lights_p = time(0) &amp; 1; glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable (GL_BLEND); glDisable (GL_COLOR_MATERIAL); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); #define glColor4fv(v) glColor4f (v[0], v[1], v[2], v[3]) GLfloat c1[] = { 1, 0, 0, 0.5 }; GLfloat c2[] = { 0, 1, 0, 0.5 }; GLfloat v[] = { 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, }; glVertexPointer (3, GL_FLOAT, 0, v); glEnableClientState (GL_VERTEX_ARRAY); if (lights_p) { GLfloat amb[] = {0.5, 0.5, 0.5, 1}; glLightfv (GL_LIGHT0, GL_AMBIENT, amb); glEnable (GL_LIGHTING); glEnable (GL_LIGHT0); glColor3f (0, 0, 0); } else { glDisable (GL_LIGHTING); glDisable (GL_LIGHT0); } if (lights_p) glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, c1); else glColor4fv (c1); glDrawArrays (GL_TRIANGLES, 0, 6); glPushMatrix(); glTranslatef (0.5, 0.25, 0); if (lights_p) glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, c2); else glColor4fv (c2); glDrawArrays (GL_TRIANGLES, 0, 6); glPopMatrix(); glDisableClientState (GL_VERTEX_ARRAY); glVertexPointer (3, GL_FLOAT, 0, 0);</pre>]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2026/03/gles-1-x-transparency/feed/</wfw:commentRss>
			<slash:comments>20</slash:comments>
		
		
			</item>
		<item>
		<title>Globes</title>
		<link>https://www.jwz.org/blog/2026/03/globes/</link>
					<comments>https://www.jwz.org/blog/2026/03/globes/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Tue, 17 Mar 2026 19:14:48 +0000</pubDate>
		<category><![CDATA[balls]]></category>
		<category><![CDATA[maps]]></category>
		<category><![CDATA[mpegs]]></category>
		<category><![CDATA[retrocomputing]]></category>
		<category><![CDATA[space]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yk4k</guid>

					<description><![CDATA[People used to have to assemble screen savers by hand!]]></description>
										<content:encoded><![CDATA[People used to have to assemble screen savers <I>by hand!</I> <P><DIV STYLE="text-align: center; width: 100%; max-width: 640px; margin: 0 auto;"><DIV STYLE="display: inline-block; margin: 2px; width: 100%;" STYLE=" margin-bottom: 0.5em"><DIV STYLE="overflow: hidden; position: relative; padding-bottom: 56.25%; display: inline-block; width: 100%;" STYLE="padding-bottom: 56%"><A HREF="https://www.youtube.com/watch?v=4RWcWSN4HhI" ONCLICK="return popup_video(this)"><DIV STYLE="position: absolute; top: 0; left: 0; border: 0; margin: 0; padding: 0; z-index: 1; width: 100%; height: 100%;" STYLE="background-image: url('https://cdn.jwz.org/images/2026/4rwcwsn4hhi.jpg')"><DIV ><DIV >&#x25B6;&#xFE0E;</DIV></DIV></DIV></A></DIV></DIV> <P><A HREF="https://www.jwz.org/blog/2016/12/many-stores-already-carrying-2018-desk-globes/">Previously</A>, <A HREF="https://www.jwz.org/blog/2018/02/thats-no-moon/">previously</A>, <A HREF="https://www.jwz.org/blog/2024/07/null-island/">previously</A>, <A HREF="https://www.jwz.org/blog/2024/05/geochron/">previously</A>, <A HREF="https://www.jwz.org/blog/2023/06/projection/">previously</A>, <A HREF="https://www.jwz.org/blog/2019/01/mercator-globe/">previously</A>, <A HREF="https://www.jwz.org/blog/2015/10/mecator-puzzle/">previously</A>.</DIV>]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2026/03/globes/feed/</wfw:commentRss>
			<slash:comments>14</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2026/4rwcwsn4hhi.jpg" length="22483" type="image/jpeg"/>
	</item>
		<item>
		<title>Demo station</title>
		<link>https://www.jwz.org/blog/2026/03/demo-station/</link>
					<comments>https://www.jwz.org/blog/2026/03/demo-station/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Sat, 14 Mar 2026 18:15:32 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[dnalounge]]></category>
		<category><![CDATA[fanboys]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[pranks]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yk4S</guid>

					<description><![CDATA[Since we had dozens of video game demo stations at our various GDC events this week, I snuck an XScreenSaver kiosk into the mix. I'm not sure anyone noticed it.]]></description>
										<content:encoded><![CDATA[<DIV STYLE="text-align: center; width: 50%; max-width: 3589px; margin: 0 0 1em 1em; float: right;"><A HREF="https://cdn.jwz.org/images/2026/kiosk.jpg" data-size="3589x2373"><IMG SRC="https://cdn.jwz.org/images/scaled/768/2026/kiosk.jpg" WIDTH=3589 HEIGHT=2373 STYLE="width: 100%; height: auto; border: 1px solid; margin-bottom: 0.5em" SRCSET="https://cdn.jwz.org/images/2026/kiosk.jpg 3589w, https://cdn.jwz.org/images/scaled/2048/2026/kiosk.jpg 2048w, https://cdn.jwz.org/images/scaled/1920/2026/kiosk.jpg 1920w, https://cdn.jwz.org/images/scaled/1280/2026/kiosk.jpg 1280w, https://cdn.jwz.org/images/scaled/1024/2026/kiosk.jpg 1024w, https://cdn.jwz.org/images/scaled/768/2026/kiosk.jpg 768w, https://cdn.jwz.org/images/scaled/640/2026/kiosk.jpg 640w, https://cdn.jwz.org/images/scaled/360/2026/kiosk.jpg 360w" SIZES="(max-width: 660px) 50vw, 36em" LOADING="lazy" data-size="3589x2373"></A></DIV>Since we had dozens of video game demo stations at our <A HREF="https://www.dnalounge.com/calendar/2026/03.html">various GDC events this week</A>, I snuck an <A HREF="https://www.jwz.org/xscreensaver/">XScreenSaver</A> kiosk into the mix. I'm not sure anyone noticed it.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2026/03/demo-station/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2026/kiosk.jpg" width="3589" height="2373" length="2038122" type="image/jpeg"/>
	</item>
		<item>
		<title>Linux Xft Unicode fonts</title>
		<link>https://www.jwz.org/blog/2026/03/linux-xft-unicode-fonts/</link>
					<comments>https://www.jwz.org/blog/2026/03/linux-xft-unicode-fonts/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Mon, 02 Mar 2026 20:11:33 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[lazyweb]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yk39</guid>

					<description><![CDATA[Dear Lazyweb, can someone show me a straightforward example of an X11 program calling XftDrawStringUtf8 that succeeds in displaying Japanese characters? On Debian 13 with "fonts-noto" installed, "lxterminal" can do it but XScreenSaver still can't seem to display anything ...]]></description>
										<content:encoded><![CDATA[Dear Lazyweb, can someone show me a straightforward example of an X11 program calling <tt>XftDrawStringUtf8</tt> that succeeds in displaying Japanese characters? On Debian 13 with "fonts-noto" installed, "lxterminal" can do it but XScreenSaver still can't seem to display anything more complicated than Cyrillic. <P>E.g. <tt>"unicrud --block Katakana"</tt>. <P> The actual XFT font I get from <tt>XftFontOpenXlfd("-&#x2A;-sans serif-bold-r-&#x2A;-&#x2A;-&#x2A;-180-&#x2A;-&#x2A;-&#x2A;-&#x2A;-&#x2A;-&#x2A;")</tt> is <P><pre style="font-size:smaller; max-height: 10em; overflow: auto; border: 1px solid; padding: 1em; margin: 1em">Noto Sans-300 :familylang=en :style=Bold :stylelang=en :fullname=Noto Sans Bold :fullnamelang=en :slant=0 :weight=200 :width=100 :pixelsize=401.899 :foundry=GOOG :antialias=True :hintstyle=1 :hinting=True :verticallayout=False :autohint=False :globaladvance=True :file=/usr/share/fonts/truetype/noto/NotoSans-Bold.ttf :index=0 :outline=True :scalable=True :dpi=96.4557 :rgba=5 :scale=1 :minspace=False :fontversion=131334 :capability=otlayout\:DFLT otlayout\:cyrl otlayout\:grek otlayout\:latn :fontformat=TrueType :embolden=False :embeddedbitmap=True :decorative=False :lcdfilter=1 :namelang=en :prgname=unicrud :postscriptname=NotoSans-Bold :color=False :symbol=False :variable=False :fonthashint=True :order=0 :namedinstance=False :fontwrapper=SFNT</pre> <P><A HREF="https://www.jwz.org/blog/2021/02/x11-fonts/">Previously</A>, <A HREF="https://www.jwz.org/blog/2022/09/fix-it-with-eyes-unicode-edition/">previously</A>, <A HREF="https://www.jwz.org/blog/2018/07/just-gonna-leave-this-regexp-here/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2026/03/linux-xft-unicode-fonts/feed/</wfw:commentRss>
			<slash:comments>42</slash:comments>
		
		
			</item>
		<item>
		<title>Tear Us a Heart</title>
		<link>https://www.jwz.org/blog/2026/02/tear-us-a-heart/</link>
					<comments>https://www.jwz.org/blog/2026/02/tear-us-a-heart/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Sat, 14 Feb 2026 10:12:17 +0000</pubDate>
		<category><![CDATA[art]]></category>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[religion]]></category>
		<category><![CDATA[space]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yk3b</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<DIV STYLE="text-align: center; width: 100%; max-width: 480px; margin: 0 auto;"><DIV STYLE="display: inline-block; margin: 2px; width: 100%;" STYLE=" margin-bottom: 0.5em"><DIV STYLE="overflow: hidden; position: relative; padding-bottom: 56.25%; display: inline-block; width: 100%;" STYLE="padding-bottom: 100%"><VIDEO STYLE="position: absolute; top: 0; left: 0; border: 0; margin: 0; padding: 0; z-index: 1; width: 100%; height: 100%;" SRC="https://cdn.jwz.org/images/2026/unknownpleasures-heart.mp4" AUTOPLAY LOOP MUTED PLAYSINLINE ALLOW="autoplay; fullscreen" ALLOWFULLSCREEN POSTER="https://cdn.jwz.org/images/2026/unknownpleasures-heart.jpg"></VIDEO></DIV></DIV></DIV> <P><A HREF="https://www.jwz.org/blog/2025/12/unknown-xmas/">Previously</A>, <A HREF="https://www.jwz.org/blog/2016/09/ian-curtis-rides-a-rollercoaster/">previously</A>, <A HREF="https://www.jwz.org/blog/2025/01/what-is-this-ive-seen-it-on-tumblr/">previously</A>, <A HREF="https://www.jwz.org/blog/2019/07/xscreensaver-5-43/">previously</A>, <A HREF="https://www.jwz.org/blog/2019/06/reap-the-fatuous-whirlwind/">previously</A>, <A HREF="https://www.jwz.org/blog/2013/05/print-your-own-unknown-pleasures/">previously</A>, <A HREF="https://www.jwz.org/blog/2010/10/tony-wilsons-tombstone-by-peter-saville-only-3-years-late/">previously</A>, <A HREF="https://www.jwz.org/blog/2023/05/i-have-implemented-a-cryptosystem/">previously</A>, <A HREF="https://www.jwz.org/blog/2007/03/didnt-hear-the-warning-indeed/">previously</A>, <A HREF="https://www.jwz.org/blog/2019/10/what-is-love/">previously</A>, <A HREF="https://www.jwz.org/blog/2019/11/manic-pixie-green-girl/">previously</A>, <A HREF="https://www.jwz.org/blog/2014/04/same-3/">previously</A>, <A HREF="https://www.jwz.org/blog/2016/02/valentines-day-bummer/">previously</A>, <A HREF="https://www.jwz.org/blog/2015/07/same-5/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2026/02/tear-us-a-heart/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2026/unknownpleasures-heart.jpg" length="55561" type="image/jpeg"/>
	</item>
		<item>
		<title>SVG triangulation</title>
		<link>https://www.jwz.org/blog/2026/02/svg-triangulation/</link>
					<comments>https://www.jwz.org/blog/2026/02/svg-triangulation/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Wed, 04 Feb 2026 02:04:01 +0000</pubDate>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[lazyweb]]></category>
		<category><![CDATA[maps]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yk25</guid>

					<description><![CDATA[Dear Lazyweb,

I need this SVG as a DXF, DWG or SKP with all of the polylines converted to triangular meshes. Can someone show me how, or just do it for me?

The conversion must preserve group names so that I can tell which ones are which.

Bonus level: can you find a ...]]></description>
										<content:encoded><![CDATA[Dear Lazyweb, <P>I need <A HREF="https://commons.wikimedia.org/wiki/File:BlankMap-World-Equirectangular.svg">this SVG</A> as a DXF, DWG or SKP with all of the polylines converted to triangular meshes. Can someone show me how, or just do it for me? <P>The conversion must preserve group names so that I can tell which ones are which. <P>Bonus level: can you find a similar source map that <I>also</I> has US states? Must be equirectangular. <P><A HREF="https://www.jwz.org/blog/2024/07/null-island/">Previously</A>, <A HREF="https://www.jwz.org/blog/2024/05/geochron/">previously</A>, <A HREF="https://www.jwz.org/blog/2023/06/projection/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2026/02/svg-triangulation/feed/</wfw:commentRss>
			<slash:comments>27</slash:comments>
		
		
			</item>
		<item>
		<title>XScreenSaver 6.14</title>
		<link>https://www.jwz.org/blog/2026/01/xscreensaver-6-14/</link>
					<comments>https://www.jwz.org/blog/2026/01/xscreensaver-6-14/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Thu, 15 Jan 2026 22:48:29 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mpegs]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yk19</guid>

					<description><![CDATA[XScreenSaver 6.14 is out now, including iOSand Android. A whopping eighteen new savers this time! As I mentioned last month, I wrote a new XScreenSaver module that is API-compatible with Shadertoy, which means that I am now able to pull demos written that way into the ...]]></description>
										<content:encoded><![CDATA[<A HREF="https://www.jwz.org/xscreensaver/"><IMG SRC="https://cdn.jwz.org/xscreensaver/logo.png" STYLE="width: 20%; height: auto; max-width: 600px; max-height: 600px; border: 0; box-sizing: border-box; margin: 0 0 1em 1em; float: right; clear: right;" SRCSET="https://cdn.jwz.org/xscreensaver/logo.png 600w, https://cdn.jwz.org/xscreensaver/logo.png 360w" SIZES="(max-width: 660px) 20vw, 15em" LOADING="lazy" data-size="600x600" WIDTH="600" HEIGHT="600"></A> <A HREF="https://www.jwz.org/xscreensaver/">XScreenSaver 6.14</A> is out now, including <A HREF="https://itunes.apple.com/app/xscreensaver/id539014593?mt=8">iOS</A> <!-- <I>(soon)</I> --> and <A HREF="https://www.jwz.org/xscreensaver/download.html">Android</A>. A whopping <I>eighteen</I> new savers this time! As I mentioned <A HREF="https://www.jwz.org/blog/2025/12/what-are-your-favorite-shadertoys/">last month</A>, I wrote a new XScreenSaver module that is API-compatible with <A HREF="https://www.shadertoy.com/">Shadertoy</A>, which means that I am now able to pull demos written that way into the XScreenSaver fold. These 18 savers are the first of that batch. <P><DIV STYLE="text-align: center; width: 100%; max-width: 360px; margin: 0 auto;"><DIV STYLE="display: inline-block; margin: 2px; width: 100%;" STYLE=" margin-bottom: 0.5em"><DIV STYLE="overflow: hidden; position: relative; padding-bottom: 56.25%; display: inline-block; width: 100%;" STYLE="padding-bottom: 56%"><A HREF="https://www.youtube.com/view_play_list?p=PLbe67PprBSpqM_-HU49fmIS8ncApw4i08" ONCLICK="return popup_video(this)"><DIV STYLE="position: absolute; top: 0; left: 0; border: 0; margin: 0; padding: 0; z-index: 1; width: 100%; height: 100%;" STYLE="background-image: url('https://cdn.jwz.org/images/2026/3sv3-uqi5ve.jpg')"><DIV ><DIV >&#x25B6;&#xFE0E;</DIV></DIV></DIV></A></DIV></DIV></DIV> <P>A limitation here is that I can only redistribute Shadertoy-derived savers that have licenses that are compatible with the rest of XScreenSaver. <P>The default license on shadertoy.com is "CC-BY-NC-SA", and so the vast majority of uploads use that. However, that license, by prohibiting commercial use, is not an open source license, and is more restrictive than the license used by the rest of XScreenSaver. For a Shadertoy saver to be distributed with or within XScreenSaver, it must be licensed under a compatible license, such as: MIT, BSD, CC-BY, CC-BY-SA or CC0. <P>So this first batch of 18 new savers are the ones that I was able to find that were both interesting <I>and</I> compatibly-licensed. <P>If you know of other cool Shadertoys that use one of the above licenses, please send them my way, and maybe I'll include them in a future release. <P>Likewise, if there are some others that are really good but that are <I>not</I> compatibly licensed, let me know about those as well and maybe I'll ask the author if they'd be willing to relicense them for inclusion. It's worth a shot. <P>(XScreenSaver does not, cannot and will not load the savers from shadertoy.com directly, because <A HREF="https://www.jwz.org/blog/2025/12/what-are-your-favorite-shadertoys/">reasons</A>, so let that idea go.) <P>One odd thing that you may notice about these is that they are oddly <I>static</I> as far as screensavers go, which is to say that despite their complexity, they draw the exact same scene every time. Most things written for Shadertoy generate each frame based on time-since-launch, without any mechanism for external sliders, or a random number seed. That's just how they're written. <P><hr> <P>Anyway, about the new XShaderToy framework that powers these new savers: <P>You may find that performance sucks on your machine. That means your GPU is not good, oh no. In particular, the Raspberry Pi 4b sucks at running most of these. Crank down the "Resolution" slider for a better frame rate. <P>To make these work in the wider XScreenSaver ecosystem, I had to target <I>four different versions</I> of GLSL that are all stupidly and arbitrarily incompatible with each other, both in the set of available library functions, and in basic syntax of the language such as the type promotion rules and whether <I>integers</I> exist. <P><ul> <li> Linux: An OpenGL "compatibility profile" context anywhere from 3.1 to 4.6. Pi is 3.1, some other Linux devices are other versions. </li><li> macOS Cocoa: An OpenGL 4.1 "core profile" context, which means <I>no</I> backward compatibility affordances for earlier versions. </li><li> macOS X11: OpenGL 2.1, yes, 2.1. </li><li> iOS: OpenGL ES 3.0. Note that "OpenGL ES 3.0" is not "OpenGL 3.0", it is "WebGL 2.0". This is all completely <A HREF="https://www.jwz.org/blog/2022/08/dali-clock-2-46-released/">sane</A> and <A HREF="https://www.jwz.org/blog/2012/06/i-have-ported-xscreensaver-to-the-iphone/">normal</A>. </li><li> Android: An OpenGL ES context anywhere from 3.0 to 3.2. </li></ul> <P>So I had to write a bunch of compatibility shims to, for example, make code written to the "OpenGL ES 3.0" API able to run on an "OpenGL 2.1" system. And it's a complete shitshow. Maybe it will work, most of the time. Huge thanks to Carsten Steger for helping me understand this nonsense. <P>And of course thanks to the original authors of these "new" savers for putting there work out there, and under compatible licenses: <A HREF="https://www.shadertoy.com/user/mrange">mrange</A>, <A HREF="https://www.shadertoy.com/user/otaviogood">otaviogood</A>, <A HREF="https://www.shadertoy.com/user/Nemerix">nemerix</A>, <A HREF="https://www.shadertoy.com/user/Kali">kali</A>, <A HREF="https://www.shadertoy.com/user/jaszunio15">jaszunio15</A> and <A HREF="https://www.shadertoy.com/user/3w36zj6">3w36zj6</A>. <P><A HREF="https://www.jwz.org/blog/2025/12/what-are-your-favorite-shadertoys/">Previously</A>, <A HREF="https://www.jwz.org/blog/2025/12/xscreensaver-6-13/">previously</A>, <A HREF="https://www.jwz.org/blog/2012/06/i-have-ported-xscreensaver-to-the-iphone/">previously</A>, <A HREF="https://www.jwz.org/blog/2022/08/dali-clock-2-46-released/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2026/01/xscreensaver-6-14/feed/</wfw:commentRss>
			<slash:comments>28</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/xscreensaver/logo.png" width="600" height="600" length="26938" type="image/png"/>
<enclosure url="https://cdn.jwz.org/images/2026/3sv3-uqi5ve.jpg" length="7033" type="image/jpeg"/>
	</item>
		<item>
		<title>What The Fib</title>
		<link>https://www.jwz.org/blog/2026/01/what-the-fib/</link>
					<comments>https://www.jwz.org/blog/2026/01/what-the-fib/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Tue, 06 Jan 2026 21:49:53 +0000</pubDate>
		<category><![CDATA[dnalounge]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[lazyweb]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yk1X</guid>

					<description><![CDATA[Every time I notice the layout of LEDs on these spotlights at the club, I cringe:

Why, why would you do that!

A square tiling makes sense. A triangular or hexagonal tiling makes more sense. A Fibonacci spiral makes the most sense. But what the absolute clustering-fuck is ...]]></description>
										<content:encoded><![CDATA[Every time I notice the layout of LEDs on these spotlights at the club, I cringe: <P><DIV STYLE="text-align: center; width: 100%; max-width: 300px; margin: 0 auto;"><A HREF="https://cdn.jwz.org/images/2026/img_4535.jpg" data-size="4032x3024"><IMG SRC="https://cdn.jwz.org/images/scaled/768/2026/img_4535.jpg" WIDTH=4032 HEIGHT=3024 STYLE="width: 100%; height: auto; border: 1px solid; margin-bottom: 0.5em" SRCSET="https://cdn.jwz.org/images/2026/img_4535.jpg 4032w, https://cdn.jwz.org/images/scaled/2048/2026/img_4535.jpg 2048w, https://cdn.jwz.org/images/scaled/1920/2026/img_4535.jpg 1920w, https://cdn.jwz.org/images/scaled/1280/2026/img_4535.jpg 1280w, https://cdn.jwz.org/images/scaled/1024/2026/img_4535.jpg 1024w, https://cdn.jwz.org/images/scaled/768/2026/img_4535.jpg 768w, https://cdn.jwz.org/images/scaled/640/2026/img_4535.jpg 640w, https://cdn.jwz.org/images/scaled/360/2026/img_4535.jpg 360w" SIZES="(max-width: 660px) 100vw, 72em" LOADING="lazy" data-size="4032x3024"></A></DIV> <P>Why, why would you do that! <P>A square tiling makes sense. A triangular or hexagonal tiling makes more sense. A Fibonacci spiral makes the most sense. But what the absolute clustering-fuck is this shit? This layout gets more cursed the more you look at it. <P><DIV ALIGN=CENTER><A HREF="https://www.jwz.org/blog/2022/01/cursed/">Previously</A>, <A HREF="https://www.jwz.org/blog/2023/06/projection/">previously</A>, <A HREF="https://www.jwz.org/blog/2021/04/cursed-computer-iceberg/">previously</A>, <A HREF="https://www.jwz.org/blog/2021/03/cursed-keyboard-image/">previously</A>.</DIV>]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2026/01/what-the-fib/feed/</wfw:commentRss>
			<slash:comments>34</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2026/img_4535.jpg" width="4032" height="3024" length="918401" type="image/jpeg"/>
	</item>
		<item>
		<title>Dali Clock in the wild</title>
		<link>https://www.jwz.org/blog/2026/01/dali-clock-in-the-wild/</link>
					<comments>https://www.jwz.org/blog/2026/01/dali-clock-in-the-wild/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Sat, 03 Jan 2026 21:35:11 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[daliclock]]></category>
		<category><![CDATA[dnalounge]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[mpegs]]></category>
		<category><![CDATA[retrocomputing]]></category>
		<category><![CDATA[time_t]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yk1R</guid>

					<description><![CDATA[Our New Years Eve countdown featured Dali Clock, because we use all parts of the buffalo here at org du jwz. And yes, it was NTP synchronized to within 1 frame, thanks for asking.]]></description>
										<content:encoded><![CDATA[Our <A HREF="https://www.dnalounge.com/calendar/2025/12-31.html">New Years Eve</A> countdown featured <A HREF="https://www.jwz.org/xdaliclock/">Dali Clock</A>, because we use all parts of the buffalo here at org du jwz. And yes, it was NTP synchronized to within 1 frame, thanks for asking. <P><DIV STYLE="text-align: center; width: 100%; max-width: 640px; margin: 0 auto;"><DIV STYLE="display: inline-block; margin: 2px; width: 100%;" STYLE=" margin-bottom: 0.5em"><DIV STYLE="overflow: hidden; position: relative; padding-bottom: 56.25%; display: inline-block; width: 100%;" STYLE="padding-bottom: 56%"><A HREF="https://www.youtube.com/watch?v=v9DwxF3XCrQ" ONCLICK="return popup_video(this)"><DIV STYLE="position: absolute; top: 0; left: 0; border: 0; margin: 0; padding: 0; z-index: 1; width: 100%; height: 100%;" STYLE="background-image: url('https://cdn.jwz.org/images/2026/v9dwxf3xcrq.jpg')"><DIV ><DIV >&#x25B6;&#xFE0E;</DIV></DIV></DIV></A></DIV></DIV> <P><A HREF="https://www.jwz.org/blog/2026/01/snarkatron-appreciation-post/">Previously</A>, <A HREF="https://www.jwz.org/blog/2022/11/dali-clock-for-palmos-back-from-the-dead-and-ready-to-party/">previously</A>, <A HREF="https://www.jwz.org/blog/2022/08/dali-clock-2-45-released/">previously</A>, <A HREF="https://www.jwz.org/blog/2025/01/a-tale-from-the-time_t-mines/">previously</A>.</DIV>]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2026/01/dali-clock-in-the-wild/feed/</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2026/v9dwxf3xcrq.jpg" length="12884" type="image/jpeg"/>
	</item>
		<item>
		<title>Unknown Xmas</title>
		<link>https://www.jwz.org/blog/2025/12/unknown-xmas/</link>
					<comments>https://www.jwz.org/blog/2025/12/unknown-xmas/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Wed, 24 Dec 2025 11:57:11 +0000</pubDate>
		<category><![CDATA[art]]></category>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[religion]]></category>
		<category><![CDATA[space]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yk02</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<DIV STYLE="text-align: center; width: 100%; max-width: 480px; margin: 0 auto;"><DIV STYLE="display: inline-block; margin: 2px; width: 100%;" STYLE=" margin-bottom: 0.5em"><DIV STYLE="overflow: hidden; position: relative; padding-bottom: 56.25%; display: inline-block; width: 100%;" STYLE="padding-bottom: 126%"><VIDEO STYLE="position: absolute; top: 0; left: 0; border: 0; margin: 0; padding: 0; z-index: 1; width: 100%; height: 100%;" SRC="https://cdn.jwz.org/images/2025/unknownxmas.mp4" AUTOPLAY LOOP MUTED PLAYSINLINE CONTROLS ALLOW="autoplay; fullscreen" ALLOWFULLSCREEN POSTER="https://cdn.jwz.org/images/2025/unknownxmas.jpg"></VIDEO></DIV></DIV> <P><A HREF="https://www.jwz.org/blog/2025/01/what-is-this-ive-seen-it-on-tumblr/">Previously</A>, <A HREF="https://www.jwz.org/blog/2019/07/xscreensaver-5-43/">previously</A>, <A HREF="https://www.jwz.org/blog/2019/06/reap-the-fatuous-whirlwind/">previously</A>, <A HREF="https://www.jwz.org/blog/2013/05/print-your-own-unknown-pleasures/">previously</A>, <A HREF="https://www.jwz.org/blog/2010/10/tony-wilsons-tombstone-by-peter-saville-only-3-years-late/">previously</A>, <A HREF="https://www.jwz.org/blog/2023/05/i-have-implemented-a-cryptosystem/">previously</A>.</DIV>]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2025/12/unknown-xmas/feed/</wfw:commentRss>
			<slash:comments>12</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2025/unknownxmas.jpg" length="46592" type="image/jpeg"/>
	</item>
		<item>
		<title>Updates</title>
		<link>https://www.jwz.org/blog/2025/12/updates/</link>
					<comments>https://www.jwz.org/blog/2025/12/updates/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Mon, 22 Dec 2025 18:01:51 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[daliclock]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yk0y</guid>

					<description><![CDATA[Just pushed out updates to four of my apps because of an update to the updater and it's turtles all the way down.]]></description>
										<content:encoded><![CDATA[Just pushed out updates to <A HREF="https://www.jwz.org/cyberizer/">four</A> <A HREF="https://www.jwz.org/jwzlyrics/">of</A> <A HREF="https://www.jwz.org/jwztv/">my</A> <A HREF="https://www.jwz.org/xdaliclock/">apps</A> because of an <A HREF="https://sparkle-project.org/documentation/security-and-reliability/">update</A> to the updater and it's turtles all the way down.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2025/12/updates/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>What are your favorite Shadertoys?</title>
		<link>https://www.jwz.org/blog/2025/12/what-are-your-favorite-shadertoys/</link>
					<comments>https://www.jwz.org/blog/2025/12/what-are-your-favorite-shadertoys/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Sat, 20 Dec 2025 07:58:54 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yk0r</guid>

					<description><![CDATA[I threw together an XScreenSaver module that is API-compatible with Shadertoy. My thought was that this would be a good way to pull in a bunch of new savers, since the cool kids don't write C any more, they just write GLSL. There are some problems with that plan, though: ...]]></description>
										<content:encoded><![CDATA[<A HREF="https://www.jwz.org/xscreensaver/"><IMG SRC="https://cdn.jwz.org/xscreensaver/logo.png" STYLE="width: 20%; height: auto; max-width: 600px; max-height: 600px; border: 0; box-sizing: border-box; margin: 0 0 1em 1em; float: right; clear: right;" SRCSET="https://cdn.jwz.org/xscreensaver/logo.png 600w, https://cdn.jwz.org/xscreensaver/logo.png 360w" SIZES="(max-width: 660px) 20vw, 15em" LOADING="lazy" data-size="600x600" WIDTH="600" HEIGHT="600"></A> I threw together an XScreenSaver module that is API-compatible with <A HREF="https://www.shadertoy.com/">Shadertoy</A>. My thought was that this would be a good way to pull in a bunch of new savers, since the cool kids don't write C any more, they just write GLSL. There are some problems with that plan, though: <P><ul> <li> The <A HREF="https://www.shadertoy.com/terms">default license</A> on Shadertoy is <A HREF="https://creativecommons.org/licenses/by-nc-sa/3.0/deed.en">CC BY-NC-SA 3.0</A> and the vast majority of uploads there use that, but since that prohibits commercial use (the "NC" part) it is not an open source license, is not compatible with the MIT/BSD license used by the rest of XScreenSaver, and is probably also incompatible with the licensing terms of every OS distro. So I can't include those. <P></li><li> There's no way to search on Shadertoy and filter by license terms, to find ones that might be compatible. <P></li><li> There's no way to email the author of a shader, because <A HREF="https://www.jwz.org/blog/2017/08/email-thats-for-old-people-right/">email is for old people</A>. <P></li><li> This is where someone's going to suggest, "Instead of including the code with XScreenSaver, why not instead have the end user enter the URL and have the saver download it from the site in realtime and then run that", and while I hate that idea for other reasons that should be obvious, it doesn't matter because Shadertoy has their <A HREF="https://www.jwz.org/blog/2019/05/cloudflare-still-loves-that-sweet-sweet-nazi-cash/">Clownflare proxy</A> configured to specifically make that sort of thing damn near impossible. I'm not getting into a countermeasures-escalation fight over this. <P></li><li> Possibly that would be less bad if the XScreenSaver end user had a Shadertoy account and was logged in, but "you have to create an account before you can run this screen saver" is so stupid that I hope we can just never speak of that idea again. No, just no. </li></ul> <P>Anyway, all that being said: <P>I would like to see your favorite Shadertoy links that would make good screen savers. <P><ul><li> Prefer ones that do not require large static assets, e.g., big images as input; </li><li> Prefer open source licenses, but even if not, I'll take a look; </li><li> Audio input and output are not an option. </li></ul> <P><A HREF="https://www.jwz.org/blog/2019/05/cloudflare-still-loves-that-sweet-sweet-nazi-cash/">Previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2025/12/what-are-your-favorite-shadertoys/feed/</wfw:commentRss>
			<slash:comments>23</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/xscreensaver/logo.png" width="600" height="600" length="26938" type="image/png"/>
	</item>
		<item>
		<title>XQuartz EGL</title>
		<link>https://www.jwz.org/blog/2025/12/xquartz-egl-2/</link>
					<comments>https://www.jwz.org/blog/2025/12/xquartz-egl-2/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Mon, 15 Dec 2025 01:58:39 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[lazyweb]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[retrocomputing]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/yk0d</guid>

					<description><![CDATA[Dear Lazyweb,

Some time in the last ~6 months, eglCreatePlatformWindowSurface vanished from the libraries provided by MacPorts "mesa". Where do I find it? It is not in libGL and there is no libEGL.

macOS 14.7.7, mesa 25.3.1, xorg-libX11 1.8.12.]]></description>
										<content:encoded><![CDATA[Dear Lazyweb, <P>Some time in the last ~6 months, <tt>eglCreatePlatformWindowSurface</tt> vanished from the libraries provided by MacPorts "mesa". Where do I find it? It is not in <TT>libGL</TT> and there is no <tt>libEGL</tt>. <P>macOS 14.7.7, mesa 25.3.1, xorg-libX11 1.8.12. <P><A HREF="https://www.jwz.org/blog/2025/07/xquartz-egl/">Previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2025/12/xquartz-egl-2/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>XScreenSaver and PAM</title>
		<link>https://www.jwz.org/blog/2025/12/xscreensaver-and-pam/</link>
					<comments>https://www.jwz.org/blog/2025/12/xscreensaver-and-pam/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Thu, 04 Dec 2025 04:14:55 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[lazyweb]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/ykx_</guid>

					<description><![CDATA[Lazyweb, I have PAM questions.

I added support for PAM to XScreenSaver in 1998, when PAM itself was a little two-year-old baby. Your keyboard was still PS2 and HDMI hadn't been invented yet. For lo these many decades, nobody could agree on what went in /etc/pam.conf or ...]]></description>
										<content:encoded><![CDATA[<A HREF="https://www.jwz.org/xscreensaver/"><IMG SRC="https://cdn.jwz.org/xscreensaver/logo.png" STYLE="width: 20%; height: auto; max-width: 600px; max-height: 600px; border: 0; box-sizing: border-box; margin: 0 0 1em 1em; float: right; clear: right;" SRCSET="https://cdn.jwz.org/xscreensaver/logo.png 600w, https://cdn.jwz.org/xscreensaver/logo.png 360w" SIZES="(max-width: 660px) 20vw, 15em" LOADING="lazy" data-size="600x600" WIDTH="600" HEIGHT="600"></A> Lazyweb, I have PAM questions. <P>I added support for PAM to XScreenSaver in 1998, when PAM itself was a little two-year-old baby. Your keyboard was still PS2 and HDMI hadn't been invented yet. For lo these many decades, nobody could agree on what went in <tt>/etc/pam.conf</tt> or <tt>/etc/pam.d/login</tt> and it was all a giant mess. <P>Things that used to sometimes be true: <P><ul> <li> If <tt>/etc/pam.d/<wbr>xscreensaver</tt> didn't exist you couldn't unlock the screen at all. </li><li> "<tt>cp /etc/pam.d/login /etc/pam.d/xscreensaver</tt>" was insufficient, some lines had to be <I>omitted.</I> </li><li> You have to call <tt>pam_chauthtok()</tt> or an unauthorized user might be able to unlock. </li><li> No, if you call <tt>pam_chauthtok()</tt> it will always fail so don't do that. </li><li> No wait, actually you have to call <tt>pam_chauthtok()</tt> because it has side effects but you have to <I>ignore its failure</I>. </li><li> You have to <tt>PAM_REFRESH_CRED</tt> every time. </li><li> No wait, that doesn't work, you have to <tt>PAM_REINITIALIZE_CRED</tt> every time instead. But not on Solaris. </li></ul> <P>I could not even hazard a guess as to which of these things are still true, or how many decades ago they stopped being true, or which of them are influenced by Linux versus BSD versus Solaris versus HPUX versus AIX versus Kerberos or other things that nobody cares about any more. <P>So I am considering making the following changes: <P><ul> <li> Always call <tt>pam_chauthtok()</tt> and respect its result status. I <I>think</I> sshd does this. </li><li> Remove the <tt>configure</tt> option <tt>--enable-pam-check-account-type</tt> (which probably should always have been a runtime option, not a compile-time option, but here we are). </li><li> At installation time, create <tt>/etc/pam.d/xscreensaver</tt> as a file containing the single line "<tt>@include login</tt>" </li></ul> <P>What I would like to know is: will this break things on your system? Particular emphasis for this question on people running weird-assed obscure systems.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2025/12/xscreensaver-and-pam/feed/</wfw:commentRss>
			<slash:comments>23</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/xscreensaver/logo.png" width="600" height="600" length="26938" type="image/png"/>
	</item>
		<item>
		<title>XScreenSaver 6.13</title>
		<link>https://www.jwz.org/blog/2025/12/xscreensaver-6-13/</link>
					<comments>https://www.jwz.org/blog/2025/12/xscreensaver-6-13/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Wed, 03 Dec 2025 01:44:44 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/ykx4</guid>

					<description><![CDATA[XScreenSaver 6.13 is out now, including iOS and Android.

Not a lot new in this one, but it has been a while since I synchronized all 3 platforms, so here we are.

GL Slideshow does a bunch of fancier transitions when loading new images, inspired by the DNA Lounge flyer ...]]></description>
										<content:encoded><![CDATA[<A HREF="https://www.jwz.org/xscreensaver/"><IMG SRC="https://cdn.jwz.org/xscreensaver/logo.png" STYLE="width: 20%; height: auto; max-width: 600px; max-height: 600px; border: 0; box-sizing: border-box; margin: 0 0 1em 1em; float: right; clear: right;" SRCSET="https://cdn.jwz.org/xscreensaver/logo.png 600w, https://cdn.jwz.org/xscreensaver/logo.png 360w" SIZES="(max-width: 660px) 20vw, 15em" LOADING="lazy" data-size="600x600" WIDTH="600" HEIGHT="600"></A> <A HREF="https://www.jwz.org/xscreensaver/">XScreenSaver 6.13</A> is out now, including <A HREF="https://itunes.apple.com/app/xscreensaver/id539014593?mt=8">iOS</A> and <A HREF="https://www.jwz.org/xscreensaver/download.html">Android</A>. <P>Not a lot new in this one, but it has been a while since I synchronized all 3 platforms, so here we are. <P><b>GL Slideshow</b> does a bunch of fancier transitions when loading new images, inspired by the <A HREF="https://www.dnalounge.com/backstage/src/screens/">DNA Lounge flyer screens</A>. So now I guess XScreenSaver can be your "Digital Signage Solution". <P><b>Endgame</B> has a bunch of full historical chess games, and smoother piece motion. <P>All hacks that display images and their file names can now display their <I>title</I> instead, if the image originated in an RSS feed. (This is why I was <A HREF="https://www.jwz.org/blog/2025/12/xattr/">asking about xattr yesterday</A>). <P>On the Unix side: there are several Wayland fixes, and better diagnostics for all the shit that doesn't work under Wayland. <P>And <tt>"make test-wayland-lock"</tt> is a disproof-of-concept that demonstrates why the "ext-session-lock-v1" protocol does not and cannot allow a screen saver to lock the screen. Great job, everybody. <A HREF="https://www.jwz.org/blog/2023/09/wayland-and-screen-savers/">Perfect, no notes.</A> (If you think I'm wrong about this, prove it! There's a comment in the middle that says "here's where a miracle happens". Fill that part in.) <P>I've also written configuration files for building a non-insane <tt>.deb</tt> installer. Do <tt>"make deb"</tt> or <tt>"make rpm"</tt>. <span style="opacity:0.7">(<A HREF="https://www.jwz.org/blog/2016/04/i-would-like-debian-to-stop-shipping-xscreensaver/">Eat shit, Debian</A>.)</span> <P>Incidentally, I am still experiencing constant crashes when just clicking around in xscreensaver-settings on Linux, <A HREF="https://www.jwz.org/blog/2025/07/help-me-fix-a-a-gtk-bug/">as mentioned here</A>, but apparently I'm the only one experiencing this. Just lucky, I guess. If it happens to you too... see if you can figure out why! <P><A HREF="https://www.jwz.org/blog/2025/07/xscreensaver-6-11/">Previously</A>, <A HREF="https://www.jwz.org/blog/2024/09/never-underestimate-the-bandwidth-of-a-pocket-full-of-fingernail-clippings/">previously</A>, <A HREF="https://www.jwz.org/blog/2023/11/the-war-on-screen-savers-continues-apace/">previously</A>, <A HREF="https://www.jwz.org/blog/2023/09/wayland-and-screen-savers/">previously</A>, <A HREF="https://www.jwz.org/blog/2025/07/help-me-fix-a-a-gtk-bug/">previously</A>, <A HREF="https://www.jwz.org/blog/2016/04/i-would-like-debian-to-stop-shipping-xscreensaver/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2025/12/xscreensaver-6-13/feed/</wfw:commentRss>
			<slash:comments>22</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/xscreensaver/logo.png" width="600" height="600" length="26938" type="image/png"/>
	</item>
		<item>
		<title>xattr</title>
		<link>https://www.jwz.org/blog/2025/12/xattr/</link>
					<comments>https://www.jwz.org/blog/2025/12/xattr/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Tue, 02 Dec 2025 09:18:05 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[lazyweb]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/ykx2</guid>

					<description><![CDATA[Dear Lazyweb, Double-You Tee Actual Fuck is this shit, and how do I make configure.ac figure it out:

Debian 12.11:

extern ssize_t getxattr (const char *__path, const char *__name, void *__value, size_t __size) __THROW __attr_access ((__write_only__, 3, 4));

macOS 14.7.7:

]]></description>
										<content:encoded><![CDATA[Dear Lazyweb, Double-You Tee Actual Fuck is this shit, and how do I make configure.ac figure it out: <P>Debian 12.11: <P><tt> extern ssize_t getxattr (const char &#x2a;__path, const char &#x2a;__name, void &#x2a;__value, size_t __size) __THROW __attr_access ((__write_only__, 3, 4));</tt> <P>macOS 14.7.7: <P><tt>ssize_t getxattr(const char &#x2a;path, const char &#x2a;name, void &#x2a;value, size_t size, u_int32_t position, int options);</tt>]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2025/12/xattr/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
		<item>
		<title>Happy BitBLT Day to all who celebrate</title>
		<link>https://www.jwz.org/blog/2025/11/happy-bitblt-day-to-all-who-celebrate/</link>
					<comments>https://www.jwz.org/blog/2025/11/happy-bitblt-day-to-all-who-celebrate/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Wed, 19 Nov 2025 20:08:49 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[mad science]]></category>
		<category><![CDATA[mpegs]]></category>
		<category><![CDATA[retrocomputing]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/ykxp</guid>

					<description><![CDATA[Crazy Eddie's Used Computers:

I declare that today, Nov. 19, 2025 is the 50th anniversary of BitBLT, a routine so fundamental to computer graphics that we don't even think about it having an origin. A working (later optimized) implementation was devised on the Xerox Alto by ]]></description>
										<content:encoded><![CDATA[<DIV STYLE="text-align: center; width: 35%; max-width: 1268px; margin: 0 0 1em 1em; float: right;"><A HREF="https://cdn.jwz.org/images/2025/e6afce9277eff7f7.jpg" data-size="1268x1635"><IMG SRC="https://cdn.jwz.org/images/scaled/768/2025/e6afce9277eff7f7.jpg" WIDTH=1268 HEIGHT=1635 STYLE="width: 100%; height: auto; border: 1px solid; margin-bottom: 0.5em" SRCSET="https://cdn.jwz.org/images/2025/e6afce9277eff7f7.jpg 1268w, https://cdn.jwz.org/images/scaled/1024/2025/e6afce9277eff7f7.jpg 1024w, https://cdn.jwz.org/images/scaled/768/2025/e6afce9277eff7f7.jpg 768w, https://cdn.jwz.org/images/scaled/640/2025/e6afce9277eff7f7.jpg 640w, https://cdn.jwz.org/images/scaled/360/2025/e6afce9277eff7f7.jpg 360w" SIZES="(max-width: 660px) 35vw, 26em" LOADING="lazy" data-size="1268x1635"></A></DIV> <A HREF="https://mastodon.sdf.org/@fvzappa/115574872559813280">Crazy Eddie's Used Computers:</A> <P><BLOCKQUOTE STYLE="margin: 1em 0 1em 1.5em; padding: 0.75em 0.5em 0.75em 1em; border: 1px solid; border-left: 4px solid;"> <P>I declare that today, Nov. 19, 2025 is the 50th anniversary of BitBLT, a routine so fundamental to computer graphics that we don't even think about it having an origin. A working (later optimized) implementation was devised on the Xerox Alto by members of the Smalltalk team. It made it easy to arbitrarily copy and move arbitrary rectangles of bits in a graphical bitmap. It was this routine that made Smalltalk's graphical interface possible. Below is part of a PARC-internal memo detailing it. <P>BitBLT was implemented in microcode on the Alto and exposed to the end-user as just another assembly language instruction, alongside your regular old Nova instructions -- this is how foundational it was. And since it was an integral part of the Alto, it enabled all sorts of interesting experimentation with graphics: user interfaces and human/computer interaction, font rasterization, laser printing... maybe a game or three...</BLOCKQUOTE> <P><DIV STYLE="text-align: center; width: 35%; max-width: 640px; margin: 0 0 1em 1em; float: right; clear: right;"><DIV STYLE="width: 100%; height: 0; padding-bottom: 100%; position: relative; overflow: hidden; border: 1px solid; margin-bottom: 0.5em"><DIV STYLE="position: absolute; left: -39%; width: 177%;"><DIV STYLE="display: inline-block; margin: 2px; width: 100%;" STYLE=" margin-bottom: 0.5em"><DIV STYLE="overflow: hidden; position: relative; padding-bottom: 56.25%; display: inline-block; width: 100%;" STYLE="padding-bottom: 56%"><A HREF="https://www.youtube.com/watch?v=UTtcwb-UWW8" ONCLICK="return popup_video(this)"><DIV STYLE="position: absolute; top: 0; left: 0; border: 0; margin: 0; padding: 0; z-index: 1; width: 100%; height: 100%;" STYLE="background-image: url('https://cdn.jwz.org/images/2025/uttcwb-uww8.jpg')"><DIV ><DIV >&#x25B6;&#xFE0E;</DIV></DIV></DIV></A></DIV></DIV></DIV></DIV></DIV> See also <A HREF="https://www.jwz.org/xscreensaver/">XScreenSaver</A> 's <A HREF="https://www.youtube.com/watch?v=UTtcwb-UWW8">BlitSpin hack</A>, which I wrote in 1992, based on earlier Common Lisp code that I wrote in 1987, based on SmallTalk code published in the <A HREF="https://archive.org/details/byte-magazine-1981-08">August 1981 issue of Byte Magazine</A>. (which you can see on <A HREF="https://archive.org/details/byte-magazine-1981-08/page/n201/mode/2up">page 188</A> thanks to the priceless treasure that is the Internet Archive.) One way of looking at it is that it uses a scratch bitmap as a carry bit, performing parallel math on the Z axis. <P>And it wasn't just a gimmick; if you had BitBLT microcode, it was a very fast way of rotating a bitmap! <P>The details on BitBLT itself start on <A HREF="https://archive.org/details/byte-magazine-1981-08/page/n185/mode/2up">page 172</A>. <I>Circle 359 on inquiry card.</I> <P><A HREF="https://www.jwz.org/blog/2022/08/xscreensaver-was-released-30-years-ago/">Previously</A>, <A HREF="https://www.jwz.org/blog/2021/12/today-in-weird-machines/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2025/11/happy-bitblt-day-to-all-who-celebrate/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2025/e6afce9277eff7f7.jpg" width="1268" height="1635" length="243784" type="image/jpeg"/>
<enclosure url="https://cdn.jwz.org/images/2025/uttcwb-uww8.jpg" length="19024" type="image/jpeg"/>
	</item>
		<item>
		<title>Upgrading Our Way Through OpenGL 1.x</title>
		<link>https://www.jwz.org/blog/2025/10/upgrading-our-way-through-opengl-1-x/</link>
					<comments>https://www.jwz.org/blog/2025/10/upgrading-our-way-through-opengl-1-x/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Sun, 05 Oct 2025 22:41:29 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[retrocomputing]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/ykwD</guid>

					<description><![CDATA[Michael Martin takes a tour through OpenGL from the beginning (part 2), trying to just put one rectangle on the screen, and amazingly, does this with no swearing.

OpenGL remains a masterclass in how to update an API in the most incompetent, user-hostile way possible. The ...]]></description>
										<content:encoded><![CDATA[Michael Martin takes a tour through OpenGL <A HREF="https://bumbershootsoft.wordpress.com/2025/09/27/upgrading-our-way-through-opengl-1-x/">from the beginning</A> (<A HREF="https://bumbershootsoft.wordpress.com/2025/10/04/upgrading-our-way-through-the-rest-of-opengl/">part 2</A>), trying to just put one rectangle on the screen, and amazingly, does this with <I>no swearing</I>. <P>OpenGL remains a masterclass in how to update an API in the most incompetent, user-hostile way possible. The cherry on top is that it is also best-in-show in the category of "Version Numbering: How Not To Do It." <P><A HREF="https://www.jwz.org/blog/2012/06/i-have-ported-xscreensaver-to-the-iphone/">Yeah I'm still mad about it</A>, why do you ask? <P><A HREF="https://www.jwz.org/blog/2012/06/i-have-ported-xscreensaver-to-the-iphone/">Previously</A>, <A HREF="https://www.jwz.org/blog/2022/08/dali-clock-2-46-released/">previously</A>, <A HREF="https://www.jwz.org/blog/2016/05/xscreensaver-5-35/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2025/10/upgrading-our-way-through-opengl-1-x/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
		<item>
		<title>XScreenSaver, Wayland and locking</title>
		<link>https://www.jwz.org/blog/2025/07/xscreensaver-wayland-and-locking/</link>
					<comments>https://www.jwz.org/blog/2025/07/xscreensaver-wayland-and-locking/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Sun, 20 Jul 2025 01:34:05 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/ykrj</guid>

					<description><![CDATA[Welp, I got crickets in answer to my question, "How do I find the wl_surface backing an Xwayland X11 Window?" and that does not bode well for XScreenSaver ever being able to lock your screen on Wayland.

The only existing mechanism for third-party screen locking is the ...]]></description>
										<content:encoded><![CDATA[<A HREF="https://www.jwz.org/xscreensaver/"><IMG SRC="https://cdn.jwz.org/xscreensaver/logo.png" STYLE="width: 20%; height: auto; max-width: 600px; max-height: 600px; border: 0; box-sizing: border-box; margin: 0 0 1em 1em; float: right; clear: right;" SRCSET="https://cdn.jwz.org/xscreensaver/logo.png 600w, https://cdn.jwz.org/xscreensaver/logo.png 360w" SIZES="(max-width: 660px) 20vw, 15em" LOADING="lazy" data-size="600x600" WIDTH="600" HEIGHT="600"></A> Welp, I got crickets in answer to <A HREF="https://www.jwz.org/blog/2025/07/xwayland-wl_surface/">my question</A>, "How do I find the wl_surface backing an Xwayland X11 Window?" and that does not bode well for XScreenSaver ever being able to lock your screen on Wayland. <P>The only existing mechanism for third-party screen locking is the <A HREF="https://wayland.app/protocols/ext-session-lock-v1">"ext-session-lock-v1" protocol</A> and that API requires you to provide it with a set of wl_surfaces to display while locked. <P>So either I need to find the wl_surface of an existing X11 window, or I need a way to create an X11 window that is a child of a new wl_surface. Without that, we're dead in the water. I don't think there's another way. <P>(The "ext-session-lock-v1" model is a <A HREF="https://www.jwz.org/blog/2023/09/wayland-and-screen-savers/#comment-243515"><I>terrible idea</I></A> and also doesn't work on Gnome or KDE, but it is the only game in town.) <P><A HREF="https://www.jwz.org/blog/2025/07/help-me-fix-a-a-gtk-bug/">Previously</A>, <A HREF="https://www.jwz.org/blog/2025/07/xscreensaver-6-12/">previously</A>, <A HREF="https://www.jwz.org/blog/2025/07/xscreensaver-6-11/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2025/07/xscreensaver-wayland-and-locking/feed/</wfw:commentRss>
			<slash:comments>65</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/xscreensaver/logo.png" width="600" height="600" length="26938" type="image/png"/>
	</item>
		<item>
		<title>Xwayland wl_surface</title>
		<link>https://www.jwz.org/blog/2025/07/xwayland-wl_surface/</link>
					<comments>https://www.jwz.org/blog/2025/07/xwayland-wl_surface/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Sat, 19 Jul 2025 01:01:21 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[lazyweb]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/ykrZ</guid>

					<description><![CDATA[Dear Lazyweb, how do I find the wl_surface backing an Xwayland X11 Window? This says that the window will be sent a WL_SURFACE_ID ClientMessage, but this appears not to be the case.]]></description>
										<content:encoded><![CDATA[Dear Lazyweb, how do I find the wl_surface backing an Xwayland X11 Window? <A HREF="https://wayland.freedesktop.org/docs/html/ch05.html">This</A> says that the window will be sent a <tt> WL_SURFACE_ID</tt> ClientMessage, but this appears not to be the case. <P><A HREF="https://www.jwz.org/blog/2025/07/xscreensaver-6-12/">Previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2025/07/xwayland-wl_surface/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>I have glitchpegged the AI bots</title>
		<link>https://www.jwz.org/blog/2025/07/i-have-glitchpegged-the-ai-bots/</link>
					<comments>https://www.jwz.org/blog/2025/07/i-have-glitchpegged-the-ai-bots/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Fri, 11 Jul 2025 23:32:32 +0000</pubDate>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[glitch]]></category>
		<category><![CDATA[mad science]]></category>
		<category><![CDATA[mpegs]]></category>
		<category><![CDATA[pranks]]></category>
		<category><![CDATA[robots]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/ykrG</guid>

					<description><![CDATA[Just a little fuzz testing for them. Absolutely free of charge.]]></description>
										<content:encoded><![CDATA[<div align=center>Just a little fuzz testing for them. Absolutely free of charge.</div> <P><DIV STYLE="text-align: center; width: 100%; max-width: 786px; margin: 0 auto;"><DIV STYLE="display: flex; gap: 0.5em; margin-bottom: 0.5em;"><DIV STYLE="flex: 0.761"><IMG SRC="https://cdn.jwz.org/images/2025/glitchpeg1.gif" noanim WIDTH=478 HEIGHT=352 data-size="478x352" STYLE="width: 100%; height: auto; border: 1px solid;"></DIV><DIV STYLE="flex: 1"><IMG SRC="https://cdn.jwz.org/images/2025/glitchpeg4.gif" noanim WIDTH=480 HEIGHT=269 data-size="480x269" STYLE="width: 100%; height: auto; border: 1px solid;"></DIV></DIV><DIV STYLE="display: flex; gap: 0.5em; margin-bottom: 0.5em;"><DIV STYLE="flex: 0.5707"><IMG SRC="https://cdn.jwz.org/images/2025/glitchpeg2.gif" noanim WIDTH=256 HEIGHT=192 data-size="256x192" STYLE="width: 100%; height: auto; border: 1px solid;"></DIV><DIV STYLE="flex: 1"><IMG SRC="https://cdn.jwz.org/images/2025/glitchpeg3.gif" noanim WIDTH=500 HEIGHT=214 data-size="500x214" STYLE="width: 100%; height: auto; border: 1px solid;"></DIV></DIV> <P><A HREF="https://www.jwz.org/blog/2025/06/exterminate-all-rational-ai-scrapers-redux/">Previously</A>, <A HREF="https://www.jwz.org/blog/2025/05/bots/">previously</A>, <A HREF="https://www.jwz.org/blog/2018/08/xscreensaver-5-40/">previously</A>, <A HREF="https://www.jwz.org/blog/2015/07/fuzz-testing/">previously</A>, <A HREF="https://www.jwz.org/blog/2024/02/harassing-botnets-with-zipbombs/">previously</A>, <A HREF="https://www.jwz.org/blog/2025/01/always-nice-to-see-the-cyberizer-in-its-natural-habitat/">previously</A>, <A HREF="https://www.jwz.org/blog/2021/08/feedback-attract-mode/">previously</A>, <A HREF="https://www.jwz.org/blog/2018/07/low-bandwidth-makes-arty-jpegs/">previously</A>, <A HREF="https://www.jwz.org/blog/2018/06/they-fake/">previously</A>, <A HREF="https://www.jwz.org/blog/2017/12/fcc-internet-porn-scrambler/">previously</A>, <A HREF="https://www.jwz.org/blog/2015/04/1980s-cable/">previously</A>.</DIV>]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2025/07/i-have-glitchpegged-the-ai-bots/feed/</wfw:commentRss>
			<slash:comments>15</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/images/2025/glitchpeg1.gif" width="478" height="352" length="2055173" type="image/gif"/>
<enclosure url="https://cdn.jwz.org/images/2025/glitchpeg4.gif" width="480" height="269" length="1457477" type="image/gif"/>
<enclosure url="https://cdn.jwz.org/images/2025/glitchpeg2.gif" width="256" height="192" length="909366" type="image/gif"/>
<enclosure url="https://cdn.jwz.org/images/2025/glitchpeg3.gif" width="500" height="214" length="2929533" type="image/gif"/>
	</item>
		<item>
		<title>Help me fix a a GTK bug</title>
		<link>https://www.jwz.org/blog/2025/07/help-me-fix-a-a-gtk-bug/</link>
					<comments>https://www.jwz.org/blog/2025/07/help-me-fix-a-a-gtk-bug/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Thu, 10 Jul 2025 00:56:38 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/ykrC</guid>

					<description><![CDATA[In xscreensaver-settings, any time I select a different item in the list, I get a crash with:

GLib: g_ptr_array_unref: assertion 'array' failed.

This assertion fires late, with none of my code on the stack, so I have no idea what it is complaining about; and valgrind ...]]></description>
										<content:encoded><![CDATA[<A HREF="https://www.jwz.org/xscreensaver/"><IMG SRC="https://cdn.jwz.org/xscreensaver/logo.png" STYLE="width: 20%; height: auto; max-width: 600px; max-height: 600px; border: 0; box-sizing: border-box; margin: 0 0 1em 1em; float: right; clear: right;" SRCSET="https://cdn.jwz.org/xscreensaver/logo.png 600w, https://cdn.jwz.org/xscreensaver/logo.png 360w" SIZES="(max-width: 660px) 20vw, 15em" LOADING="lazy" data-size="600x600" WIDTH="600" HEIGHT="600"></A> In xscreensaver-settings, any time I select a different item in the list, I get a crash with: <P><tt>GLib: g_ptr_array_unref: assertion 'array' failed</tt> <P>This assertion fires late, with none of my code on the stack, so I have no idea what it is complaining about; and valgrind provides no clues. It started happening recently, but happens against releases as far back as XScreenSaver 6.05, so something about GTK changed, not my code. Commenting out every call to <tt>g*_free</tt> does not make it go away. Happens under X11 or Wayland. <P>I have no patience for dealing with GTK, so I would be very appreciative if someone else would figure this out... <P><BR> <B>Update:</B> I am seeing this consistently on GTK 3.24.38-2 on Raspbian 12.11, but a few people have told me that they can't reproduce it. So that's even weirder. <P><A HREF="https://www.jwz.org/blog/2025/07/xscreensaver-6-12/">Previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2025/07/help-me-fix-a-a-gtk-bug/feed/</wfw:commentRss>
			<slash:comments>15</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/xscreensaver/logo.png" width="600" height="600" length="26938" type="image/png"/>
	</item>
		<item>
		<title>XScreenSaver 6.12</title>
		<link>https://www.jwz.org/blog/2025/07/xscreensaver-6-12/</link>
					<comments>https://www.jwz.org/blog/2025/07/xscreensaver-6-12/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Mon, 07 Jul 2025 20:00:27 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/ykqx</guid>

					<description><![CDATA[XScreenSaver 6.12 is out now. This is another Unix-only release.

DPMS works on Wayland, using either "wlr-output-power-management-unstable-v1" or "kde-dpms".
Fading should perform much better on both Wayland and X11.
GNOME continues to be unsupported. Oh dear. How sad. ...]]></description>
										<content:encoded><![CDATA[<A HREF="https://www.jwz.org/xscreensaver/"><IMG SRC="https://cdn.jwz.org/xscreensaver/logo.png" STYLE="width: 20%; height: auto; max-width: 600px; max-height: 600px; border: 0; box-sizing: border-box; margin: 0 0 1em 1em; float: right; clear: right;" SRCSET="https://cdn.jwz.org/xscreensaver/logo.png 600w, https://cdn.jwz.org/xscreensaver/logo.png 360w" SIZES="(max-width: 660px) 20vw, 15em" LOADING="lazy" data-size="600x600" WIDTH="600" HEIGHT="600"></A> <A HREF="https://www.jwz.org/xscreensaver/">XScreenSaver 6.12</A> is out now. This is another Unix-only release. <P><ul> <li> DPMS works on Wayland, using either "wlr-output-power-management-unstable-v1" or "kde-dpms". </li><li> Fading should perform much better on both Wayland and X11. </li><li> GNOME continues to be unsupported. <I>Oh dear. How sad. Nevermind.</I> </li><li> Still no locking. </li></ul> <P>What I would like to know: <P><ul> <li> Do you have a non-GNOME Wayland system on which either idle detection or DPMS does not work? <P></li><li> Does fading look good? To clarify how it should look, on both Wayland and X11: <P><ul><li> When the screen saver activates, your desktops fade to black on all monitors, then the savers start. </li><li> When the screen un-blanks, the running savers should freeze; then fade to black; then the desktops fade in over that black. </li><li> There should be no surprise single-frame flickers. </li><li> All of this should be at least 30fps. </li></ul></li></ul> <P>One thing I have noticed is that during fade-in, that initial fade-out-to-black <I>sometimes</I> doesn't happen. It snaps to black immediately, so you'll see 1 sec of solid black, then the desktop fade-in starts. This seems to be timing related, possibly related to the saver's OpenGL context being torn down and becoming un-screenshottable? <P>On Wayland, fading (and hacks that manipulate the desktop image) require "grim" to be installed. <P>Because Wayland is incredible <I>(pej., obs.),</I> grim sometimes takes between 1.5 and 7 seconds to grab a screenshot on my Pi 4b at 1080p. <P><A HREF="https://www.jwz.org/blog/2025/07/xscreensaver-6-11/">Previously</A>, <A HREF="https://www.jwz.org/blog/2025/06/wayland-screenshots/">previously</A>, <A HREF="https://www.jwz.org/blog/2023/11/the-war-on-screen-savers-continues-apace/">previously</A>, <A HREF="https://www.jwz.org/blog/2023/09/wayland-and-screen-savers/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2025/07/xscreensaver-6-12/feed/</wfw:commentRss>
			<slash:comments>44</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/xscreensaver/logo.png" width="600" height="600" length="26938" type="image/png"/>
	</item>
		<item>
		<title>XQuartz EGL</title>
		<link>https://www.jwz.org/blog/2025/07/xquartz-egl/</link>
					<comments>https://www.jwz.org/blog/2025/07/xquartz-egl/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Sat, 05 Jul 2025 19:18:57 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[lazyweb]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[retrocomputing]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/ykqv</guid>

					<description><![CDATA[I know I am probably the last person in the world still running X11 on a Mac, but some time around macOS 14.7.3, XQuartz stopped working with OpenGL programs that use EGL instead of GLX. If someone could tell me how to fix this, that would be great:

libEGL warning: egl: ...]]></description>
										<content:encoded><![CDATA[I know I am probably the last person in the world still running X11 on a Mac, but some time around macOS 14.7.3, XQuartz stopped working with OpenGL programs that use EGL instead of GLX. If someone could tell me how to fix this, that would be great: <P><pre style="margin-left: 2em">libEGL warning: egl: failed to create dri2 screen MESA: error: Failed to attach to x11 shm MESA: error: Failed to attach to x11 shm MESA: error: Failed to attach to x11 shm ...</pre>]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2025/07/xquartz-egl/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Wayland registries</title>
		<link>https://www.jwz.org/blog/2025/07/wayland-registries/</link>
					<comments>https://www.jwz.org/blog/2025/07/wayland-registries/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Sat, 05 Jul 2025 02:06:11 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[lazyweb]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/ykqq</guid>

					<description><![CDATA[Dear Lazyweb, how do you iterate the wl_registry more than once? I have two modules that have nothing to do with each other, but need to find their respective protocols, and apparently you can't call wl_registry_add_listener more than once. The second one is ignored.

Is ...]]></description>
										<content:encoded><![CDATA[Dear Lazyweb, how do you iterate the <tt>wl_registry</tt> more than once? I have two modules that have nothing to do with each other, but need to find their respective protocols, and apparently you can't call <tt>wl_registry_add_listener</tt> more than once. The second one is ignored. <P>Is there any actual <I>API documentation</I> for this shit? I have found only the two extremes of "hex dumps of socket protocol" and "language-agnostic XML file fetishism". <P><A HREF="https://www.jwz.org/blog/2025/07/wayland-dpms/">Previously</A>, <A HREF="https://www.jwz.org/blog/2025/07/xscreensaver-6-11/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2025/07/wayland-registries/feed/</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
			</item>
		<item>
		<title>Wayland DPMS</title>
		<link>https://www.jwz.org/blog/2025/07/wayland-dpms/</link>
					<comments>https://www.jwz.org/blog/2025/07/wayland-dpms/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Thu, 03 Jul 2025 23:47:23 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[lazyweb]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/ykqo</guid>

					<description><![CDATA[Dear Lazyweb, what is the proper way to tell Wayland, "power off the monitor, power it on again when there is activity"? AKA "xset dpms force off" or "DPMSForceLevel()".

The closest I have found is "wlr-randr --output HDMI-A-2 --off" which powers off as a side effect of ...]]></description>
										<content:encoded><![CDATA[Dear Lazyweb, what is the proper way to tell Wayland, "power off the monitor, power it on again when there is activity"? AKA <tt>"xset dpms force off"</tt> or <tt>"DPMSForceLevel()"</tt>. <P>The closest I have found is <tt>"wlr-randr --output HDMI-A-2 --off"</tt> which powers off as a <I>side effect</I> of disabling the monitor in RANDR... and it doesn't turn back on at activity. <P>Doing that in code (via "wlr-output-management-unstable-v1", which of course GNOME and KDE don't implement) takes 400+ lines. That's 399+ too many. And if the program crashes, congratulations, you get to reboot to turn your screens back on. <P>Wayfire lets you put a <tt>"dpms_timeout"</tt> number in its config file, but I can't make any sense of how that is implemented. <P>Wayland continues to fill me with amazement <I>(pej., obs.)</I> <P><A HREF="https://www.jwz.org/blog/2025/07/xscreensaver-6-11/">Previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2025/07/wayland-dpms/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
		<item>
		<title>XScreenSaver 6.11</title>
		<link>https://www.jwz.org/blog/2025/07/xscreensaver-6-11/</link>
					<comments>https://www.jwz.org/blog/2025/07/xscreensaver-6-11/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Wed, 02 Jul 2025 02:00:32 +0000</pubDate>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/ykqg</guid>

					<description><![CDATA[XScreenSaver 6.11 is out now. This is a Unix-only release -- this version contains preliminary support for Wayland.

This is maybe not entirely ready for prime time, but I figured I'd get it out there so that some people who actually understand Wayland can poke at it.

This ...]]></description>
										<content:encoded><![CDATA[<A HREF="https://www.jwz.org/xscreensaver/"><IMG SRC="https://cdn.jwz.org/xscreensaver/logo.png" STYLE="width: 20%; height: auto; max-width: 600px; max-height: 600px; border: 0; box-sizing: border-box; margin: 0 0 1em 1em; float: right; clear: right;" SRCSET="https://cdn.jwz.org/xscreensaver/logo.png 600w, https://cdn.jwz.org/xscreensaver/logo.png 360w" SIZES="(max-width: 660px) 20vw, 15em" LOADING="lazy" data-size="600x600" WIDTH="600" HEIGHT="600"></A> <A HREF="https://www.jwz.org/xscreensaver/">XScreenSaver 6.11</A> is out now. This is a Unix-only release -- this version contains preliminary support for Wayland. <P>This is maybe not entirely ready for prime time, but I figured I'd get it out there so that some people who actually understand Wayland can poke at it. <P><ol> <li> This version only supports blanking, not locking. <P></li><li> It requires compositor support for either the "org_kde_kwin_idle" or "ext_idle_notifier_v1" protocols. That means "everything but GNOME", I think. <P></li><li> Fading in and out, and grabbing screen images, require the program "grim" to be installed, and work. And it does not work under GNOME or KDE. <P></li><li> It is unable to configure DPMS, or detect changes in it. </li></ol> <P>Things I could use your help with: <P><ol type="A"> <li> Tell me if you have a Wayland system on which it does not work, besides GNOME. <P></li><li> I have not tested "ext_idle_notifier_v1". Please let me know if you have a system that supports that. Alternately, if it is the case that there are no compositors that provide "ext_idle_notifier_v1" that do not also provide "org_kde_kwin_idle", then I can just remove it. <P></li><li> Figure out a better (or dare I dream, faster) way to get screen shots than running "grim". <P></li><li> Figure out this GNOME and KDE shit, because I'm probably gonna just say "screw those guys" otherwise. <P></li><li> Write me some sample Wayland code that places two windows on the screen, one atop the other, and changes the alpha on the front window to make the back window appear to fade to black. <P></li><li> I have barely begun to think about locking, but probably "ext-session-lock-v1" is going to continue to be the only game in town, even though it is <A HREF="https://www.jwz.org/blog/2023/09/wayland-and-screen-savers/#comment-243515"><I>absolutely the wrong way to go about any of this</I></A>, FFS. Anyway, it takes a list of surfaces which are the only ones displayed while locked. Possibly we can get the underlying Wayland surface out of the X11 saver windows and feed those in to it? I guess the xscreensaver-auth window would have to be re-parented to under one of those. <P>I have little interest in working on this part, so if you want XScreenSaver to be able to lock your screen, you might wanna pitch in here. </li></ol> <P><A HREF="https://www.jwz.org/blog/2025/06/ext-idle-notify-v1/">Previously</A>, <A HREF="https://www.jwz.org/blog/2025/06/wayland-screenshots/">previously</A>, <A HREF="https://www.jwz.org/blog/2025/06/xscreensaver-and-wayland/">previously</A>, <A HREF="https://www.jwz.org/blog/2023/11/the-war-on-screen-savers-continues-apace/">previously</A>, <A HREF="https://www.jwz.org/blog/2023/09/wayland-and-screen-savers/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2025/07/xscreensaver-6-11/feed/</wfw:commentRss>
			<slash:comments>32</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/xscreensaver/logo.png" width="600" height="600" length="26938" type="image/png"/>
	</item>
		<item>
		<title>ext-idle-notify-v1</title>
		<link>https://www.jwz.org/blog/2025/06/ext-idle-notify-v1/</link>
					<comments>https://www.jwz.org/blog/2025/06/ext-idle-notify-v1/#comments</comments>
		
		<dc:creator><![CDATA[jwz]]></dc:creator>
		<pubDate>Mon, 30 Jun 2025 22:51:30 +0000</pubDate>
		<category><![CDATA[firstperson]]></category>
		<category><![CDATA[lazyweb]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[xscreensaver]]></category>
		<guid isPermaLink="false">https://jwz.org/b/ykqS</guid>

					<description><![CDATA[Dear Lazyweb, how do I test a version of Wayland that supports ext-idle-notify-v1? The docs say it is supported on Wayfire, but that is what I am running and it is not. Do I have to turn it on somehow?

"/usr/share/wayland-protocols/staging/ext-idle-notify" exists.]]></description>
										<content:encoded><![CDATA[<A HREF="https://www.jwz.org/xscreensaver/"><IMG SRC="https://cdn.jwz.org/xscreensaver/logo.png" STYLE="width: 20%; height: auto; max-width: 600px; max-height: 600px; border: 0; box-sizing: border-box; margin: 0 0 1em 1em; float: right; clear: right;" SRCSET="https://cdn.jwz.org/xscreensaver/logo.png 600w, https://cdn.jwz.org/xscreensaver/logo.png 360w" SIZES="(max-width: 660px) 20vw, 15em" LOADING="lazy" data-size="600x600" WIDTH="600" HEIGHT="600"></A> Dear Lazyweb, how do I test a version of Wayland that supports <tt>ext-idle-notify-v1</tt>? <A HREF="https://wayland.app/protocols/ext-idle-notify-v1">The docs</A> say it is supported on Wayfire, but that is what I am running and it is not. Do I have to turn it on somehow? <P><TT>"/usr/<WBR>share/<WBR>wayland-protocols/<WBR>staging/<WBR>ext-idle-notify"</tt> exists. <P><A HREF="https://www.jwz.org/blog/2025/06/xscreensaver-and-wayland/">Previously</A>, <A HREF="https://www.jwz.org/blog/2025/06/wayland-screenshots/">previously</A>.]]></content:encoded>
					
					<wfw:commentRss>https://cdn.jwz.org/blog/2025/06/ext-idle-notify-v1/feed/</wfw:commentRss>
			<slash:comments>23</slash:comments>
		
		
		<enclosure url="https://cdn.jwz.org/xscreensaver/logo.png" width="600" height="600" length="26938" type="image/png"/>
	</item>
	</channel>
</rss>
