うめこの開発日記

PCゲームや人工知能関連の話題についての日記

複数のPCを1つのマウス&キーボードで操作する神ソフトウェア【Synergy】

皆さんは複数PCを使っていますか?
自分は研究室でサーバ以外に2台のデスクトップPCを使用してます。(+laptop)

各PCにモニターを1枚づつ割り当てているのですが、わざわざキーボードとマウスをそれぞれ用意したくないですよね、だからと言って隣にあるのにリモート操作もなんだかな...
自分の理想図はこんな感じです。
f:id:aniharu:20190201194008p:plain

このように使いたい人は案外いるのか、ちゃんと実現するソフトウェアがあります。
その名も「Synergy」!以下に公式ページを貼っておきます。

symless.com

公式のページを見れば分かる通りこのソフトウェアはPC間、それもOSも飛び越えて1つのキーボードとマウスで操作することが出来ます。
ただし条件があって、このソフトを使うには、PC達が同じローカルネットワークに所属していなければなりません。(相手のIPアドレスを知る必要)

でも...あれ?buy synergy? $29.00?? 
公式見るとシェアウェアっぽい?でも、githubOSS版もある??

ここら辺はよくわかりませんが、githubのソースからビルド出来たので、備忘録的に残しておきます。
ちなみに今回は、Ubuntu 16.04のみ対象にしています。
まず最初に、Ubuntuでは

$ sudo apt install synergy

でインストールできますが、バージョンが古く、かなり不安定です。今まで、これ使ってて、あまりにも不安定なので今回ソースからビルドした感じです。
Synergyリポジトリはこちら。
github.com

まずはリポジトリをcloneしましょう。自分はcloneはいつもDownloadフォルダでしてるので、その感じで解説していきます...笑

$ cd /home/(username)/Download
$ git clone https://github.com/symless/synergy-core.git
$ cd cd synergy-core

次に依存関係のライブラリをインストールします。

$ sudo apt install qtcreator qtbase5-dev cmake make g++ xorg-dev libssl-dev libx11-dev libsodium-dev libgl1-mesa-glx libegl1-mesa libcurl4-openssl-dev libavahi-compat-libdnssd-dev qtdeclarative5-dev libqt5svg5-dev libsystemd-dev

最後に、ビルド用のフォルダを作成して、ビルドをします。

$ mkdir build
$ cd build
$ cmake ..
$ make

すると、build/binフォルダ内にいくつか実行ファイルが生成されていると思います。
この中で実際に使用するのは、synergy-coreです。以降、ずっと使うファイルなので、Downloadの中のbuildフォルダに残さず、特別なフォルダにいれましょう。
ここではユーザホーム直下にusrフォルダを作成してそこにsynergy-coreをいれます。

$ mkdir /home/(username)/usr
$ mkdir /home/(username)/usr/bin
$ mkdir /home/(username)/usr/synergy_setting
$ cp ./synergy-core /home/(username)/usr/bin/

自分はこのあとusrにPATHを通しましたが、後述のcronを使うなら必要なかったです。
ここまでの、手順を繋げる全てのPCで行ってください。

実行コマンドは2種類あります。
synergy-core --client とsynergy-core --serverです。
なぜ2種類あるかというと、serverはマウスとキーボードが刺さっているPC、clientはそれ以外のPCと差別化しないといけないからです。

ここで以下のような2台のPCと2個の状況を想定します。
f:id:aniharu:20190201201104p:plain
設定ファイルでは、各PCに名前を付けてPC同士の位置関係を記述します。今回の例では、右のPCをpc_right、左のPCをpc_leftとします。
今回は、pc_rightをserverとして扱ってみます。(つまり、右にマウスキーボードをさす)
synergyの設定ファイルを作成します。設定ファイルはserverのみ必要なので、serverのPCで実行してください。
settingフォルダを作成したので、そこに保存します。

$ sudo vim /home/(username)/usr/synergy_setting/synergy.prof

設定ファイルは以下のように記述します。

section:screens
        pc_right:
        pc_left:
end
section:links
        pc_right:
                left = pc_left
        pc_left:
                right = pc_right
end

section:screensには繋げる各PCの名前(自由に決めて良い)を定義します。
section:linksには定義したPC達の位置関係を書いていきます。
ここまでで出来れば、コマンドを実行するだけで動かせるようになっているはずです。

(pc_rightで以下の操作を実行)

$ cd /home/(username)/usr/bin
$ synergy-core --server --config /home/(username)/usr/synergy_setting/synergy.prof --name pc_right

(pc_leftで以下の操作を実行)

$ cd /home/(username)/usr/bin
$ synergy-core --client --name pc_left (pc_rightのipアドレス)

うまくいけば、pc_rightのマウスをpc_leftの画面へ持っていくと、操作ができるようになっています...!!

ただ、これだけでは各PCを起動した後、毎回コマンドを打たなければなりません。
そこで、cronを使用してPCの起動時に自動的にsynergyが実行されるようにしましょう。

(pc_rightで以下の操作を実行)

$ crontab -e

#編集画面で一番下に
@reboot /home/(username)/usr/bin/synergy-core --server --config /home/(username)/usr/synergy_setting/synergy.prof --name pc_right

(pc_leftで以下の操作を実行)

$ crontab -e

#編集画面で一番下に
@reboot /home/(username)/usr/bin/synergy-core --client --name pc_left (pc_rightのipアドレス)


うまく設定が出来れば、各PCが起動時に自動的にsynergyを実行し、1つのマウスキーボードセットで複数のPCを操作できるようになります。
2台のPCと2台のモニターをMac bookから操作...なんて夢のようなことも可能になります...スバラシ...
間違っている点や不明な点があったらコメントで教えてください!!