4

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

如果您可以访问 X 服务器,我知道以下解决方案有效: 在 linux 中检测键盘、鼠标活动

但是是否可以不必连接到 X 服务器?还有其他方法吗?例如,通过某些进程的 CPU 或内存使用间接?欢迎任何想法。

4

3 回答 3

7

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

这有几个优点:

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

于 2013-11-12T04:52:11.027 回答
1

命令wls -l /dev/pts是我能想到的最好的。在它们之间,您可以很好地了解 linux 控制台、ssh 和 xterm 会话的空闲情况。

如果用户只是坐在本地的东西上玩 firefox 或其他东西,这不会抓住它,但我不确定你是否可以在没有访问 X 或 root 权限的情况下获得它。查找 cpu 使用情况并不可靠,因为许多应用程序即使在空闲时使用少量 cpu,或者在使用时几乎为零,并且查看 /proc/x_server_pid/* 也无济于事,因为即使在用户空闲。

如果 /dev/pts 没有帮助并且您实际上无法查看输入,那么寻找像其他答案所说的那样的新流程是我能想到的最好的方法。

于 2013-11-09T03:18:06.317 回答
1

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

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

于 2013-10-14T14:07:01.573 回答