Random screensavers for the console

After finding a slick way to incorporate a screensaver for the console, I’m keeping my eyes open for other options in the splashy-text-thingy department.

libcaca, right now, seems to be the best runner up to my long-time favorite, cmatrix. Installing libcaca gives you four nifty screensaver-type-thingies — cacamoir, cacafire, cacaball and cacaplas.

Each one is more or less an analogue for an xscreensaver display, albeit somewhat chunky and text-built. But even at 550Mhz, it’s doing quite well in the framerate department.

One small note if you run a purely X-less machine like me: In Crux and probably in other distributions, installing libcaca can call in some packages that fall under the X umbrella. I frown upon that since I have discovered how nice it is to omit anything X-governed, but I did build the package on a machine with X installed, which is easier than trying to filter through the dependencies and make it work.

Once the package itself is built you can transplant it to an X-less machine, and the only loss of function is when the caca libraries need to display an image (like a jpg photo) translated into their text-style output. But I have fim for displaying images; I wouldn’t use caca for that anyway.

No, what I want out of caca is that cache of demo-style programs. That, coupled with cmatrix (and maybe asciiquarium, if I could ever figure out the dependencies :roll:) makes for a nice, small suite of screensavers.

Now: How about triggering them randomly from within screen?

Easier done than said, really. This is an exceedingly primitive script that creates a random number, selects a screensaver by case, and uses that as the blanker for screen.

RANGE=4
number=$RANDOM
let "number %= $RANGE"

case $number in
	0) 
	cmatrix -ab -u 2
	;;
	1)
	cacaball
	;;
	2)
	cacaplas
	;;
	3)
	cacafire
	;;
esac

(I omitted the moire screensaver because it seems somehow exceptionally taxing. I had a hard time regaining the system’s attention when it was running.) Please feel free to improve upon this; as I have mentioned before, I have all the programming skills of a rock. As in, “Hit it with a rock, and maybe it will start working.” 😐

The next step is to adjust your .screenrc file to point to the script with the blankerprg option, like this:

blankerprg /home/kmandla/.scripts/screensaver.sh

or input that line directly into screen with CTRL+A : (that’s control-plus-a, followed by a colon).

Depending on your idle variable, the script should throw out a random “screensaver,” when it reaches the timeout.

In the mean time, I’m going to keep looking for more console-based autonomous screensaverish doodads. Maybe there’s a category or a list somewhere. … πŸ˜‰

16 thoughts on “Random screensavers for the console

  1. mulenmar

    Heh, interesting. Me, I just let the screen go blank and/or shutdown. Less CPU, memory, hd taxation that way…especially important to give that older hardware a rest πŸ˜‰

    Reply
  2. fuxter

    [quote]β€œHit it with a rock, and maybe it will start working.” :|[/quote]
    oh, that’s the only way to deal with russian technical products, be it cars or some laundry machines… )

    Reply
  3. suomynona

    “(and maybe asciiquarium, if I could ever figure out the dependencies πŸ™„ )”

    … ever tried to click on the read_me link on that asciiquarium site you conveniently linked to? πŸ˜‰

    Reply
    1. K.Mandla Post author

      Many times. The problem is finding their corresponding packages — or creating them from scratch — in Crux. It’s the one small downside of working with a sparse distribution. πŸ˜‰

      Reply
  4. Eirik

    For a bit easier maintenance you could do soemthing like the following in your script:

    index=0
    screensaver[$((index++))]=”cmatrix -ab -u 2″
    screensaver[$((index++))]=”cacaball”
    screensaver[$((index++))]=”cacaplas”
    screensaver[$((index++))]=”cacafire”

    sh -c “${screensaver[$((RANDOM % index))]}”

    Some might argue that it would be more unixy to create small stubs in a folder, and filling the array along the lines of “for saver in folder/*”, or while read saver < $(ls folder)…

    Anyway, saves you from updating the integer on each case *and* manually calculating the total number of screensavers…

    -e

    Reply
    1. K.Mandla Post author

      Ah, thanks. I was hoping someone would improve upon that. I have already replaced my gnarled version with yours … πŸ™‚

      Reply
  5. skralljt

    Hey how do you use libcaca? I am trying to experiment with these screensavers but their website doesn’t explain how to call them up on the screen. aasciquarium works pretty well on slitaz and xubuntu btw. I just installed all the stuff mentioned in the readme file with the tarball of asciiquarium. But then, I have X.

    Reply
    1. Bryan

      skralljt – you should just have to fire off the ‘cacafire’, ‘cacaball’ or ‘cacaplas’ command on whichever distro you’ve got libcaca installed on.

      Reply
  6. Pingback: Using figlet for a console screensaver « Motho ke motho ka botho

  7. Pingback: A few more games for the console « Motho ke motho ka botho

  8. Pingback: vtclock: One more console clock can’t hurt « Motho ke motho ka botho

  9. Pingback: Five unattached ideas « Motho ke motho ka botho

  10. Pingback: One tool, one game, one clock « Motho ke motho ka botho

  11. Pingback: For The Love Of………. ASCII Fish??? | Hilltop Yodeler

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s