使用 Synergy 从一处控制一切
什么是 synergy?字典将其定义为“不同元素之间的有利结合”。Synergy 实用程序通过在两台或多台计算机之间使用 TCP/IP 网络透明地共享单个键盘和鼠标来实现这种结合。Synergy 还共享选定的文本和剪贴板选择,并完全支持 ICCCM(客户端间通信约定手册)和 Unicode。它自动转换 UNIX 和 Windows 格式之间的换行符,从而可以像在单个系统内一样轻松地跨系统进行剪切和粘贴。此外,它强制屏幕保护程序协同激活和停用。简而言之,每台计算机都使用自己的显示器,您只需将鼠标移出其中一个显示器的边缘即可跳转到另一个显示器。因此,这几乎就像拥有一个跨多台计算机的大桌面。
Synergy 提供了一个软件替代方案,用于替代键盘/鼠标 (KM) 切换器。它目前在 Linux 和 Windows 上运行,并初步支持 Solaris;这些平台的任何组合都可以工作。本文介绍了如何在两个(或多个)Linux 系统之间安装和配置 Synergy。配置通常只需几分钟。
首先,从 SourceForge 下载 Synergy 的最新稳定版本 (sourceforge.net/projects/synergy2)。然后按照通常的步骤
tar xzf synergy-X.Y.Z.tar.gz
cd synergy-
./configure
make
su -c 'make install'
其中 X.Y.Z 是版本号。您也可以安装预构建的 RPM,该 RPM 也可从该站点获得。可执行文件安装在 /usr/local/bin 中,除非您为 configure 提供了不同的位置。在要连接的每台计算机上重复此过程,或者直接复制二进制文件(synergyc 和 synergys)。
接下来,选择服务器,即键盘和鼠标物理连接到的系统。此系统需要一个 Synergy 配置文件,该文件命名服务器、可能连接的计算机(客户端)及其虚拟屏幕排列。这是一个纯文本文件,包含两个必需部分和一个可选部分。这是一个示例配置文件
section: screens guava: mango: end section: links guava: right = mango up = guava mango: left = guava end section: aliases guava: guava.tropical-fruit.org mango: mango.tropical-fruit.org end
screens 部分仅列出服务器主机名和所有允许的客户端的主机名。links 部分描述了计算机的虚拟邻接关系。例如,guava 列出 mango 在其右侧,因此当鼠标移出 guava 的右边缘时,它会出现在 mango 的相反(即左)边缘。每台计算机最多可以列出以下方向之一:左、右、上和下。计算机也可以链接到自身;在本例中,将鼠标移出 guava 的顶部将使鼠标移动到 guava 的底部。
链接不是自动对称的。要使跳转到 mango 可逆,需要将 guava 列为 mango 的左侧。当有两台以上的计算机时,此功能变得更加有用。例如,第三台计算机 banana 可能在 guava 和 mango 的上方,但只能有一个计算机在 banana 的下方。
第三部分 aliases 是可选的。客户端在连接时向服务器提供其主机名(或命令行上指定的名称),以便服务器可以在配置中找到它们。某些系统报告其完全限定域名,其他系统仅列出其主机名,具体取决于其网络配置。aliases 部分顾名思义,提供了每台计算机的已知名称列表。以上配置允许 mango 以 mango 或 mango.tropical-fruit.com 的身份连接。服务器在查找自己的名称时也会检查别名。
您可能已经注意到配置文件未指示 guava 或 mango 是否为服务器。那是因为这样做不是必需的。此配置可以按原样工作,无论哪个系统作为服务器。对于此示例,我们假设 guava 是服务器。使用以上示例作为模板,为您的特定设置准备一个配置文件,并将其保存到 $HOME/.synergy.conf。
现在启动 Synergy 服务器
synergys -f -1
我们稍后介绍选项的含义。服务器会将一些消息记录到 shell,如果一切顺利,它将准备就绪并等待连接。此时,从服务器到自身的配置中的任何链接都应起作用。在 guava 上,我们可以将鼠标移出屏幕顶部边缘,它将跳转到底部边缘。
在服务器运行的情况下,您已准备好连接客户端系统。在您的另一个系统(在本例中为 mango)上,使用以下命令启动客户端
synergyc -f -1 --no-camp guava
将 guava 替换为您的服务器的主机名或网络地址。客户端也会将一些消息记录到 shell,并连接到服务器或退出并显示错误。如果连接成功,您现在可以在两个系统之间使用鼠标、键盘和剪贴板。以相同的方式测试任何其他客户端。
如果命令行选项无效或配置文件有错误,Synergy 会向 shell 写入错误消息并退出。如果服务器或客户端由于某些其他原因失败,您将收到一条以 ERROR 或 FATAL 为前缀的日志消息,简要描述问题。此处空间不允许列出完整的错误列表,但该消息应提供足够的信息来诊断问题。
上面使用的命令行选项指示客户端和服务器应在前台运行,消息应记录到 shell (-f),并且当发生非永久性错误时系统应退出 (-1)。默认情况下,客户端和服务器都在后台运行,消息记录到 syslog,并且系统在非永久性错误后等待几秒钟然后重试。--no-camp 选项告诉客户端在服务器强制关闭成功连接后退出。通常,客户端会清理然后尝试重新连接;稍后会详细介绍。还有一些其他选项可用;使用 --help 查看列表。
一旦您测试了服务器和客户端,您可能希望它们在将来自动启动。Synergy 需要 X 服务器,因此在 X 服务器启动之前启动它将不起作用。自动启动 Synergy 的最简单方法是在您的 $HOME/.xsession 或类似的 X 会话启动脚本中添加一行。通常,您将在没有参数的情况下从 .xsession 运行 Synergy 服务器,并仅使用服务器主机名作为参数运行客户端。它们将在后台运行,并在 X 服务器退出或重新启动时退出。
此设置的问题是 Synergy 在登录屏幕期间未运行,登录屏幕由 XDM 或 GDM 或 KDM 等同类程序之一管理。如果您具有必要的权限,则可以重新配置显示管理器以在 X 服务器启动时启动 Synergy。首先,将 $HOME/.synergy.conf 复制到 /etc/synergy.conf(后者没有前导点),以便显示管理器可以找到它。然后编辑显示管理器的 Xsetup 脚本;不同的发行版将此文件放在不同的位置,因此您可能需要搜索它。在脚本末尾附近但在任何对 exit 的调用之前,添加两行。您可以使用
/usr/bin/killall synergyc /usr/local/bin/synergyc guava
将 guava 替换为您的服务器的主机名以启动客户端,或
/usr/bin/killall synergys /usr/local/bin/synergys启动服务器。不要忘记删除 .xsession 中尝试启动 Synergy 的任何行。出于安全原因,某些显示管理器(XDM 和 KDM,但不是 GDM)会捕获键盘,并且在用户登录之前不会释放键盘。这会阻止 Synergy 服务器在用户登录之前共享鼠标和键盘。但这不会阻止 Synergy 客户端合成鼠标和键盘输入;登录到服务器,然后使用 Synergy 登录到客户端。
如果没有 --no-camp 选项,客户端会每 60 秒尝试连接到服务器,直到成功为止,因此客户端可以在服务器之前启动。您可以在笔记本电脑上利用此功能:始终在笔记本电脑上运行客户端。当它连接到您的家庭网络时,它将在 60 秒内连接到 Synergy 服务器。然后您可以使用服务器的键盘和鼠标代替笔记本电脑的键盘和鼠标。
最后,关于安全性的重要说明。截至撰写本文时,Synergy 没有身份验证,也没有加密保护措施。因为它传输所有鼠标和键盘输入,包括密码,请勿在不受信任的网络上或跨不受信任的网络使用 Synergy。Synergy 的未来版本将解决此缺点。

Chris Schoeneman 是 Pixar Animation Studios 的图形软件工程师。除了 Synergy,他还是 bzflag 的作者。他住在加利福尼亚州伯克利,可以通过 crs@groundhog.pair.com 与他联系。