phosphor(6x)
π phosphor(6x) β the XScreenSaver manual, but make it make sense π
okay bestie so this page lives in the XScreenSaver manual and honestly? it's lowkey iconic. today we're talking about phosphor and I'm genuinely obsessed. let's get into it π
π NAME π
phosphor β it simulates an old terminal with long-sustain phosphor. that's the whole vibe. a CRT ghost from 1978 but make it your screensaver π
β¨ SYNOPSIS β¨
phosphor [--display host:display.screen] [--window] [--root]
[--window-id number][--install] [--visual visual] [--font font] [--scale
int] [--ticks int] [--delay usecs] [--program command] [--meta] [--esc]
[--bs] [--del] [--fps]
like, that's the whole invocation, no notes π«Ά
π¦ DESCRIPTION π¦
so phosphor draws text on your screen in a very large pixelated font that looks exactly like an old low resolution dumb tty. the pixels flare and fade out as if the phosphor was very long-sustain (iykyk β that's literally where the name comes from, the glow that lingers on old CRT monitors π).
and here's the flex: it's also a fully functional vt100 terminal emulator. not a screensaver pretending, an actual real one. main character energy fr fr π
π OPTIONS π
phosphor accepts the following options, and yes we're going through all of them, no skipping:
--windowβ Draw on a newly-created window. this is the default, so if you do nothing, you get this π«Ά--rootβ Draw on the root window. like, right on the desktop itself.--window-id numberβ Draw on the specified window. you pick the window, it draws there.--installβ Install a private colormap for the window.--visual visualβ Specify which visual to use. legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. hex counts, she's flexible β¨--font font-nameβ The X font to use.phosphorcan take any font and scale it up to pixelate it. the default isfixed.--scale intβ How much to scale the font up: in other words, the size in real pixels of the simulated pixels. default6. so a 6 stays a 6, don't @ me.--ticks intβ The number of colors to use when fading to black. default20. that's your fade-out gradient, bestie πΈ--delay usecsβ The speed of the terminal: how long to wait between drawing each character. default50000, or about 1/20th second. yes, microseconds. tiny tiny slices of time β³--ptyβ Launch the sub-program under a PTY, so that it can address the screen directly. this is the default.--pipeβ Launch the sub-program at the end of a pipe: do not let it address the screen directly.--program sh-commandβ The command to run to generate the text to display. this option may be any string acceptable to/bin/sh. the program will be run at the end of a pty or pipe, and any characters that it prints to stdout will be printed onphosphor's window. the characters will be printed artificially slowly, as per the--delayoption above. if the program exits, it will be launched again after5seconds. (yes, it respawns. it's persistent like that π)
for example:
phosphor --program 'ping 8.8.8.8'
phosphor --program 'ps -e'
phosphor --program 'od -txC -w6 /dev/random'
phosphor --program 'cat /dev/random'
phosphor --scale 2 --program 'top'
phosphor --scale 4 --program 'mtr www.kernel.org'
phosphor --scale 4 --program 'emacs -nw -q -f life'
phosphor --scale 4 --program 'emacs -nw -q --eval "(hanoi 5)"'
and if you have the festival(1) text-to-speech system installed, you can have it read the screen as phosphor prints it π€:
phosphor --program \
'xscreensaver-text | tee /dev/stderr | festival --tts'
you can also use phosphor as a lo-fi replacement for the xterm(1) and gnome-terminal(1) terminal emulators:
phosphor -delay 0 -program $SHELL
(note: -delay, not --delay, in that last one. that's exactly how it's written. keep it exactly like that, bestie π«Ά)
--escβ When the user types a key with the Alt or Meta keys held down, send an ESC character first. this is the default.--metaβ When Meta or Alt are held down, set the high bit on the character instead.--delβ Swap Backspace and Delete. this is the default.--bsβ Do not swap Backspace and Delete.--fpsβ Display the current frame rate and CPU load. numbers on screen, we love a performance readout π₯
π§ TERMINAL EMULATION π§
okay this part is genuinely so cool, pay attention π
by default, phosphor allocates a pseudo-tty for the sub-process to run under. and this has the desirable side effect that the program will be able to use ioctl(2) to fetch information about terminal parameters and window size β which many programs (such as top(1)) need to run properly. so like, top actually works, which is a slay.
phosphor will also set the environment variable TERM to vt100 in the child process.
any characters typed on the phosphor window will be passed along to the sub-process. π
β οΈ note that this only works when running in "window" mode, not when running in --root mode under xscreensaver. so if you're typing and nothing happens, check your mode, bestie π
π ENVIRONMENT π
DISPLAYto get the default host and display number.XENVIRONMENTβ to get the name of a resource file that overrides the global resources stored in theRESOURCE_MANAGERproperty.XSCREENSAVER_WINDOWβ The window ID to use with--root.TERMto inform the sub-process of the type of terminal emulation.
β SEE ALSO β
the whole friend group, in order:
xscreensaver(1), xscreensaver-text(6x), fortune(1), apple2(6x), starwars(6x), fontglide(6x), ljlatest(6x), dadadodo(1), webcollage(6x), driftnet(1) EtherPEG, EtherPeek, console_codes(4).
(and yes, EtherPEG and EtherPeek have no man page section numbers in there. that's how it is. don't come for me π)
π COPYRIGHT π
Copyright Β© 1999 by Jamie Zawinski. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. No representations are made about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty.
(that's the legal bit verbatim, because legally you don't get to vibe-check a license π«Ά)
πΈ AUTHOR πΈ
Jamie Zawinski <jwz@jwz.org>, 27-Apr-99. Pty and vt100 emulation by Fredrik Tolf <fredrik@dolda2000.com>.
okay and the cute sign-off: this page is from X Version 11, version 6.09, dated 07-Jun-2024, and it's phosphor(6x) in case you lost track πβ¨π
periodt. go run it with --program 'cat /dev/random' and enjoy the chaos π
π¦ where this page comes from
- debian trixie: xscreensaver-data-extra 6.09+dfsg1-1 Β· Other_1
- opensuse-leap 16.0: xscreensaver-data-extra 6.09-bp160.1.11 Β· BSD-3-Clause AND GPL-2.0-or-later
- opensuse-leap 16.0: xscreensaver-data-extra 6.09-bp160.1.11 Β· BSD-3-Clause AND GPL-2.0-or-later
- opensuse-leap 16.0: xscreensaver-data-extra 6.09-bp160.1.11 Β· BSD-3-Clause AND GPL-2.0-or-later
- opensuse-leap 16.0: xscreensaver-data-extra 6.09-bp160.1.11 Β· BSD-3-Clause AND GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms