2016-05-08

GUI を使わない synergy の設定

Synergy の設定方法についていろんなブログを見ると GUI での設定方法ばかり(例えばこことかこことか)が載っている。 しかし、msvc 2015 で野良ビルドしたものにはGUIツールが作成されない。(mingw32-makeを使えるようにすれば作成されたかもしれないが、面倒なので確認していない) そこで、GUIを使わずに synergy の設定をすることにした。

最初は Ubuntu と Windows でキーボード・マウスを共有させ、次に SSL対応を行なった。

環境は以下の通り
  • サーバー
    • OS: Ubuntu 12.04
    • Synergy: Ubuntu 12.04 のデフォルトの synergy のバージョンは 1.4.10 と古すぎて Windows 用に野良ビルドしたものからは接続できない。 そこでバージョンを合わせるために 2016-05-07 時点の開発中のバージョンをビルドした
  • クライアント

サーバー(ubuntu)側の設定

し synergys を適当なところに置いた。
以下の内容のファイルを $HOME/.synergy.conf に置いた。
section: screens
 ubuntu:
 windows:
end
section: links
 ubuntu:
  right = windows
 windows:
  left = ubuntu
end
section: screens でスクリーンの名前を定義。ここでは ubuntu と windows の2つを使う。
section: links でスクリーンの位置関係を定義。ubuntu の右側は windows で、windows の左側は ubuntu とする。

synergys を起動するときに引数に --name ubuntu を渡して自分のスクリーン名を指定する。
synergys --name ubuntu
($HOME/.synergy.confのスクリーン名 ubuntu をサーバーのホスト名と同じ名前に変更すれば --name ... は不要)

クライアント(Windows)側の設定

c:\synergy に synergyc.exe, synergyd.exe、その他の様々なDLLを入れる。

まず最初にコンソール上でサーバーに接続できるか確認。
c:\synergy\synergyc.exe --name windows サーバーのIPアドレス
(サーバー側の$HOME/.synergy.confのスクリーン名 windows をクライアントのホスト名と同じ名前に変更すれば --name ... は不要)
サーバー側で synergys が動いていてスクリーン名が一致すればこれで動くはず。

この状態だとログインするたびにコンソール上で synergyc を動かす必要がある。また、ログイン画面や、UAC のダイアログ画面ではキーボード・マウスの共有が効かない。 そこでサービスとしてOS起動時に自動起動させる。

コンソールを管理者モードで起動し、以下のコマンドを実行する。
c:\synergy\synergyd.exe /install
synergyd がサービスとして登録される。
次に synergyd が起動するコマンドを指定する。
レジストリエディタを起動し、以下の値を設定する。
  • \\HKEY_LOCAL_MACHINE\Software\Synergy\Command を作成し c:\synergy\synergyc.exe --name windows サーバーのIPアドレスを設定
  • \\HKEY_LOCAL_MACHINE\Software\Synergy\Elevate を作成し、文字列 1 を設定
以下のコマンドでサービスの再起動。
net stop synergy
net start synergy
キーボード・マウスの共有が効いているか確認し、念のため再起動してログイン画面でも効いているかの確認を行った。

SSL対応

デフォルトでは synergy は暗号化なしでクライアントとサーバーの間でデータをやりとりする。パスワードをタイプすると、ネットワーク上を平文のままパスワードが流れる。
また、クライアントがサーバーに接続するとき、認証がまったくない。 例えば、以下の状況のとき他人が勝手にクライアントを操作してしまうかもしれない。
  1. 自宅ではクライアント(スクリーン名 windows)かサーバー(IP: 192.168.0.2)に接続し、サーバーのキーボード・マウスを使ってクライアントを使っている。
  2. クライアントでは自動的に synergy クライアントが起動する。
  3. 自宅の外にクライアントマシンを持って行って、フリーWifi を使う。
  4. フリーWifiのネットワーク上にIP 192.168.0.2 のマシンが偶然あって、synergy サーバーが偶然動いていて、スクリーン名 windows を偶然受け付けるようになっている。
  5. 他人のマシン 192.168.0.2 のキーボード・マウスから自分のクライアントマシンが操作されてしまう。

サーバー(Ubuntu)側の設定

https://wiki.archlinuxjp.org/index.php/Synergy を参考に以下のことを行なった。
  • libns.so~/.synergy/plugins に置く。
  • SSL証明書とフィンガープリントを作成
    mkdir -p ~/.synergy/SSL/Fingerprints
    openssl req -x509 -nodes -days 365 -subj /CN=Synergy -newkey rsa:1024 -keyout ~/.synergy/SSL/Synergy.pem -out ~/.synergy/SSL/Synergy.pem
    openssl x509 -fingerprint -sha1 -noout -in ~/.synergy/SSL/Synergy.pem > ~/.synergy/SSL/Fingerprints/Local.txt
    sed -e "s/.*=//" -i ~/.synergy/SSL/Fingerprints/Local.txt
    
  • synergys を --enable-crypto オプション付きで起動
    synergys --name ubuntu --enable-crypto
    

クライアント(Windows)側の設定

  • ns.dllc:\synergy\plugins にあるのを確認。
  • サーバー側の ~/.synergy/SSL/Fingerprints/Local.txtc:\synergy\SSL\Fingerprints\TrustedServers.txt にコピー。
    mkdir c:\synergy\SSL
    mkdir c:\synergy\SSL\Fingerprints
    copy Local.txt c:\synergy\SSL\Fingerprints\TrustedServers.txt
    
  • レジストリ \\HKEY_LOCAL_MACHINE\Software\Synergy\Command に以下の値を設定
    c:\synergy\synergyc.exe --name windows --profile-dir c: --enable-crypto サーバーのIPアドレス
    
    (--profile-dir の引数に synergy\plugins を追加した場所に ns.dll があり、synergy\SSL\Fingerprints を追加した場所に TrustedServers.txt がある必要がある。)
  • サービスの再起動
    net stop synergy
    net start synergy
    

No comments:

Post a Comment