红联Linux门户
Linux帮助

arbtt/ulogme(Linux下的ManicTime)使用记录

发布时间:2016-05-21 11:00:07来源:linux网站作者:tork_he

arbtt说明

切换到Linux环境下最头疼的一个事就是缺少了ManicTime类似的办公工具,用于记录每天打开各个程序和文档的时间,文档和程序的标题,以便在日后可以回顾当天做了什么。
当然,有很多类似的手工记录工具,开始做一件事情之前通过软件记录一个时间点和内容,随后再检索,但是太麻烦了,需要频繁的人工参与操作。
之前在Windows上用的最舒服的一个软件就是ManicTime,即便是免费版本也可以很好的胜任工作,可以检索出每天都做了什么,操作了什么文档(这个非常非常关键!也是我一直需要的功能,可以检索出当天参与了什么项目)。可惜它只有Windows和Mac版本,没有Linux版本。ManicTime软件截图(找了一个图,现在已经没有Windows系统了):

arbtt/ulogme(Linux下的ManicTime)使用记录

切换到Ubuntu后,通过alternativeto.net找到了RescueTime软件,类似于ManicTime的自动记录软件,RecueTime是一个Native app+Remote WebUI结合的系统,数据通过本地Native app收集,并传递到RescueTime网站(稍微有点不安全,会泄露一些信息),通过在网站的WebUI上展现数据实现信息的展示,功能非常全面,界面如下:

arbtt/ulogme(Linux下的ManicTime)使用记录

截图Ubuntu顶部标题栏的白色十字图标即是RescueTime的Native app。

但是RescueTime免费版只能看到每天打开的程序信息,收费版才能看到详细的文档名字,我的核心功能需求(回溯每天参与的项目)没有被满足!

随后又通过alternativeto.net找到了arbtt,一个开源的自动记录软件,看了网站上的一些demo,完全本地运行,相对RescueTime安全很多。而且可以看到打开的文件(核心需求啊!),随后开始研究这个东西。


arbtt官网:http://arbtt.nomeata.de/#what

arbtt由多个组件组成:

1.arbtt-capture,负责收集打开的程序和文档标题,并记录在一个日志文件中
2.arbtt-stats,负责读取arbtt-capture记录的日志文件,并通过指定的过滤规则(配置文件或命令行直接输入参数)显示出用户定制的内容

通过arbtt-capture和arbtt-stats的有机组合可以实现灵活的日常操作工作的显示。


arbtt安装

arbtt已经集成到ubuntu的官方仓库,可以直接apt-get安装。
参考URL:http://arbtt.nomeata.de/#install

1.安装软件

sudo apt-get install arbtt

2.配置程序开机自启动
cp /usr/share/doc/arbtt/examples/arbtt-capture.desktop ~/.config/autostart/

3.立即启动程序
arbtt-capture &

4.让arbtt-capture收集一会信息

5.启动arbtt-stats查看收集的信息
给arbtt-stats一个基本的配置,让其正常启动工作:

echo "{\\$idle > 60 ==> tag inactive}" > ~/.arbtt/categorize.cfg

通过arbtt-stats查看收集的信息:

ray@ray-ThinkPad-X250:~/Applications/arbtt-graph/render$ arbtt-stats
Total time per tag
==================
__________________________Tag_|______Time_|_Percentage_
Desktop: | 10h24m00s | 100.00
Program:google-chrome |  4h16m00s |  41.03
Program:gnome-terminal-server |  3h17m00s |  31.57
Program:et |  2h10m00s |  20.83


arbtt-stats使用

arbtt-capture只负责数据收集,并不能展示数据,数据展示的方法是读取arbtt-capture收集的log文件,官方提供的工具是一个CLI工具,arbtt-stats。

arbtt-stats需要一个配置文件才能正常工作,这个配置文件指定了一些过滤和显示规则,告诉arbtt-stats显示哪些log文件的数据。


arbtt-graph

arbtt-graph项目主页:https://github.com/rejuvyesh/arbtt-graph

arbtt-graph与arbtt-stats功能一样,都是用于展现arbtt-capture的数据,不同的是arbtt-stats是CLI显示,arbtt-graph是WebUI。

arbtt-graph功能较arbtt-stats弱一些,不能操作多个category,导致不能多维度显示(程序和标题)。

arbtt/ulogme(Linux下的ManicTime)使用记录


arbtt-graph安装完成后需要修改如下几部分,以使其正常工作:

1.arbtt-graph/update文件
官方文件要求修改此文件,实际上只需要确保该文件下如下两个字段没问题即可,一般都是正常的,不用修改:

CATEGORIZE_FILE="./categorize.cfg"  <----与arbtt-stats一样,需要指定配置文件位置
CATEGORY="Graph"<----指定arbtt-graph显示那个Category到WebUI,只显示在此配置的Category

修改后需要执行一下这个文件,./update文件可以直接执行。

2.arbtt-graph/categorize.cfg文件
arbtt-graph的配置文件(过滤规则),用于指明WebUI显示的内容,作用范围除了Barcode view外的所有内容。

arbtt/ulogme(Linux下的ManicTime)使用记录

将需要通过WebUI显示的Tag分配到上述update文件指定的Category下,如默认的是Graph,我的配置如下,与arbtt-stats文件的规则和内容可以完全一样:

ray@ray-ThinkPad-X250:~/Applications/arbtt-graph$ cat categorize.cfg
-- -*- mode: haskell; -*-
$idle > 60 ==> tag inactive,
current window $program == ["gnome-terminal-server"]  ==> tag Graph:term,
current window $program == "et"  ==> tag Graph:office,
current window $program == "wpp"  ==> tag Graph:office,
current window $program == "wps"  ==> tag Graph:office,
current window $program == ["Navigator", "chromium", "google-chrome"] && !(current window $title =~ [m!YouTube!, m!Vimeo!, m!Facebook!, m!Google+!, m!Twitter!, /.*Hacker News.*/, /.*Less Wrong.*/, /.*[Rr]eddit.*/, /.*Goodreads.*/, /.*GitHub.*/, /.*Ask.fm.*/, /.*Ino[Rr]eader.*/, /.*Gmail.*/, /.*New\\ Tab.*/]) ==> tag Graph:browsing,
current window $title =~ [/.*irssi.*/, /.*WeChat.*/] ==> tag Graph:irc,
current window $title =~ /.*pdf.*/ ==> tag Graph:read-pdf,
current window $title =~ /.*djvu.*/ ==> tag Graph:read-djvu,
current window $title =~ /.*epub.*/ ==> tag Graph:read-epub,
current window $title =~ /.*mobi.*/ ==> tag Graph:read-mobi,
current window $title =~ /.*azw3.*/ ==> tag Graph:read-azw3,
current window $title =~ /.*Spreadsheets.*/ ==> tag Graph:office,
current window $title =~ /.*Writer.*/ ==> tag Graph:office,
current window $title =~ [m!mp4!, m!mkv!, m!avi!] ==> tag Graph:tv-local,
tag Graph:$current.program,


3.arbtt-graph/render/settings.js文件
用于指定哪些Tag显示到Barcode上,Barcode就是arbtt-graph主页面最下边的长条图:

arbtt/ulogme(Linux下的ManicTime)使用记录

我的配置如下:

ray@ray-ThinkPad-X250:~/Applications/arbtt-graph/render$ cat settings.js
// Barcode view settings
var display_groups = [];
display_groups.push(["social", "misc", "browsing", "office", "term"]);


4.修正arbtt-graph/render/overview/overview.html页面显示问题,默认该页面因为变量配置错误,导致图示的x轴太短,看不到(并不是没有数据!)。

arbtt/ulogme(Linux下的ManicTime)使用记录

需要对该文件如下部分的变量进行修改:

function drawData() {
$("#content").empty();
// draw the legend on top of the svg
var d3div = d3.select("#content");
var ldiv = d3div.append("div").attr('class', 'legenddiv');

for(var i=0; i<tags.length; i++) {
var pi = ldiv.append('p').text(tags[i]).attr('style', 'color:' + colors[tags[i]]);

var m = tags[i];
if(skipdraw[m]) { pi.attr('class', 'skipdrawyes'); }
else { pi.attr('class', 'skipdrawno'); }

pi.on('click', function(i) { // close over index i
return function() {
// toggle whether this one gets drawn
var m = tags[i];
if(skipdraw[m] === false) { skipdraw[m] = true; }
else { skipdraw[m] = false; }
drawData(); // and redraw the graph!
}
}(i));
}

var margin = {top: 10, right:10, bottom: 100, left: 40};

//var fullwidth = 30;
//console.log(loglist.length * 15)
var fullwidth = loglist.length * 150; <----------修改行
var fullheight = 800;
var width = fullwidth - margin.left - margin.right;
var height = fullheight - margin.top - margin.bottom;

其中var fullwidth = loglist.length * 150;为修改后的内容,原值为var fullwidth = loglist.length * 15;,太小了,导致下边的代码调用结果为负值,进而报错,显示失败。

这个arbtt-graph的参考系统是ulogme,几乎代码就是copy过来的,改了少许,可以在Github上看一下源系统的相应代码:
ulogme对应代码:

var margin = {top: 10, right: 10, bottom: 100, left: 40};
var fullwidth = 1200;
var fullheight = 800;
var width = fullwidth - margin.left - margin.right;
var height = fullheight - margin.top - margin.bottom;


ulogme介绍和使用

arbtt和arbtt-graph的默认合作模式只展示程序的打开状况,记录每个程序的运行时间和频率,但这并不是我的使用初衷,虽然可以通过调整category.cfg文件变相实现文档打开情况的展示,但是毕竟这不是该软件的设计初衷,所以实现起来也挺别扭。自己修改Javascript太耗费精力,所以有了arbtt-graph的参考系统ulogme的使用介绍。

ulogme是类似于arbtt的开源软件,该软件集成了arbtt-capture和arbtt-graph的功能,原生提供WebUI用于展示。
与arbtt不同的是,ulogme使用的是wmctrl工具包,更多的是截获打开的程序标题,进而处理获取文档及应用程序打开情况。


ulogme相对于arbtt的优势:

提供了原生的文档名称记录,更可贵的是与程序名称关联在一起,即满足了文档名称查看的要求,也不影响页面的观感。
提供了更多的功能:
按键记录(我本人并不使用)
笔记记录(非常有用的功能,可以针对当天进行记录,也可以针对某个时间点的开启程序进行记录,非常方便。


安装

1.获取软件源码
$ git clone https://github.com/karpathy/ulogme.git
2.安装依赖包
$ sudo apt-get install xdotool wmctrl
3.构建配置文件
$ cp render/render_settings_example.js render/render_settings.js
修改配置文件
4.运行监控截取程序
$ ./ulogme.sh
5.运行WebUI Server
$ python ulogme_serve.py
6.通过浏览器打开ulogme WebUI界面
http://localhost:8124


配置优化

1.ulogme系统分析
ulogme系统要比arbtt复杂, 除了开启程序和文档的记录外,它还实现了按键频率的统计,用于更深入的实现程序的跟踪记录。但是这个功能我本人并不感冒,而且记录按键部分的script(单独的scirpt)在监控功能启动时还需要root权限,不安全且不方便制作开机启动脚本,所以我就修改跳过了这个功能。
两个脚本名称:keyfreq.sh(按键监控) 和 logactivewin.sh(程序标题监控)。

2.开机启动配置
通过上一节的介绍,我们知道了ulogme包含按键监控和程序标题监控两个部分,因为我不需要按键监控的功能,且按键监控启动需要root权限,为了方便设置开机启动,我的开机启动脚本就直接调用 logactivewin.sh(程序标题监控)了。
在 ~/.config/autostart/目录下建立ulogme.desktop文件:

ray@ray-ThinkPad-X250:~/.config/autostart$ ls
arbtt-capture.desktop  rescuetime.desktop  ulogme.desktop
ray@ray-ThinkPad-X250:~/.config/autostart$ cat ulogme.desktop
[Desktop Entry]
Encoding=UTF-8
Name=ulogme Data Capture Program
#Icon=
Comment=Records information about the user application usage
Type=Application
#Categories=
Exec=sh -c "cd /home/ray/Applications/ulogme && ./logactivewin.sh"
Terminal=false
StartupNotify=false
ray@ray-ThinkPad-X250:~/.config/autostart$

3.HTML页面优化
这个部分主要是对WebUI的定制和修改,同时删掉了按键记录的展示部分,代码涉及比较多,就不展示了。

页面截图

arbtt/ulogme(Linux下的ManicTime)使用记录


后记:使用Chrome查看js变量值,通过chrome console显示

chrome有一个非常好的调试工具集,可以用于调试此次overview页面的问题,通过工具定位故障点,并增加如下参数打印故障节点变量值:

arbtt/ulogme(Linux下的ManicTime)使用记录

arbtt/ulogme(Linux下的ManicTime)使用记录

变量跟踪及故障点定位结果


其他类似的Linux软件

Selfspy:https://github.com/gurgeh/selfspy


本文永久更新地址:http://www.linuxdiyf.com/linux/20823.html