我有一台笔记本电脑,在家和办公室都使用。我在两个地方还安装了台式电脑(带连接键盘和鼠标)。两台台式电脑都设置为 Synergy 服务器,这样我就可以与笔记本电脑共享它们的输入设备。
当我到达任一位置时,我需要重新配置笔记本电脑以连接到该位置的台式机。这总是涉及更改笔记本电脑尝试连接的 IP 地址。
如果我可以在客户端配置中输入服务器地址列表并让客户端在网络上发现这些地址时尝试连接到其中任何一个地址,这将特别有用。
如果这不可能,是否有其他方法可以配置我的设置,以便在重新放置笔记本电脑时不必继续手动调整配置?
谢谢!
答案1
(不是很安全和强大,但是是一个可行的开始):使用 shell,
for i in work-server01 home-server01; do
ping -c 1 "$i" && syngergyc "$i"
done
如果您运行的是 Windows,您可以在 cygwin 或 bat 文件中执行类似操作。思路是:让您的计算机查找主机,如果可以找到,则连接到它。
(编辑)您需要明确地运行它,而不是让它在后台运行。您不会想走进咖啡店或机场,然后让某个幸运的恶意陌生人将您的笔记本电脑当作客户端。
答案2
我知道这是一个旧帖子,但我最终编写了一个小型 bash 脚本来帮我处理这个问题,它基本上循环遍历你的 IP,直到有一个具有活动协同端口的 IP 可用,然后它会尝试使用标志进行连接,--no-restart
因此如果连接被重置它可以重新启动该过程。
要点如下:https://gist.github.com/CrashyBang/c2d910f9e495f4506916e12cf2b6051d
或者在这里编码:
#!/bin/bash
# IP address to cycle through (in order of priority)
ip=( "192.168.20.102" "192.168.20.103" )
# Check if synergy is already connected
if pgrep "synergyc"; then
# Synergy already connected
echo "Synergy is already running."
else
# Loop over ip's
for i in "${ip[@]}"
do
# Ping ip with default synergy port
nc -z "$i" 24800
if [ "$?" -eq 0 ]; then
# Connect synergy if ip available and synergy port active
/usr/bin/synergyc --no-restart -n media -f "$i"
# Use no-restart so if connection is cut synergy stops.
fi
done
fi
我像这样在 15 秒的 cron 上运行它:
* * * * * /usr/local/bin/synergy-client
* * * * * sleep 15 ; /usr/local/bin/synergy-client
这非常棒,因为我可以连接我的第一台服务器笔记本电脑,然后断开第二台服务器笔记本电脑的电源,它会自动连接,而无需对客户端计算机进行任何操作。
答案3
我在 Windows 上做了类似的事情。这是一个 powershell 脚本
$servers = "192.168.101.70","192.168.1.148"
While (1) {
Foreach($s in $servers) {
If (Test-Connection -Cn $s -BufferSize 16 -Count 1 -ea 0 -quie) {
Write-Host "$s is on line"
$Params = @{FilePath='C:\Program Files\Synergy\synergyc.exe'
ArgumentList=@('--enable-crypto','--tls-cert','C:\Users\vissie\AppData\Local\Synergy/SSL/Synergy.pem','--no-restart',$s)
Wait=$True
NoNewWindow=$True}
Start-Process @Params
Write-Host "App stopped...."
} Else {
Write-Host "$s is offline"
}
}
}
答案4
这个答案与@noah-birnel的答案类似 - 但不改变 synergy 的配置方式。但是它确实需要 Linux。
让脚本运行为根按照这些思路。这可以安排(cron)或作为网络配置中的钩子(Debian 风格发行版中的发布行,或定制的 systemd 网络服务/等)
测试时,请备份您的主机文件,以便您知道不会造成不可逆转的破坏。
#!/bin/bash
servername="synergy-server"
#These should be IP addresses.
hostnames="work.ip.add.ress home.ip.add.ress"
hosts="/etc/hosts"
grep $servername $hosts || ( echo ; echo "#synergy server address" ; echo "0.0.0.0 $servername" ) >> $hosts
for server in $hostnames ; do
ping -c 1 "$server" && sed -i -n "s/.*$servername/$server $servername/" $hosts
done
如果您希望脚本中包含主机名而不是 IP 地址,则需要扩展脚本以获取 IP 地址。或者,任何可以获取“动态”主机名的方法都可以(例如,在客户端上托管 dnsmasq 并让脚本更新内部 DNS 记录)