कार्यक्षेत्र स्टॉपवॉच?


13

क्या कोई प्रोग्राम है जो कार्यक्षेत्र-निर्भर स्टॉपवॉच के रूप में काम कर सकता है? मैं जानना चाहता हूं कि मैंने हर दिन प्रत्येक कार्यक्षेत्र में कितना समय बिताया है।

संपादित करें: मैं एकता का उपयोग कर रहा हूं।


क्या आप एकता का उपयोग कर रहे हैं?
जैकब व्लिजम

आप किस डेस्कटॉप मैनेजर का उपयोग कर रहे हैं?
डेविड फ़ॉर्स्टर

1
हाँ, मैं एकता का उपयोग कर रहा हूँ।
गाज़ोपुरज़ोर्प

जवाबों:


11

अच्छा प्रश्न!

नीचे दी गई स्क्रिप्ट एक लॉगफ़ाइल बनाती है: ~/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

फिर:

  1. नीचे दी गई स्क्रिप्ट को एक खाली फ़ाइल में कॉपी करें, इसे इस प्रकार सहेजें workspace_log.py
  2. इसे कमांड द्वारा टेस्ट करें:

    python3 /path/to/workspace_log.py

    विभिन्न कार्यक्षेत्रों के माध्यम से नेविगेट करें और ~/viewport_log.txtपरिणाम देखने के लिए फ़ाइल खोलें (वैकल्पिक रूप से, cat ~/viewport_log.txtसुविधाजनक पढ़ने के लिए एक टर्मिनल में चलाएं , क्योंकि लॉग प्रति सेकंड एक बार अपडेट किया जाता है)।

  3. यदि सभी अपेक्षा के अनुरूप काम करते हैं, तो अपने स्टार्टअप एप्लिकेशन में कमांड जोड़ें। चूंकि यह स्क्रिप्ट के बहुत जल्दी शुरू होने (डेस्कटॉप पूरी तरह से लोड होने से पहले) होने की संभावना है, इसलिए संभवतः आपको स्टार्टअप एप्लिकेशन के रूप में काम करने के लिए स्टार्टअप कमांड में एक छोटा सा ब्रेक जोड़ने की जरूरत है, इसलिए कमांड तब है:

    /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"
  1. स्क्रिप्ट को एक खाली फ़ाइल में कॉपी करें, इसे इस रूप में सहेजें view_vplog.sh
  2. इसे चलाएं, जबकि पहला स्क्रिप्ट कमांड द्वारा पृष्ठभूमि में चल रहा है :

    sh /path/to/view_vplog.sh
  3. शॉर्टकट कुंजी संयोजन के साथ इसे (परीक्षण के बाद) उपलब्ध कराएं: चुनें: सिस्टम सेटिंग्स> "कीबोर्ड"> "शॉर्टकट"> "कस्टम शॉर्टकट"। "+" पर क्लिक करें और अपनी पसंद के प्रमुख संयोजन में कमांड जोड़ें।

    यहाँ छवि विवरण दर्ज करें


1
@AB धन्यवाद! मुझे इस तरह के सवाल पसंद हैं :)
याकूब Vlijm

वाह! कल को स्थापित किया जाएगा! (अब इसे करने के लिए बहुत थक गए)
Fabby
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.