لینوکس و من

اجرای دستور پس از یک دوره مشخص بدون فعالیت

نویسنده : امین | تاریخ: 1395/08/3

ممکنه براتون پیش بیاد که بخواید وقتی مثلا به مدت سه دقیقه از کامپیوترتون استفاده نکردید یک اتفاقی بیفته. مثلا من همیشه یادم میره کلید Numlock رو خاموش کنم، و از اونجایی که در کیبورد من عدد 1 در حالت Numlock خاموش مساوی است با End این موضوع خیلی روی اعصابه، و هر وقت که میزنم End تایپ میکنه 1. بنابراین میام به سیستم میگم هر وقت به مدت ۵ ثانیه کسی بهت دست نزد 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 رو خاموش میکنه. شما به جای متغیر زمان و دستور میتونید هر چیز دیگه ای رو بذارید.

لینک‌های مرتبط

 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر
نظرات پس از تایید نشان داده خواهند شد.

برای کپی پیست کردن در متن نظرات کلید shift را نگه دارید و بعد right click کنید.