at work i’ve been maintaining a cluster of g5 powermacs. doing simple administrative tasks on them was becoming a challenge. i’d either have to do the task 10 times or, if i was lucky and it was a non-interactive sort of thing, write a script to do it for me.

to this end i created keyboardcast.

essentially, you start up keyboardcast and select which windows you want it to type into. then you type. your keystrokes are relayed to all the windows that you selected.

it also has the ability to fire off a bunch of gnome-terminals in a group (for example to ssh into a few different hosts) and start broadcasting to these terminals.

here are some nice screenshots

i really only made it as a tool for myself so it’s a bit rough around the edges (no autotools, requires linux, etc.). none-the-less, code is available here: keyboardcast.


  1. Eric
    Posted December 5, 2005 at 8:31 am | Permalink

    There’s something called clusterssh that performs a similar task.

  2. Dennis K.
    Posted December 5, 2005 at 9:07 am | Permalink

    Finally a nice-looking alternative for clusterssh, thanks Ryan :)

  3. Simon
    Posted December 5, 2005 at 9:09 am | Permalink

    I’m impressed – someone even lazier (i.e more efficient) than me. I don’t suppose it works with tabs within a gnome-terminal window, does it? I’m doing admin kind of work over six machines at the moment, resulting in around 4 terminals with 6 tabs each.

    A tool like this would be wonderful, but if it requires 24 separate windows open, it’d be trading one problem for another.

  4. desrt
    Posted December 5, 2005 at 9:14 am | Permalink

    No. No tabs, sorry. It works by delivering keystroke events to the application’s X window.

  5. Simon
    Posted December 5, 2005 at 9:31 am | Permalink

    That’s what I figured. Ah, well… I’ve got most things scripted, so it’s not too bad a problem.

  6. Posted December 5, 2005 at 1:44 pm | Permalink

    Gratuitious XTest abuse? I did something like that for controlling my MythTV box.

  7. desrt
    Posted December 5, 2005 at 2:24 pm | Permalink

    Nope. Straight up xlib (with a single call to libXmu far away from the main code path for the purposes of making the ‘Grab’ button work).

  8. Dennis K.
    Posted December 6, 2005 at 12:40 pm | Permalink

    Hi Ryan,

    I’m already making heavy use of keyboardcast and decided to package it for Ubuntu. I created a simple manpage and .desktop file, you can find them at

    More details on the package (if you are interested) can be found at

  9. desrt
    Posted December 6, 2005 at 1:32 pm | Permalink

    Dennis: I didn’t expect that keyboardcast would receive very much attention. As such, I didn’t do any of the normal things involved with releases of software including specifying the license.

    It seems that you decided to attach a GPL license to my code.

    This is reasonable, but I don’t license my software under licenses which I have not yet read. As such, the “or at your option any later version” clause is inappropriate.

    The text should read (exactly):

    “This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation.”

    I’ll address these issues and integrate your .desktop file and manpages and do a 0.1.1 release. Thanks for your efforts!

  10. Dennis K.
    Posted December 6, 2005 at 8:33 pm | Permalink

    My sincere apologies about the license, I was working on serveral things at the same time and must have messed up. I will correct this at once.

  11. desrt
    Posted December 7, 2005 at 7:48 am | Permalink

    No problems. I’ve taken the liberty of assuming that your contributions to my code were made under the GPL. :)