Gavin’s Odd Bits of Code

2011-09-12 (Mon)

csshX 0.74

Filed under: MacOS X,Software — Gavin Brock @ 8:02 pm

Can’t believe it has been nearly a year without a release. This one is mostly bug fixes

–> Download:csshX 0.74 <–

Bug fixes:

  • The “extra_cluster_file” config option now works (great for sharing clusters on DropBox)
  • The –spaces option now ignored on 10.7 since mission control doesn’t have space id’s. You can still use bounds mode to drag to another space.
  • Slaves will move to the same space as the master on retile.
  • Workaround for 10.6 Scripting-Bridge boolean bug is no longer used in 10.7
  • Spaces hacks working reliably on 64bit
  • More spelling fixes

New Features:

  • Connect to one host “n” times with the “hostname+n” hostnames
  • Not really a user feature, but the source code is now under git.

Updates to wiki and macports will come soon..

2010-10-08 (Fri)

csshX 0.73

Filed under: Software — Gavin Brock @ 10:10 am

It’s been a while since I’ve actually pulled together a release, but thanks to everyone’s great feedback and encouraging messages, there are a bunch of new features and bug-fixes that need to get out of the SVN tree.

–> Download:csshX 0.73 <–

New Features:

  • Configurable Ctrl character – if you don’t like Ctrl-A, (maybe it makes using screen to hard?) you can change it using action_key
  • Terminal settings sets – You can choose an alternative terminal settings set (colors, fonts, etc) to use, instead of the default, when opening csshX terminal windows. One use case is to have a settings set without the audible bell, so csshX doesn’t deafen you when you trigger a beep in 20 windows). See master_settings_set and slave_settings_set
  • Hosts files – you can provide a list of hosts to connect to, and optionally remote commands to run, in a file or even piped through stdin. See hosts.
  • More window sorting options – including interleave so you can have your terminals sorted vertically instead of horizontally

Bug fixes:

  • Many spelling corrections – thanks to Mitch Silverstein
  • Reduced memory footprint of the slaves by delaying the loading of modules (15MB per slave, down to 6MB on my box)
  • Fixed spaces support on 64bit machines
  • Fixed layout gaps on multi-monitor systems


2010-05-02 (Sun)

csshX 0.72

Filed under: Software,Uncategorized — Gavin Brock @ 8:59 pm

Another production release, like all future releases, this is a 10.5 or newer version.

Bug Fixes:

  • Dragging the bounds window between spaces now works (this is implemented in some embedded Ruby since there was no simple way to do it in Perl).
  • Fixed crash when opening windows to hosts that failed.
  • Reworked the coloring of windows in select/enable/disable mode. Those rare cases when the color was not reset should be fixed.


  • Much faster at opening windows. Some nasty AppleEvents code has helped grab control of the opened window faster.
  • –space command line option (and equivalent config command) to open csshX windows in a particular space.

I now have no bugs, and no user feature requests, so I’m getting bored. ;-)

Feedback welcome..

2010-04-24 (Sat)

csshX 0.71 (and 0.65) released

Filed under: Hacks,MacOS X,Perl,Software — Gavin Brock @ 12:49 pm

For Earth Day – the ecological carbon-free release ;-)

Two new versions of csshX are now available!!

As you may remember, I ran into problems with the release of 64bit Snow Leopard. This was due to Apple dropping carbon support in 64bit perl. The work-around at the time was to run the program using 32bit perl. Obviously this was not the long-term solution.

To control, instead of using the, carbon based, MacPerl module to call the Applescript, the advice was to use the NSAppleScript cocoa class through the PerlObjCBridge perl module. Although this worked great for calling scripts, getting the return value from scripts was extremely messy (NSAppleScript seems only half finished). I then had a look at the ScriptingBridge SBApplication class. This gives me an Objective-C like interface to applescript (although it is much more deceptive than it looks). This was much more suitable and so csshX was changed to use it*.

The downside of this is that 10.4 does not support the ScriptingBridge and so any legacy 10.4 user out there (are there any?) will be stuck on csshX 0.65 forever (0.65 is just a minor bug-fix release to 0.64).

The new csshX 0.70 is a major rewrite of the handling. This appears to make things a lot more responsive, but of course, it may have introduced other bugs. One major benefit is that I can now reliably get handles back for the windows created – this means no more race conditions if you click on any Terminal window while csshX is starting.

Other new features (as way of a bribe to get you to try this) are:

  • Growl messages for certain events. This is experimental, so please let me know if you would like more information, or if it’s too annoying (see the man page for how to disable it).
  • –ssh command line switch to specify the ssh command (handy if you have some wrapper script).
  • Keyboard cursor based move/resize in the bounds-setting mode (in case you hate reaching for the mouse).

You can grab the packages here:

As usual feedback, especially bug reports, are greatly appreciated.

csshX now on Twitter!

Follow brockgr on Twitter

* Nearly.. there is a bug introduced in 10.6 PerlObjCBridge that prevents it calling functions that return boolean values (quite common in Applescript). A bug report has been opened with Apple. In the interim, some of the ScriptingBridge calls are actually being substituted with NSAppleScript ones.

2010-03-30 (Tue)

csshx 0.64 released

Filed under: Uncategorized — Gavin Brock @ 10:57 pm

I have finally cut a new csshX package – a lot of good stuff in this one:

New Features

  • Host and Subnet Ranges – see below
  • Ping test hosts before attempting to connect
  • Sort terminals by hostname
  • Zoom a single terminal to ‘full screen’ key binding
  • Added “enable next terminal” key binding
  • Added “send slaveid” (a guaranteed unique ID) to a terminal
  • Check for users odd shell settings in

Bug Fixes

  • Added the work-around for 10.6 64bit
  • Better window placement (less overlaps)
  • Use the system stty, not macports
  • Better handling of terminal color changes
  • Lots of doc typos and spelling fixes (and probably some new ones)

Get it here:


Hostname ranges

If you have a lot of similarly named hosts, or which to open all hosts in a subnet, hostname ranges will simplify things. Howerver this also allows to open crazy numbers of windows. To avoid this you can use the “ping_test” to make sure a host is up and ssh is working before opening a terminal window.
You can specify subnets using two syntaxes:
This will also work with a hostname, assuming it resolves to a valid IP. If the IP address is not the network address, only that IP and IPs above that address will be used (e.g. will only use 2 ip addresses).
A range is declared in square brackets. Rules are separated by commas. Ranges use a minus-sign. Ranges can be numeric or alphabetic.
Some examples:

csshX now on Twitter!

Follow brockgr on Twitter

2009-06-18 (Thu)

csshx 0.63 released

Filed under: Software — Gavin Brock @ 11:59 am

Bug Fixes:

  • User@host:port style names should work properly now
  • -x -y arguments documented properly
  • More meaningful warnings if your configured clusters are badly declared

New Feature:

  • “f” in bounds mode, now resizes csshX to take the full screen.

Get it here:


2009-04-30 (Thu)

csshX 0.61 released

Filed under: Uncategorized — Gavin Brock @ 11:41 am

New features:

  • A new “[s]end” mode that allows you to send host-names/connection strings to all windows
  • ssh-options can now be configured or set on the command line.
  • p in bounds mode shows you your current bounds, good for pasting into csshrc
  • Ctrl-a Ctrl-m to minimise all windows including master
  • Ctrl-a Ctrl-h to hide all windows and minimise master (my favourite :-))

Bug fixes:

  • Infinite loop on “enable mode” when some windows have closed.
  • Some document corrections

Available at:


2009-04-20 (Mon)

csshX 0.60 – Resizing and moving window sets…

Filed under: Software — Gavin Brock @ 9:28 am

I just uploaded csshX  v0.60.

Main new feature is draggable bounds changing. This allows you to resize or move your window set after it has been opened. Bounds changing is accessible using Ctrl-a b. Once you select the new area for the windows to use, press Enter to accept it.

* Note, dragging between Spaces on 10.5 does not work. I cannot find a way to ask a window which space it has been moved to, nor tell another window to move to a space.

You can also now hide your window (rather than minimise them) with Ctrl-a h. This is much faster than minimise, and I find Ctrl-a h, Apple-m is a great way to clear my csshX screens away temporarily. Window hiding has also allowed me to improve the retiling performance.

Other changes are minor, including one fix to the nasty infinite loop bug when using enable mode selection.

As always, please report any issues you may come across, preferably on the issues page.

2009-04-09 (Thu)

csshX 0.59 – Multi-monitor support..

Filed under: Software — Gavin Brock @ 11:57 pm

Thanks to some great publicity from Mac OS X Hints, I have received lots of feedback and bug reports.

Number one issue has been multi-monitor support, and problems related to it. This is now working.

To use it, add a –screen n to your command line, where n is the screen number. It will default to screen zero if omitted.

This was actually a nasty problem since there is no quick AppleScript solution, and the only way to get screen counts and sizes is by calling the AppKit frameworks. This is Objective-C only and since csshX is written in perl, I had to mess with the PerlObjCBridge (or as it’s known) to get the NSFrame. To make matters worse, NSFrame is not even Objective C, rather it’s a pure C struct. In the end, I use NSValue to give me a string “description” of the data, and parse this with regex’s (differenet for 10.4 and 10.5 naturally!).

Other changes:

  • Cursor keys now working for terminal applications like more and vim
  • Windows will no longer cover the dock (wherever it happens to be)
  • A –debug option for when things go wrong
  • Some documentation corrections.

The package is available at:

2009-02-11 (Wed)

csshX – Cluster SSH tool using MacOS-X

Filed under: Software — Gavin Brock @ 9:54 pm

One of the all time great sysadmin tools is Cluster SSH. It allows you to open up ssh sessions on multiple machines and send commands to them all through a common master window. It’s a perl script that uses xTerms and Tk.

My problem was that OS-X has a bit half-hearted X11 support and I always wanted a version that used Finally after messing with some Applescript the other day, I realised it is possible to do.

So I have created csshX – my OS-X homage to cssh.


Create a free website or blog at