TeamViewerサービスを常にオンラインではなくオンデマンドにする方法は?

TeamViewerサービスを常にオンラインではなくオンデマンドにする方法は?

/opt/teamviewer/tv_bin/script/teamviewer私はLinux Mint 19.3を使用しており、GUIアプリケーション()が起動したときにのみTeamViewer systemdサービスが実行されるようにしたいと思います。 Windowsでは、TeamViewerを選択してスタートアップの種類を自動から手動に変更することで、サービスダイアログボックスで簡単に実行できます。

LinuxにはTeamViewer 15があります(公式ウェブサイトのdebファイルからインストールされます)。 systemdサービスファイルに次のものが含まれていることを確認しました。

$ cat /etc/systemd/system/teamviewerd.service
[Unit]
Description = TeamViewer remote control daemon
After = network.target network-online.target dbus.service
Wants = network-online.target
Requires = dbus.service

[Service]
Type = forking
PIDFile = /var/run/teamviewerd.pid
ExecStart = /opt/teamviewer/tv_bin/teamviewerd -d
Restart = on-abort
StartLimitInterval = 60
StartLimitBurst = 10

[Install]
WantedBy = multi-user.target

そしてログイン中にサービスが自動的に開始されますが、これは望ましくありません。 GUIを起動する前にサービスを起動するための新しいbashスクリプトを書くのは気に入らないが、システムサービスを編集するのに慣れておらず、新しいバージョンが私の変更を上書きするのではないかと心配している。

質問:

  1. 「ExecStart」パラメータを使用して直接起動するのではなく、サービスファイルを削除し、GUIプロセスの開始/終了前後にbashラッパースクリプトを使用できます。しかし、...guiプロセスがサービスプロセスと対話するためにsystemd呼び出しを使用することはお勧めできません。サービスを有効にしますが、起動時には実行されませんが、まだsudo systemctl [start|stop] teamviewerd?で手動で制御できます。

  2. apt特定のパッケージのインストール後にスクリプトを指定する方法はありますか? (たとえば、aptetcがチームビューアの新しいバージョンをインストールすると、systemdサービスと* .desktopファイルが再インストールされる可能性があり、これらの問題を「修正」するためにスクリプトを自動的に実行したいと思います。)私は見ました。これそしてこれスクリプトパスのようなものが必要であることを理解してい/etc/apt/apt.conf.d/custom-hooksますが、a)最後にインストールされたパッケージのリストを渡す方法、またはb)aptによってインストールされたばかりのパッケージを見つける方法がわかりません。 PREフックからリストをキャプチャしてから、それを再キャプチャしてPOSTフックで変更を確認するよりもエレガントな方法はありますか?

  3. 私が考慮しなかったよりエレガントな方法はありますか?

ベストアンサー1

通常、インストールされているデーモンの起動は制御されますsystemctl [enable|disable] <service_name>。それでも起動できます。障害のある手動サービスsystemctl start <service_name>

しかし、一緒にチームビューアこれは違います。毎回チームビューア更新後に/etc/systemd/system/teamviewerd.serviceファイルを上書きし、サービスの起動を有効にします。したがって、ユーザーが望んでいなくてもデーモンは機能します。
私はこれを解決します質問サービスにオーバーライドを追加すると、次のようになります。

systemctl stop teamviewerd.service
mkdir -p /etc/systemd/system/teamviewerd.service.d
cat >/etc/systemd/system/teamviewerd.service.d/override.conf <<EOF
[Unit]
ConditionPathExists=/tmp/allow_teamviewerd
EOF
systemctl daemon-reload

ここでデーモンを起動するには、次のコマンドを実行します。

touch /tmp/allow_teamviewerd
systemctl start teamviewerd.service
rm /tmp/allow_teamviewerd

いつものように停止してください。

systemctl stop teamviewerd.service

おすすめ記事