我需要有一个程序不是每当我的 VPN 运行时,它都会运行。我不想每次都手动关闭它,因为有时我可能会忘记。
我想保证它们不会同时运行。这可能意味着当一个启动时终止另一个,或者当一个打开时阻止另一个打开。
答案1
VPN 运行时阻止应用程序运行的选项
有多种选项可以阻止正在VPN
运行的应用程序:
- 将打开的命令
VPN
与终止应用程序的命令结合起来 - 运行一个小的后台脚本来终止正在
VPN
运行的应用程序
尽管第一个选项看起来最干净,但选择第二个选项有几个理由:
- 该应用程序很可能会在
VPN
启动时被终止,但这并不能阻止应用程序随后意外运行。 - 既然您提到从 GUI 启动
VPN
,那么您必须改变启动方式VPN
,并将其与终止应用程序结合起来。
所以...
下面是一个小的后台脚本,以确保应用程序不会与同时运行VPN
。
如何检查 VPN 是否正在运行
要检查是否VPN
正在运行,答案会检查该字符串是否<OpenVPNserver>
存在于命令的输出中
route
是否如此。请先检查是否如此。如果不是,我们需要找到另一个标识字符串。
脚本的工作原理
每两秒一次,脚本
VPN
通过检查 sctring 是否<OpenVPNserver>
在输出中来检查它是否正在运行:route
(仅)如果是,脚本会检查应用程序是否正在运行,命令如下:
pgrep <application>
如果是,则使用以下命令将其杀死:
kill <pid>
剧本
#!/usr/bin/env python3
import subprocess
import sys
import time
app = sys.argv[1]
def check_ifrunning():
# check if connection is up or down
get_routeinfo = subprocess.check_output(["route"]).decode("utf-8")
if "<OpenVPNserver>" in get_routeinfo:
try:
pid = subprocess.check_output(["pgrep", app]).decode("utf-8").strip()
subprocess.Popen(["kill", pid])
except subprocess.CalledProcessError:
pass
while True:
time.sleep(2)
check_ifrunning()
如何使用
首先打开一个终端,像你习惯的那样运行 VPN,并检查该字符串是否
<OpenVPNserver>
出现在命令的输出中route
如果是,请将上述脚本复制到一个空文件中,并将其保存为
prevent_run.py
使用以下命令测试运行脚本:
python3 /path/to/prevent_run.py <processname>
(例如,我使用以下命令进行了测试
python3 /home/jacob/Bureaublad/prevent_run.py gedit
)如果一切正常,请将其添加到启动应用程序:Dash > 启动应用程序 > 添加。添加命令:
python3 /path/to/prevent_run.py <processname>
笔记
像往常一样(也应该如此),脚本是极其重量轻。它不会添加任何明显的“背景噪音”。