क्या कोई प्रोग्राम है जो कार्यक्षेत्र-निर्भर स्टॉपवॉच के रूप में काम कर सकता है? मैं जानना चाहता हूं कि मैंने हर दिन प्रत्येक कार्यक्षेत्र में कितना समय बिताया है।
संपादित करें: मैं एकता का उपयोग कर रहा हूं।
क्या कोई प्रोग्राम है जो कार्यक्षेत्र-निर्भर स्टॉपवॉच के रूप में काम कर सकता है? मैं जानना चाहता हूं कि मैंने हर दिन प्रत्येक कार्यक्षेत्र में कितना समय बिताया है।
संपादित करें: मैं एकता का उपयोग कर रहा हूं।
जवाबों:
अच्छा प्रश्न!
नीचे दी गई स्क्रिप्ट एक लॉगफ़ाइल बनाती है: ~/viewport_log.txt
आपके घर की निर्देशिका में, जहाँ यह वर्तमान सत्र के व्यूपोर्ट (कार्यक्षेत्र) के प्रति व्यूपोर्ट के उपयोग समय की रिपोर्ट करती है।
रिपोर्ट प्रति दो सेकंड में एक बार अपडेट की जाती है, जैसे (त्वरित रन में):
workspace1 0:00:24
workspace2 0:00:05
workspace6 0:00:04
workspace8 0:00:05
प्रारूप में
hours:minutse:seconds
जैसा कि आप देख सकते हैं, मैंने केवल 1, 2, 6 और 8 का उपयोग किया है।
स्क्रिप्ट wmctrl -d
वर्तमान व्यूपोर्ट डेटा प्राप्त करने के लिए कमांड का उपयोग करती है , इसलिए आपको इसे पहले इंस्टॉल करने की आवश्यकता है:
sudo apt-get install wmctrl
फिर:
workspace_log.py
इसे कमांड द्वारा टेस्ट करें:
python3 /path/to/workspace_log.py
विभिन्न कार्यक्षेत्रों के माध्यम से नेविगेट करें और ~/viewport_log.txt
परिणाम देखने के लिए फ़ाइल खोलें (वैकल्पिक रूप से, cat ~/viewport_log.txt
सुविधाजनक पढ़ने के लिए एक टर्मिनल में चलाएं , क्योंकि लॉग प्रति सेकंड एक बार अपडेट किया जाता है)।
यदि सभी अपेक्षा के अनुरूप काम करते हैं, तो अपने स्टार्टअप एप्लिकेशन में कमांड जोड़ें। चूंकि यह स्क्रिप्ट के बहुत जल्दी शुरू होने (डेस्कटॉप पूरी तरह से लोड होने से पहले) होने की संभावना है, इसलिए संभवतः आपको स्टार्टअप एप्लिकेशन के रूप में काम करने के लिए स्टार्टअप कमांड में एक छोटा सा ब्रेक जोड़ने की जरूरत है, इसलिए कमांड तब है:
/bin/bash -c "sleep 15&&python3 /path/to/workspace_log.py"
इसे स्टार्टअप एप्लिकेशन में जोड़ने के लिए: डैश> स्टार्टअप एप्लिकेशन> जोड़ें, और कमांड जोड़ें।
import subprocess
import os
import time
# define / clear log file
home = os.environ["HOME"]
logfile = home+"/"+"viewport_log.txt"
open(logfile, "wt").write("")
vplist = []
def get_res():
# get resolution
xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
pos = xr.index("current")
return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]
def get_dt():
# get the current viewport
res = get_res()
vp_data = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
dt = [int(n) for n in vp_data[3].split("x")]
cols = int(dt[0]/res[0])
curr_vpdata = [int(n) for n in vp_data[5].split(",")]
curr_col = int(curr_vpdata[0]/res[0])+1; curr_row = int(curr_vpdata[1]/res[1])
return str(curr_col+curr_row*cols)
def time_format(s):
# convert time format from seconds to h:m:s
m, s = divmod(s, 60)
h, m = divmod(m, 60)
return "%d:%02d:%02d" % (h, m, s)
current_time1 = float(time.time())
curr_dt1 = get_dt()
while True:
time.sleep(2)
curr_dt2 = get_dt()
if curr_dt2 == curr_dt1:
current_time2 = float(time.time())
span = current_time2-current_time1
vp = "workspace "+curr_dt1+" . "*10
vplist.sort(key=lambda x: x[0])
if not vp in [v[0] for v in vplist]:
vplist.append([vp, span])
else:
index = vplist.index([vplist[i] for i in range(len(vplist)) if vplist[i][0] == vp][0])
vplist[index][1] = float(vplist[index][1])+span
with open(logfile, "wt") as out:
for item in vplist:
out.write(item[0]+" "+time_format(item[1])+"\n")
current_time1 = current_time2
curr_dt1 = curr_dt2
स्क्रिप्ट उन क्षणों के उपयोग किए गए कार्यस्थानों (जैसे कि यह है, लाइन में अंतराल time.sleep(2)
) को दो क्षणों के बीच सटीक समय अवधि की गणना करता है यदि दोनों क्षणों पर कार्यस्थान समान हैं, तो समय को संबंधित कार्यक्षेत्र में जोड़ा जाता है: कुल इस्तेमाल किया हुआ समय।
यदि दोनों क्षणों पर कार्यक्षेत्र अलग-अलग हैं, तो यह स्पष्ट है कि कार्यक्षेत्र स्विच था और समय को कार्यक्षेत्र के उत्पादक समय में जोड़ा गया है; अवलोकन में समय ~/viewport_log.txt
इसलिए प्रति कार्यक्षेत्र प्रति सेकंड दो सेकंड के लिए गोल है।
पृष्ठभूमि में ऊपर की स्क्रिप्ट चलाना, आप एक कुंजी संयोजन के तहत नीचे स्क्रिप्ट डालकर वर्तमान उपयोग समय (ओं) को कार्यक्षेत्र में देख सकते हैं:
#!/bin/bash
lines="$( cat ~/viewport_log.txt )"
zenity --info --title='Usage per Viewport' --text="$lines"
view_vplog.sh
इसे चलाएं, जबकि पहला स्क्रिप्ट कमांड द्वारा पृष्ठभूमि में चल रहा है :
sh /path/to/view_vplog.sh
शॉर्टकट कुंजी संयोजन के साथ इसे (परीक्षण के बाद) उपलब्ध कराएं: चुनें: सिस्टम सेटिंग्स> "कीबोर्ड"> "शॉर्टकट"> "कस्टम शॉर्टकट"। "+" पर क्लिक करें और अपनी पसंद के प्रमुख संयोजन में कमांड जोड़ें।