如何使 TeamViewer 服务按需而不是永远在线?

如何使 TeamViewer 服务按需而不是永远在线?

我使用的是 Linux Mint 19.3,并且希望让 TeamViewer systemd 服务仅在启动 GUI 应用程序 ( /opt/teamviewer/tv_bin/script/teamviewer) 时运行。在 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 脚本来启动服务,但我不太擅长编辑 systemd 服务,并且担心新版本会覆盖我的更改。

问题:

  1. 我可能可以删除服务文件并在 gui 进程启动/结束之前/之后使用 bash 包装器脚本,而不是直接启动其“ExecStart”参数。...如果 gui 进程使用 systemd 调用与服务进程交互,这似乎可能会很糟糕...如果我要保留 systemd 服务文件以获得更好的兼容性,有没有办法配置服务文件仍然启用该服务,但不在启动时运行,但仍然允许通过sudo systemctl [start|stop] teamviewerd?手动控制它

  2. 有没有办法apt为特定包指定安装后脚本。 (例如,当aptetc 安装新版本的 teamviewer 时,可能会重新安装 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

相关内容