如果我使用它超过给定时间,我想停止firefox,所以我希望能够检测交互式活动,并且我希望通过bash scritp管理它...是否可能?
答案 0 :(得分:0)
您想要检测用户主动是否使用了Firefox一段时间“t> X分钟”? &安培;不计算它是否只是闲着?
除非你对tcpdump做一些智能解析,否则无法用bash检测它。
但是,你可以为它创建一个firefox插件。很多help available on internet。 您可以将this addon作为参考。
编辑:抱歉,我认为应该是possible。答案 1 :(得分:0)
是的!
在xev
的帮助下(此二进制工具已作为x11-utils
的一部分安装):
Nota:基于 Debian stable 的 GNU / Linux 桌面上的这项工作!我不知道这是否可以在其他地方发挥作用,所以报告将不胜感激。
编辑旧版本吃了不少CPU。这个更新似乎更容易接受:
#!/bin/bash
export rPid=$$
export iTreshold=2
(
while read line;do
kill -USR2 $rPid
done < <(
cPids=""
while : ; do
trap 'for pid in $cPids;do
ps who cmd $pid |
grep -q xev && kill $pid
done
exit 0' INT QUIT TERM EXIT
widTraced="$(ps -C xev who cmd|
sed -e 's|^.* \(0x[^ ]*\) *$|/\1/d;|')"
export widTraced
for wid in $(
xwininfo -root -children |
sed -ne "$widTraced"'
s/^ *\(0x[0-9a-f]\{3,11\}\) .*Navigator...Firefox.*$/\1/p'
);do
if ! ps -C xev w | grep -q $wid &&
xwininfo -id $wid |
grep -q Map.State:.IsViewable ;then
xev -id $wid &
cPids="$cPids $!"
fi;
done;
sleep 3;
done
)
) &
killAll() {
ps ho ppid,pid |
sed -ne "s/^ *$fChild *\([0-9]*\) *$/\1/p" |
xargs --no-run-if-empty kill
kill $fChild 2>/dev/null
echo
exit 0
}
export fChild=$!
export ffSecs=0
trap killAll INT EXIT KILL TERM QUIT
trap "" HUP PIPE
trap 'ffSecs=$SECONDS' USR2
export tCount=0
while : ;do
cVal=$((SECONDS-ffSecs))
printf "\r%8d %8d " $cVal ${tCount:0:${#tCount}-1}
[ $cVal -lt $iTreshold ] && ((tCount++))
sleep .1
done
我正在运行它,现在大约40秒:
1 47
修改时间过得很快!
0 277
Nota:iTreshold
允许您选择上次鼠标或键盘活动在用户停留阅读时可以通过的任意秒数。
这可以与xdotool
结合使用,可用于了解窗口是否具有焦点。