工作区秒表?


Answers:


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"

    要将其添加到启动应用程序:Dash>启动应用程序>添加,然后添加命令。

剧本

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

脚本的属性

该脚本将计算两个时刻之间的确切时间跨度,即这些时刻所使用的工作空间(原为2秒,即行中的间隔) 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谢谢!我喜欢这种问题:)
Jacob Vlijm 2015年

哇!已升级,明天将安装!(现在太累了,无法做)
Fabby 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.