Как я могу удостовериться, что программа закрыта, когда VPN работает?

Существует программа, что у меня не должно быть выполнения каждый раз, когда моя VPN работает. Я не хочу обращаться к закрытию его вручную каждый раз, потому что я мог бы забыть когда-то.

Я хотел бы гарантировать, что они не работают одновременно. Это могло означать, уничтожают тот, когда другие запуски, или препятствуют тому один открываться, когда другой открыто.

1
задан 13 February 2016 в 05:06

1 ответ

Опции предотвратить приложение для выполнения, в то время как VPN работает

Существует несколько опций предотвратить запуск приложения когда VPN работает:

  • Объедините команду для открытия VPN с командой для уничтожения приложения
  • Запустите маленький фоновый скрипт для уничтожения приложения если VPN выполнения

Хотя первая опция, кажется, является самой чистой, существует несколько причин выбрать второе:

  • Приложение могло очень хорошо быть уничтожено каждый раз, когда VPN запускается, но это не предотвратило бы приложение для выполнения случайно впоследствии.
  • Так как Вы упоминаете, что запускаете VPN от GUI необходимо было бы изменить путь, как запустить VPN, объединить его с уничтожением приложения.

Так...

Ниже маленького фонового сценария для проверки приложение не работает в то же время, что и VPN.

Как проверить, работает ли VPN

Проверять если VPN работает или нет, проверки ответа если строка <OpenVPNserver> присутствует в выводе команды

route

или нет. Проверьте, если это верно, сначала. В противном случае мы должны найти другую строку идентификации.

Как сценарий работает

  • Однажды в две секунды, сценарий проверяет если VPN работает путем проверки если строка <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. Если все хорошо работает, добавьте его для Запущения Приложений: Тире> Приложения Запуска> Добавляет. Добавьте команду:

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

Примечание:

Как обычно (и как он должен быть), сценарий является чрезвычайно легким весом. Это не добавляет значимого "фонового шума" безотносительно.

2
ответ дан 7 December 2019 в 13:48

Другие вопросы по тегам:

Похожие вопросы: