Como posso ter certeza de que um programa é eliminado quando a VPN está em execução?

1

Existe um programa que eu preciso que não esteja em execução sempre que minha VPN estiver em execução. Eu não quero recorrer a fechá-lo manualmente toda vez, porque eu posso esquecer algum dia.

Eu gostaria de garantir que eles não estão funcionando ao mesmo tempo. Isso pode significar matar um quando o outro começa, ou impedir que ele se abra quando o outro estiver aberto.

    
por Hatshepsut 09.02.2016 / 09:02

1 resposta

2

Opções para impedir que um aplicativo seja executado enquanto a VPN estiver em execução

Existem várias opções para evitar a execução de um aplicativo quando VPN está em execução:

  • Combine o comando para abrir VPN com o comando para matar o aplicativo
  • Execute um script de segundo plano pequeno para eliminar o aplicativo se VPN for executado

Embora a primeira opção pareça ser a mais limpa, existem algumas razões para escolher a segunda:

  • O aplicativo poderia muito bem ser eliminado sempre que VPN fosse iniciado, mas isso não impediria que o aplicativo fosse executado acidentalmente posteriormente.
  • Desde que você mencionou que você inicia VPN da GUI, Você teria que mudar a maneira como iniciar VPN , combiná-lo com o kill do aplicativo.

Então ...

Abaixo de um script de segundo plano pequeno para garantir que o aplicativo não esteja sendo executado ao mesmo tempo que VPN .

Como verificar se a VPN está em execução

Para verificar se VPN está em execução ou não, a resposta verifica se a string <OpenVPNserver> está presente na saída do comando

route

ou não. Por favor, verifique se este é o caso primeiro. Se não, precisamos encontrar outra string de identificação.

Como o script funciona

  • Uma vez por dois segundos, o script verifica se VPN está sendo executado, verificando se o sctring <OpenVPNserver> está na saída de:

    route
    
  • (Somente) se assim for, o script verifica se o aplicativo está sendo executado, com o comando:

    pgrep <application>
    

    e mata em caso afirmativo, com o comando:

    kill <pid>
    

O script

#!/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()

Como usar

  1. Primeiro abra um terminal, execute a VPN como você está acostumado e verifique se a string <OpenVPNserver> ocorre na saída do comando

    route
    
  2. Se sim, copie o script acima em um arquivo vazio, salve-o como prevent_run.py

  3. Teste- execute o script com o comando:

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

    (eu testei por exemplo com o comando python3 /home/jacob/Bureaublad/prevent_run.py gedit )

  4. Se tudo funcionar bem, adicione-o aos aplicativos de inicialização: Dash > Aplicativos de inicialização > Adicionar. Adicione o comando:

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

Nota

Como de costume (e como deveria ser), o script é extremamente leve. Não acrescenta nenhum "ruído de fundo" perceptível.

    
por Jacob Vlijm 09.02.2016 / 16:09