本地用户的远程Linux空闲时间

时间:2013-10-14 11:56:41

标签: linux input idle-timer

我正在寻找一种确定本地输入(鼠标/键盘)空闲时间的方法, 远程通过SSH,,无权访问或访问当前登录的用户Xauthority

如果您有权访问X服务器,我知道以下解决方案: detecting keyboard, mouse activity in linux

但是可以不用连接到X服务器吗? 还有另外一种方法吗?例如。间接通过CPU或内存使用某些进程? 欢迎任何想法。

3 个答案:

答案 0 :(得分:7)

使用w和/ dev解决方案只会让你到目前为止,因为可能是用户在附近,但没有在shell中输入任何东西 - 例如,他/她可能正在玩一些游戏。更好的方法是轮询/ proc /中断。鼠标和键盘的本地中断通常在“i8042”下(尽管在极少数情况下可能会有所不同)。您可能想尝试:“grep i8042 / proc / interrupts”。这将产生IRQ 1(键盘)和IRQ 12(通常是鼠标)。您可以获取值,存储它们,然后偶尔进行轮询(没有回调,唉)来获取计数。如果数字改变,则发生中断 - 意味着键盘(IRQ 1)或鼠标(IRQ 12)被触摸/按下等。按键通常产生两个中断(按键,键上)。鼠标移动更不稳定。

这有几个好处:

1)如果用户触摸鼠标或按键,你知道 2)你可以以编程方式(即fopen()/ proc / interrupts,或(或者)/ proc / stat,并获得“intr”行)和fread()相关的行 3)你甚至不需要成为root用户。

答案 1 :(得分:1)

作为一个没有特权的,不同的用户,我尝试通过监视使用目标用户ID生成的新进程来做到这一点。如果你看到一个新进程,很可能意味着用户导致它被生成,除非它的父级是cron(或者是少数几个类似的主管之一,你必须在你的系统上尝试它并过滤掉你最初得到的误报很少。)

这不会给你一个非常精确的空闲时间,但可能是最大限度。如果你想要更精确的东西,你可能应该有权利这样做。

答案 2 :(得分:1)

命令wls -l /dev/pts是我能想到的最好的。在它们之间,您可以在linux控制台,ssh和xterm会话上获得非常好的空闲视图。

如果用户只是坐在玩火狐或其他东西的本地东西上,这将无法捕获它,但我不确定如果没有X或root用户就可以获得它。寻找CPU使用是不可靠的,因为很多应用程序即使在空闲时也会使用一点cpu,或者在使用时几乎为零,并且看/ proc / x_server_pid / *也没有帮助,因为即使在用户闲置。

寻找新的进程,如其他答案所说的最好我能想到如果/ dev / pts没有帮助,你实际上无法查看输入。