Blocker script sends notification before killing a program.
This commit is contained in:
52
blocker.py
Normal file → Executable file
52
blocker.py
Normal file → Executable 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__":
|
||||||
|
|||||||
Reference in New Issue
Block a user