web-dev-qa-db-ja.com

Synergyクライアントは多くのサーバーの1つに接続するように構成できますか?

私は自宅やオフィスで使用するラップトップを持っています。また、両方の場所にデスクトップコンピューター(キーボードとマウスが接続されている)をセットアップしています。両方のデスクトップはSynergyサーバーとして設定されているため、入力デバイスをラップトップと共有できます。

どちらかの場所に到着したら、その場所のデスクトップに接続するようにラップトップを再構成する必要があります。これには常に、ラップトップが接続しようとするIPアドレスの変更が含まれます。

クライアント構成にサーバーアドレスのリストを入力し、ネットワーク上で検出された場合にクライアントにそれらのアドレスのいずれかへの接続を試行させることができれば、特に便利です。

これが不可能な場合、ラップトップを移動するときに手動で構成を調整し続ける必要がないように、セットアップを構成できる別の方法はありますか?

ありがとう!

2
Pryo

これは古い投稿ですが、これを処理するための小さな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

最初のサーバーラップトップを接続してから2番目のサーバーラップトップの電源を切ることができ、クライアントコンピューターに何もしなくても自動的に接続できるという意味で素晴らしいです。

1
Otis Wright

(あまり安全で堅牢ではありませんが、実用的なスタートです):Shellを使用して、

for i in work-server01 home-server01; do
    ping -c 1 "$i" && syngergyc "$i"
done

Windowsを実行している場合は、cygwinまたはbatファイルで同様のことを行うことができます。アイデアは次のようになります。コンピュータにホストを探してもらい、見つかった場合はホストに接続します。

(編集)これをバックグラウンドで実行するのではなく、明示的に実行する必要があります。あなたは喫茶店や空港に足を踏み入れて、幸運な悪性の見知らぬ人にあなたのラッピーをクライアントとして連れて行ってもらいたくありません。

1
Noah Birnel

この答えは@ noah-birnelの答えに似ていますが、相乗効果の構成方法を変更する必要はありません。ただし、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レコードを更新します)。

0
zaTricky