如何确保 VPN 运行时程序被终止?

如何确保 VPN 运行时程序被终止?

我需要有一个程序不是每当我的 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()

如何使用

  1. 首先打开一个终端,像你习惯的那样运行 VPN,并检查该字符串是否<OpenVPNserver>出现在命令的输出中

    route
    
  2. 如果是,请将上述脚本复制到一个空文件中,并将其保存为prevent_run.py

  3. 使用以下命令测试运行脚本:

    python3 /path/to/prevent_run.py <processname>
    

    (例如,我使用以下命令进行了测试python3 /home/jacob/Bureaublad/prevent_run.py gedit

  4. 如果一切正常,请将其添加到启动应用程序:Dash > 启动应用程序 > 添加。添加命令:

    python3 /path/to/prevent_run.py <processname>
    

笔记

像往常一样(也应该如此),脚本是极其重量轻。它不会添加任何明显的“背景噪音”。

相关内容