前提環境
- OSはCentOS7。デスクトップ環境。ターミナルも使用します。
- この記事では Synergy のクライアントをサービスとして自動起動させます。が、他のもの(自作のシェルなど)も同様の方法でサービス化出来ます
Synergyとは
Synergyは異なるPC間でマウスとキーボードを共有できるソフトです。例えばWindowsPCに接続したマウスとキーボードを使って、WindowsPCとCentOSのPCの画面を行き来して操作出来ます。WindowsPCのSynergyは自動起動してくれますが、CentOSでは自動起動してくれないっぽいので、今回systemctlを使って自動起動させます。手順
1. サービス(synergyc)起動のコマンドラインを確認する
今回はsynergy(のクライアント)を自動起動するので、synergyをGUIで起動して起動オプションを確認、それをコンソールで実行してsynergyが動作するか確認しました。
デスクトップのアプリケーション→アクセサリ→Synergy で起動。
ps -ef|grep synergy
steam 7046 1 0 10:04 ? 00:00:00 synergy
steam 7053 7046 0 10:04 ? 00:00:00 /usr/bin/synergyc -f --no-tray --debug INFO --name DG33FB 192.168.112.20:24800
steam 7062 2868 0 10:04 pts/1 00:00:00 grep --color=auto synergy
これでsystemdに登録するコマンドラインがわかりました。
※ちなみに、今回 synergy のクライアントを設定するのでsynergyではなくsynergy"c"を設定します
2. 設定ファイルを書く
設定ファイルをunitと言うらしいです。
sudo vi /usr/lib/systemd/system/synergyc.service
sudo vi /etc/systemd/system/synergyc.service
を実行し下記を記述します。
[Unit]
Description = Synergy_client
[Service]
ExecStart=/usr/bin/synergyc -f --no-tray --debug INFO --name DG33FB 192.168.112.20:24800
Restart=always
Type=simple
[Install]
#WantedBy=graphical.target
WantedBy=multi-user.target
- 全体的に、=の前後の空白はあってもなくてもよい。
- #でコメントアウト出来るっぽい
- Description ←説明。なんか適当で良い。空白あっても大丈夫
- ExecStart ←起動(自動起動)のコマンド。ここに1.で調べたコマンドを記述する
- Restart ← synergyが落ちた時も自動起動させる。必須ではない(Synergyはそうそう落ちないと思う)が設定しておく。
- Type ←「ユニットプロセスの起動タイプ」だそうです。詳細
- WantedBy ←multi-user.target で従来のランレベル3、graphical.target でランレベル5で起動するらしい。けど違いはわかりませんでした。
- ファイルのパーミッションは 644
そして、下記コマンドでsystemdに反映させます。
systemctl daemon-reload
※初回はエラーになるかも?
3. 設定確認
自動起動させる前に、ステータス確認、手動起動・停止、自動起動設定・無効設定を行って正常に動作するか確認します。
コマンド一覧
- systemctl status synergyc.service ←ステータス確認
- systemctl start synergyc.service ←手動起動
- systemctl stop synergyc.service ←停止
- systemctl enable synergyc.service ←自動起動設定
- systemctl disable synergyc.service ←自動起動無効設定
※毎回 synergyc.service と入力するのは大変ですが、synまで入力してTABキーを押すと補完されて楽です。
####ステータス表示確認
$ systemctl status synergyc.service
● synergyc.service - Synergy client
Loaded: loaded (/usr/lib/systemd/system/synergyc.service; disabled; vendor preset: disabled)
Active: inactive (dead)
1つ目の disabled =自動起動が無効
inactive (dead) = synergyc 停止
####手動起動
systemctl start synergyc.service
ステータスを確認します
$ systemctl status synergyc.service
● synergyc.service - Synergy client
Loaded: loaded (/usr/lib/systemd/system/synergyc.service; disabled; vendor preset: disabled)
Active: active (running) since 水 2018-03-14 10:49:48 JST; 7s ago
Main PID: 2810 (synergyc)
CGroup: /system.slice/synergyc.service
└─2810 /usr/bin/synergyc -f --no-tray --debug INFO --name DG33FB 192.168.112.20:24800
active (running) になり、起動しました
####停止
$ systemctl stop synergyc.service
$ systemctl status synergyc.service
● synergyc.service - Synergy client
Loaded: loaded (/usr/lib/systemd/system/synergyc.service; disabled; vendor preset: disabled)
Active: inactive (dead)
inactive (dead) になり、停止しました
####自動起動設定
$ systemctl enable synergyc.service
Created symlink from /etc/systemd/system/multi-user.target.wants/synergyc.service to /usr/lib/systemd/system/synergyc.service.
$ systemctl status synergyc.service
● synergyc.service - Synergy client
Loaded: loaded (/usr/lib/systemd/system/synergyc.service; enabled; vendor preset: disabled)
Active: inactive (dead) since 水 2018-03-14 11:12:47 JST; 4s ago
Main PID: 3096 (code=exited, status=0/SUCCESS)
enabled になりました。これで自動起動するはず
####自動起動無効設定
$ systemctl disable synergyc.service
Removed symlink /etc/systemd/system/multi-user.target.wants/synergyc.service.
$ systemctl status synergyc.service
● synergyc.service - Synergy client
Loaded: loaded (/usr/lib/systemd/system/synergyc.service; disabled; vendor preset: disabled)
Active: inactive (dead)
disabled になりました。自動起動無効となりました
##5. 自動起動確認
- 前章の「自動起動設定」を行う
- サーバーOSを再起動(sudo reboot)
- サービス(synergy)の起動確認
サービスが起動していることを確認します。
synergyc の場合下記項目を確認します。
- ps -ef|grep synergyc で synergc が表示されるか?
- synergy なので、マウス・キーボードが共有できているか?
気になったこと
- synergyc の起動が遅い。デスクトップが表示されてからマウスカーソルが移動出来るようになるまで1分近くかかる
- WantedBy を graphical.target にしても multi-user.target にしても synergy の起動タイミングが変わらないっぽい
参考にした記事
「Systemd」を理解する ーシステム管理編ー | ギークを目指して
Systemd入門(4) - serviceタイプUnitの設定ファイル - めもめも
systemctl, systemd について詳しく解説されています。
9.6. システムのユニットファイルの作成および変更 - Red Hat Customer Portal
公式?