VPNが実行されているときはいつでもnot実行する必要があるプログラムがあります。いつか忘れてしまうかもしれないので、毎回手動で閉じることに頼りたくありません。
それらが同時に実行されていないことを保証したいと思います。これは、もう一方が開始したときに一方を強制終了するか、もう一方が開いているときに一方が開かないようにすることを意味します。
VPN
の実行中にアプリケーションが実行されないようにするためのいくつかのオプションがあります。
VPN
を開くコマンドとアプリケーションを強制終了するコマンドを組み合わせるVPN
が実行された場合は、小さなバックグラウンドスクリプトを実行して、アプリケーションを強制終了します最初のオプションが最もクリーンなようですが、2番目のオプションを選択する理由はいくつかあります。
VPN
が起動するたびにアプリケーションが強制終了される可能性は十分にありますが、それでもアプリケーションが後で誤って実行されるのを防ぐことはできません。VPN
を開始すると述べているので、VPN
の開始方法を変更して、アプリケーションの強制終了と組み合わせる必要があります。だから...
アプリケーションがVPN
と同時に実行されていないことを確認するための小さなバックグラウンドスクリプトの下。
VPN
が実行されているかどうかを確認するために、回答は文字列<OpenVPNserver>
がコマンドの出力に存在するかどうかを確認します。
route
か否か。最初にこれが当てはまるかどうかを確認してください。そうでない場合は、別の識別文字列を見つける必要があります。
スクリプトは、2秒に1回、次の出力にsctring <OpenVPNserver>
が含まれているかどうかを確認することにより、VPN
が実行されているかどうかを確認します。
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
を使用してテストしました)
すべてが正常に機能する場合は、スタートアップアプリケーションに追加します:ダッシュ>スタートアップアプリケーション>追加。次のコマンドを追加します。
python3 /path/to/prevent_run.py <processname>
いつものように(そしてそうあるべきですが)、スクリプトは非常に軽量です。目立った「バックグラウンドノイズ」はまったく追加されません。