Sharing mouse and keyboard using synergy-plus
When you have to use multiple computers at the same time your desk tends to start filling with multiple mouses and keyboards. KVM switches are a possible solution but good ones aren’t that cheap and they usually make painful noises when switching to another machine. I’d like to have a solution where I can continue using all the monitors connected to each machine and just share my mouse and keyboard, preferably the mouse and keyboard already built into my Macbook Pro. With many thanks to Chris Schoeneman there already is such a solution, called Synergy.
Synergy is best described as a KVM switch over network, just without the M (for monitor), but in exchange with shared clipboard and across platforms with support for Windows, Unix/Linux and Mac OS X. Switching machines is as easy as moving the mouse cursor „across“ the border of the screens… just that. The keyboard follows the active machine that currently has the mouse cursor on its screen.
The sad thing about synergy is that there seems to be no more active development and so a couple of forks have been created with Synergy+ (synergy-plus) apparently being the most active one.
Installation
Although there are packages for synergy both for ubuntu and macports there are a lot of outstanding bugs especially for the OSX version so I directly started using Synergy+ by downloading the precompiled packages for Mac and Linux (x86_64.deb). Installation went fine without any problems so the next thing was considering the desired configuration.
Configuration
Synergy uses a client/server model. The server is the host with the attached keyboard and mouse that are to be shared across all the machines. The server is also the only host that needs a configuration file. All the clients only need to know the hostname of the server, but more on that in a minute. Following is a sample configuration for two hosts, the client (desktop pc named linux.home) on left of the server (my Macbook Pro called notebook.home):
section: screens notebook: desktop: end section: aliases notebook: notebook.local notebook.home desktop: linux.home end section: links notebook: right = desktop desktop: left = notebook end section: options switchCorners = all switchCornerSize = 100 end |
The configuration is really straight forward. In the „screens“ section you define the hosts in your setup. In most cases you name your screens just after the appropriate hostnames. When you do not want to take you hostname as a screen name or have the problem that OSX tends to forget about the domain that was distributed by DHCP you can setup an „aliases“ section to give a list of hostnames for each screen. NB: Both client and server command take an optional argument „––name“ to manually set the screen name for host.
The „links“ section sets the position of the screens. It is important to give the positions for all the screens, even though it should be clear that if screenA is left of screenB then of couse screenB is right of screenA. Not giving all the directions will result in the mouse trapped on one of the screens.
The „options“ section is for miscellaneous settings. In the above configuration I disabled all the screen corners (specified as 100px around the edges) for screen switches. In OSX there are a lot of features accessable by moving the mouse into one of the screen corners. Without these options the mouse would change the screen before reaching the corner unless you hit precisely the edge… not really suitable for daily use.
Many more informations about what else to configure can be found on the original synergy sourceforge page.
Getting startet
When all the settings are finished we save them into a file called .synergy.conf in the users home directory or in /etc/synergy.conf. Different locations can be specified using the „––config“ option of the synergy server command. Now we start synergy on the server host by invoking „synergys -f“ (note the s at the end, the option -f is for preventing the process from daemonizing). When there are no reported errors we can start synergy on the client(s) using „synergyc -f hostname_of_the_server“.
You should be able to move your mouse across the screens now. When everything works fine, you can omit the -f and let the synergy processes daemonize into background.
Problems with mouse scrolling
I had the problem that mouse scrolling was not working on the client. While moving the mouse wheel I could see these messages in the client’s output:
WARNING: Wheel scroll delta (6) smaller than threshold (120)
The problem is fixed by starting the client with the argument „––yscroll 6“ which sets the scrolling threshold to 6.
Autostart synergy in Ubuntu
There is a howto that describes how to start synergy with gdm so you can use synergy even at login time. This way you can put away the client’s keyboard and mouse altogether and just take them out when something went wrong.
Mac keyboard on linux client
When using my Macbook Pro for keyboard and mouse input I had problems typing special characters in the linux client, that are reached using the Alt or Option key. Linux uses the Alt key completly different so typing the „@“ (option + l) was impossible. You can fix this by first changing the keyboard model in ubuntu to „Macbook/Macbook Pro“ (use Intl model when you have an international keyboard layout).
Now you need another key for reaching these third level keymappings. I use the „keypad enter“ between the right apple key and the cursor keys on my keyboard. Thankfully linux already has an option for that. Using Ubuntu you open your keyboard preferences, on the „Layouts“ tab you open the layout options, there you open the options for „key to choose 3rd level“ and check „Enter on keypad“. You can even make this setting system-wide. After that, you can use the „keypad enter“ key just as the option key in OSX to type those special characters.