اجرای دستور پس از یک دوره مشخص بدون فعالیت
امین | يكشنبه ۲ آبان ۱۳۹۵
ممکنه براتون پیش بیاد که بخواید وقتی مثلا به مدت سه دقیقه از کامپیوترتون استفاده نکردید یک اتفاقی بیفته. مثلا من همیشه یادم میره کلید Numlock رو خاموش کنم، و از اونجایی که در کیبورد من عدد 1 در حالت Numlock خاموش مساوی است با End این موضوع خیلی روی اعصابه، و هر وقت که میزنم End تایپ میکنه 1. بنابراین میام به سیستم میگم هر وقت به مدت ۵ ثانیه کسی بهت دست نزد numlock رو خاموش کن. خیلی کارها میشه با این اسکریپت کرد...
اول از همه پیش نیاز های این اسکریپت رو نصب میکنیم. در توزیع خودتون اینها رو باید نصب کنید: sdotool , xprintidle , wmctrl و بعد اسکریپت زیر رو در یک فایل با پسوند py ذخیره میکنیم:
و بعد مجوز اجرایی به این اسکریپت میدیم.
برای خاموش کردن numlock هم از numlockx استفاده میکنیم که با off خاموش و با on روشن میکنه. مثلا numlockx off
برای استفاده از این اسکریپت به صورت زیر عمل میکنیم:
دستور بالا (باید مکان اسکریپت و نام اون رو طبق چیزی که میخواید تغییر بدید) پس از اجرا شدن (که ما اون رو در کرون میذاریم تا موقع استارتاپ اجرا بشه) پس از ۵ ثانیه استفاده نکردن از سیستم کلید numlock رو خاموش میکنه. شما به جای متغیر زمان و دستور میتونید هر چیز دیگه ای رو بذارید.
اول از همه پیش نیاز های این اسکریپت رو نصب میکنیم. در توزیع خودتون اینها رو باید نصب کنید: sdotool , xprintidle , wmctrl و بعد اسکریپت زیر رو در یک فایل با پسوند py ذخیره میکنیم:
#!/usr/bin/env python3 import subprocess import time import sys idletime = int(sys.argv[1]) command = sys.argv[2] get = lambda cmd: subprocess.check_output(cmd).decode("utf-8").strip() def get_res(): xr = [s for s in get(["xrandr"]).split() \ if "+0+0" in s][0].split("x"); xr[1] = xr[1].split("+")[0] return xr res = get_res() def check(): front = [l for l in get(["xprop", "-root"]).splitlines() \ if "_NET_ACTIVE_WINDOW(WINDOW):" in l][0].split("#")[-1].strip() front = front[:2]+(10-len(front))*"0"+front[2:] try: wdata = subprocess.check_output( ["wmctrl", "-lG"] ).decode("utf-8").splitlines() match = [l for l in wdata if front in l][0].split()[4:6] if match == res: return True else: return False except subprocess.CalledProcessError: pass minus = 0; real_idle = 0; t1 = 0; due_1 = False while True: time.sleep(1) fscreen = check() t2 = int(int(get(["xprintidle"]))/1000) if t2 < t1: minus = 0; real_idle = 0 else: if fscreen == True: minus = t2 real_idle = t2 - minus due_2 = [real_idle > idletime][0] if all([real_idle > idletime, due_1 != due_2]): subprocess.Popen(["/bin/bash", "-c", command]) due_1 = due_2 t1 = t2 |
برای خاموش کردن numlock هم از numlockx استفاده میکنیم که با off خاموش و با on روشن میکنه. مثلا numlockx off
برای استفاده از این اسکریپت به صورت زیر عمل میکنیم:
python3 /pat/to/idle.py 5 "numlockx off" |
دستور بالا (باید مکان اسکریپت و نام اون رو طبق چیزی که میخواید تغییر بدید) پس از اجرا شدن (که ما اون رو در کرون میذاریم تا موقع استارتاپ اجرا بشه) پس از ۵ ثانیه استفاده نکردن از سیستم کلید numlock رو خاموش میکنه. شما به جای متغیر زمان و دستور میتونید هر چیز دیگه ای رو بذارید.
دسته: