检测来自bash的firefox中与用户的交互

时间:2012-12-18 13:26:44

标签: bash firefox

如果我使用它超过给定时间,我想停止firefox,所以我希望能够检测交互式活动,并且我希望通过bash scritp管理它...是否可能?

2 个答案:

答案 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结合使用,可用于了解窗口是否具有焦点