Можно ли настроить клиент Synergy для подключения к одному из множества серверов?
У меня есть ноутбук, которым я пользуюсь дома и в офисе. У меня также есть настольные компьютеры (с подключенными клавиатурами и мышами), настроенные в обоих местах. Оба рабочих стола настроены как серверы Synergy, поэтому я могу использовать их устройства ввода на ноутбуке.
Когда я приезжаю в любое место, мне нужно перенастроить ноутбук для подключения к рабочему столу в этом месте. Это всегда включает в себя изменение IP-адреса, к которому пытается подключиться ноутбук.
Было бы особенно полезно, если бы я мог просто ввести список адресов серверов в конфигурации клиента и сделать так, чтобы клиент попытался подключиться к любому из этих адресов, если он обнаружен в сети.
Если это невозможно, есть ли другой способ настроить мои настройки, чтобы мне не приходилось вручную настраивать конфигурацию при перемещении моего ноутбука?
Спасибо!
4 ответа
Я знаю, что это старая запись, но я закончил тем, что написал небольшой сценарий bash, чтобы обработать его для меня, он по существу перебирает ваши 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-секундном кроне так:
* * * * * /usr/local/bin/synergy-client
* * * * * sleep 15 ; /usr/local/bin/synergy-client
Это здорово в том смысле, что я могу подключить свой первый серверный ноутбук, а затем отключить питание моего второго серверного ноутбука, и он будет автоматически подключаться без необходимости что-либо делать с клиентским компьютером.
(не очень безопасный и надежный, но рабочий старт): использование оболочки,
for i in work-server01 home-server01; do
ping -c 1 "$i" && syngergyc "$i"
done
Вы можете сделать что-то подобное в Cygwin или в файле bat, если вы работаете в Windows. Идея была бы такова: ваш компьютер ищет хост и подключается к нему, если может найти его.
(править) Вы бы хотели запустить это явно, а не запускать в фоновом режиме. Вы не хотите идти в кафе или аэропорт, и пусть какой-нибудь счастливчик, злобный незнакомец, примет вашу лапу в качестве клиента.
Я сделал нечто подобное, только в 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"
}
}
}
Этот ответ похож на @noah-birnel's - но без изменения конфигурации синергии. Это требует Linux однако.
Сценарий запускается с правами root по этим направлениям. Это может быть запланировано (cron) или введено в качестве ловушки в конфигурации сети (пост-линия в дистрибутиве в стиле Debian или настраиваемая сетевая служба systemd / и т. Д.)
При тестировании сделайте резервную копию файла hosts, чтобы вы знали, что не вызываете необратимых поломок.
#!/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)