最初は Ubuntu と Windows でキーボード・マウスを共有させ、次に SSL対応を行なった。
環境は以下の通り
- サーバー
- OS: Ubuntu 12.04
- Synergy: Ubuntu 12.04 のデフォルトの synergy のバージョンは 1.4.10 と古すぎて Windows 用に野良ビルドしたものからは接続できない。 そこでバージョンを合わせるために 2016-05-07 時点の開発中のバージョンをビルドした
- クライアント
- OS: Windows 10 (64bit)
- Synergy: msvc 2015 で野良ビルドしたもの
サーバー(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 /installsynergyd がサービスとして登録される。
次に 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 は暗号化なしでクライアントとサーバーの間でデータをやりとりする。パスワードをタイプすると、ネットワーク上を平文のままパスワードが流れる。また、クライアントがサーバーに接続するとき、認証がまったくない。 例えば、以下の状況のとき他人が勝手にクライアントを操作してしまうかもしれない。
- 自宅ではクライアント(スクリーン名 windows)かサーバー(IP: 192.168.0.2)に接続し、サーバーのキーボード・マウスを使ってクライアントを使っている。
- クライアントでは自動的に synergy クライアントが起動する。
- 自宅の外にクライアントマシンを持って行って、フリーWifi を使う。
- フリーWifiのネットワーク上にIP 192.168.0.2 のマシンが偶然あって、synergy サーバーが偶然動いていて、スクリーン名 windows を偶然受け付けるようになっている。
- 他人のマシン 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.dll
がc:\synergy\plugins
にあるのを確認。- サーバー側の
~/.synergy/SSL/Fingerprints/Local.txt
をc:\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