Blocker script sends notification before killing a program.

This commit is contained in:
2021-10-14 14:32:19 -04:00
parent ba8dfef3fc
commit f6f0715cb3

52
blocker.py Normal file → Executable file
View File

@@ -8,11 +8,9 @@ import sys
import time import time
XDOTOOL_CMD = ["xdotool", "getactivewindow", "getwindowname", "getwindowpid"] BLOCKED_BROWSER_WORDS = ["mogelpower", "nitter", "spon"]
BLOCKED_BROWSER_WORDS = []
def is_window_blocked(window_name, blocked): def is_window_blocked(window_name, blocked):
for b in blocked: for b in blocked:
if type(b) is str and b == window_name: if type(b) is str and b == window_name:
@@ -22,19 +20,53 @@ def is_window_blocked(window_name, blocked):
return False return False
def get_active_window_name_and_pid():
CMD = ["xdotool", "getactivewindow", "getwindowname", "getwindowpid"]
p = subprocess.run(CMD, capture_output=True)
if p.returncode != 0:
return "", ""
window_name, window_pid, _ = p.stdout.decode().split("\n")
return window_name, window_pid
def find_window_name(window_name):
CMD = ["xdotool", "search", window_name, "getwindowpid"]
p = subprocess.run(CMD, capture_output=True)
if p.returncode != 0:
return ""
l = p.stdout.decode().split("\n")
print(l)
def init_kill_sequence(blocked):
count = 5
while True:
window_name, window_pid = get_active_window_name_and_pid()
if not is_window_blocked(window_name, blocked):
notify(f"{window_name} is okay. Return from kill sequence.")
return
notify(f"{window_name} is blocked. Kill in {count} seconds.")
if count == 0:
p = psutil.Process(int(window_pid))
p.kill()
return
time.sleep(1)
count -= 1
def notify(message):
CMD = ["runuser", "-u", "felixm", "notify-send", message]
p = subprocess.run(CMD)
def main(): def main():
blocked = [re.compile(f"{word}.*(Firefox|Chromium)", flags=re.IGNORECASE) blocked = [re.compile(f"{word}.*(Firefox|Chromium)", flags=re.IGNORECASE)
for word in BLOCKED_BROWSER_WORDS] for word in BLOCKED_BROWSER_WORDS]
while True: while True:
time.sleep(1) time.sleep(1)
p = subprocess.run(XDOTOOL_CMD, capture_output=True) window_name, window_pid = get_active_window_name_and_pid()
if p.returncode != 0:
continue
window_name, window_pid, _ = p.stdout.decode().split("\n")
if is_window_blocked(window_name, blocked): if is_window_blocked(window_name, blocked):
p = psutil.Process(int(window_pid)) init_kill_sequence(blocked)
p.kill()
print(f"Kill {window_name}")
if __name__ == "__main__": if __name__ == "__main__":