This morning I read in the Code Project newsletter about Synergy, an open source software package that allows you to share a single keyboard and mouse between multiple workstations (each with their own monitor(s)). Since I regularly work on three different systems in any given day, and I often find myself using the wrong keyboard while staring at the screen and wondering why no text is showing up, this looked like just the thing for me.

Synergy lets you configure one of the systems as a server (the one to which the keyboard and mouse that you want to share are connected), and any number of other systems as clients. On the server, you describe where each screen is in relation to all of its neighbors. Then, as you move the mouse to the edge of one monitor that borders another, focus shifts to that monitor (and the system attached to it).

Here’s the main configuration panel on Windows:

You install Synergy on every computer involved, and then use this panel to designate the server (as shown above) or client. On the server, you then click the “Configure…” button:

This dialog is somewhat counter-intuitive. The first thing you must do is add “Screens” by pressing the “+” button under that listbox. You must add the server’s name and all of the clients here.

Then, in the bottom section, you start by entering the data in the “0 to 100%” line of edit boxes. They don’t explain what some of this means: the percentages refer to how much of that border is adjacent to the other monitor (which allows you to have, for instance, one large monitor with two smaller ones stacked vertically beside it — each might use 50% of the larger screen’s border). The first dropdown indicates which side (left, right, top, or bottom) of the system selected in the next dropdown is adjacent to the system selected in the last dropdown. Once you’re done figuring that out, don’t forget to press the “+” sign below it, or it won’t be saved! Design note: save everything I type when I press OK — unless I delete it, please.

Notice how you have to define both relationships for every pair of adjacent monitors: “ninkasi is to the right of enlil”, and “enlil is to the left of ninkasi.” This lets you specify varying percentages — but if you forget to define both directions, your focus will get trapped in one of the sessions. Fortunately, all you need to do is terminate that session to restore focus to the server.

Once you have all of the relationships set up, press “Test”. Then go to each client, run Synergy, enter the server (first time only) and press “Test”. If you encounter no errors, you’ll be able to move the mouse all the away across all of your monitors. Try typing into applications on each one — you can even copy/paste between them! Text or graphics! Synergy uses TCP/IP to transfer the clipboard, as well as mouse and keyboard events.

I was impressed that this seems to work well on Vista x64, even though it’s a 32-bit executable. It seamlessly ties my 64-bit systems together with an old 32-bit XP system as well. It’s supposed to work with OS/X and Unix systems, too — but I haven’t tried those out yet.

Synergy nicely handled the dual monitor configuration on my server system, detecting the right edge as being the right side of my laptop monitor, even though my second monitor is on the left and is configured as primary.

I tried setting up hot keys so I could switch monitors without using the mouse, but this seemed to work very sporadically. After playing around with it for a while, I managed to render my right parenthesis unusable. Shift+0 was just a dead key. Rebooting sorted that, though. Oh well, reaching for the mouse is still easier than reaching for a different keyboard.

To run for real, press “Start”, which removes the UI and shows a taskbar icon instead. You can also configure AutoStart from the button on the main panel. Starting on login worked well for me, but starting on system startup didn’t seem to take (on Vista x64). That means, of course, that I still have to keep my other keyboards handy in order to login.

I also had trouble connecting a client that had the Cisco VPN client running, even though I could map shared drives on that system. In fact, if the workstation with the active VPN had any drive on another workstation mapped, I couldn’t connect that workstation, either. However, if I got all systems connected before starting the VPN client, all worked well. So, my daily routine will be to login to the server system first, then login to each of my clients, then start the VPN, then play Evil Genius all day.

MUWAHAHAHA!

[Via MUO]