ワークスペース依存のストップウォッチとして機能できるプログラムはありますか?各ワークスペースで毎日どれだけの時間を費やしたかを知りたい。
編集: Unityを使用しています。
いい質問です!
以下のスクリプトは、ホームディレクトリにログファイル_~/viewport_log.txt
_を作成します。ここでは、ビューポートごとに現在のセッションのビューポート(ワークスペース)使用時間を報告します。
レポートは2秒に1回更新され、次のようになります(クイックランで)。
_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
_
スクリプトは、2つの瞬間i.c.wの間の正確な時間範囲を計算します。それらの瞬間のワークスペース(2秒のまま、time.sleep(2)
行の間隔)両方の瞬間のワークスペースが同じ場合、対応するワークスペースの合計使用時間に時間が加算されます。
両方の瞬間のワークスペースが異なる場合、ワークスペースの切り替えがあったことは明らかであり、時間はワークスペースの生産時間に追加されません。したがって、_~/viewport_log.txt
_の概要の時間は、ワークスペースごとの期間ごとに2秒に丸められます。
上記のスクリプトをバックグラウンドで実行すると、以下のスクリプトをキーの組み合わせの下に置くことにより、ワークスペースごとの現在の使用時間を表示できます。
_#!/bin/bash
lines="$( cat ~/viewport_log.txt )"
zenity --info --title='Usage per Viewport' --text="$lines"
_
view_vplog.sh
_として保存します次のコマンドで実行します最初のスクリプトがバックグラウンドで実行されている間
_sh /path/to/view_vplog.sh
_
(テスト後)ショートカットキーの組み合わせで使用可能にします。[システム設定]> [キーボード]> [ショートカット]> [カスタムショートカット]を選択します。 「+」をクリックして、選択したキーの組み合わせにコマンドを追加します。