背景和解决方案概述
这有点长,但是重点是要通过“详细说明”部分进行教育。如果您已经受过教育,请阅读本节以及结论;-)
自1990年代以来,我一直在以各种形式在Linux和Windows上使用Synergy,这个问题经常弹出。有两个常见原因,在这里我只讨论第一个。
通常这是操作系统级别的问题,它是客户端的调度程序优先级,因此解决方案只是增加客户端的优先级。这将改善问题,但总体经验仍将基于调度程序的观点,即更新屏幕的重要性等。最后请参见。
有时还有另一个原因:服务器或客户端进程中的一个或两个都死掉并重新启动,在这种情况下,您应在Synergy服务器和客户端上启用调试级别日志记录,然后从那里进行调试。解决该问题后,请执行上述操作。
详细说明
增加Windows客户端调度程序的优先级
使用Windows 7,我不知道较新版本中的快捷方式。
打开任务管理器(Ctrl-Alt-Esc)并单击“进程”选项卡。
右键单击synergy.exe,单击“设置优先级”,然后选择“高”或“实时”。
重复synergyc.exe。
如果Synergy服务器太慢,则其过程为synergys.exe。
增加Linux客户端调度程序的优先级
在Mac上也可以使用类似的工具。您可能知道如何在GUI中执行此操作,但是我使用命令行。除非您以root(sudo su -
)身份执行以下操作,否则您将不得不(以root身份)玩转visudo
并设置相关的使用权renice
。
ps -eo pid,ni,cmd |\
grep synergy |\
grep -v grep |\
cut -d" " -f2 |\
while read pid; do echo -n $pid" "; done |\
xargs renice -19
您可以复制并粘贴以上内容,也可以通过删除所有\
和换行符将其放在一行上。如果要查看将要执行的实际操作,请将最后一个命令更改为xargs echo renice -19
。
如上所述,这仍然是调度程序关于许多其他进程的重要性的观点的要求。如果您想学一点,可以执行以下操作。
查看Windows进程
打开任务管理器。在“进程”选项卡中,单击“显示所有用户的进程”按钮。然后单击“查看”菜单,然后单击“选择列...”。确保仅勾选以下各项:用户名,CPU使用率,CPU时间,基本优先级,命令行。如果需要,也可以单击“描述”。
您可以拖动窗口以及较大的列以方便阅读。单击列标题以对其进行排序。您也可以右键单击图像名称,例如,转到关联的服务。这对于诸如svchost.exe这样的乏味图像名称很有用。如果您想使用一个非常强大的工具(请小心!),请尝试使用ProcessHacker。
查看Linux进程
运行ps -eo pid,ni,cmd | less
以查看所有正在运行的进程。每行表示一个进程状态,各列是:进程ID,其优先级和相关的命令行。需要注意的是,在Unix中,nice值越低,优先级越高。
结论
事实是,Synergy依赖于很多其他进程来完成其部分工作(例如,处理Pro中的SSL),并且每个进程都具有OS调度程序为其分配的优先级。因此,确实没有简单的解决方案。
即使应用了上面提到的“修复”,进入客户屏幕已经有一段时间了之后,事情通常还是很慢,这是由于整个过程系列都放在了调度程序的后台,所以说话。如今,大多数调度程序都是自适应的,并降低了闲置了一段时间的用户进程的优先级。为了使调度程序再次将其视为重要,需要持续使用一段时间,例如,进入屏幕后将鼠标移至很多位置。这很痛苦,但这就是OS调度程序在非实时操作系统中的工作方式。
有多种方法可以进行调整,但这是针对每个OS(甚至是不同的发行版)的,并且非常脆弱(阅读:在OS修补程序上容易中断)。如果不看代码,我希望Nick&team只能通过将Synergy降至内核驱动程序级别来真正解决此问题,这将使其变得更加脆弱,并导致价格大幅上涨。