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
    

synergy を msvc 2015 でコンパイル

SynergyGPL の元でリリースされているフリーソフトウェア。 GPLなので自由にソースコードをダウンロードし、自由に改変し、自由に再配布できる。 ただし、開発元からのダウンロードは有料となっている。GPLのソフトウェアとしてはめずらしい。

ここでは、synergy を msvc 2015 でコンパイルした手順を載せる。ただし、GUIでの設定ツールのコンパイルには失敗している。

事前準備

ここを元に以下のソフトウェアをインストールした。 ただし、バージョンは同じではなく、新しめのものを使っている。

コンパイル

MSVC 2015 の x64 用のコンソールを立ち上げ、環境変数を設定するため以下のbatを実行
SET BONJOUR_SDK_HOME=c:\Program Files (x86)\Bonjour SDK

REM Python 2.7.11
PATH=c:\Python27;%PATH%

REM CMake 3.4.1
PATH=c:\Program Files (x86)\CMake\bin;%PATH%

REM Bonjour SDK
PATH=c:\Program Files\Bonjour SDK\Bin;%PATH%

REM WiX Toolset v3.10
PATH=c:\Program Files (x86)\WiX Toolset v3.10\bin;%PATH%

REM Qt 5.6.0 msvc2015_64
PATH=c:\Qt\Qt5.6.0\5.6\msvc2015_64\bin;%PATH%

REM git in cygwin
PATH=%PATH%;c:\cygwin64\bin
次に synergy のソースコードをチェックアウトする。 ただし、本家のソースコード2016-05-07 の時点では msvc 2015 に対応していない。 そこで代わりにこちらの vc2015-qt55 ブランチを使った。(本家のソースコードの msvc 2015 対応が完了したら本家を使うべき)
git clone --depth=1 https://github.com/sheavner/synergy.git
git checkout vc2015-qt55
コンパイル実行。 -g の後ろの数字により MSVC のバージョンを指定している。synergy/ext/toolchain/commands1.py の win32_generators に値と MSVC のバージョンの対応が載っている。 本家が対応したときには msvc 2015 に対応する数字は 12 ではないかもしれない。
hm conf -g 12
hm build
mingw32-make がないというエラーで終了する。多分、ここに載っている Qt SDK 2010.02 の中に minw32-make が入っているのだと思われるが未確認。 この時点までに作成されたものはチェックアウトしたディレクトリの bin/Release の下に入っている。 インストーラやGUIでの設定ツールは作成されていないが、コマンドラインから使えるツールは作成されていたので、ここでコンパイルは完了とする。

インストール

bin/Release の下のファイルをまるごと別のディレクトリにコピー。

これで完了。
GUIを使わない設定の方法はここに記載した。