【问题标题】:Remote Linux Idle time of local user本地用户远程Linux空闲时间
【发布时间】:2013-11-12 12:52:11
【问题描述】:

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

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

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

【问题讨论】:

    标签: linux input idle-timer


    【解决方案1】:

    使用 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) 你甚至不需要为此 root。

    【讨论】:

    • 这很酷。虽然它似乎不适用于 USB 键盘/鼠标,对吧?
    • 我刚查了一下,也有usb中断。但是,它们会定期发生。所以我可以减去这个比率,看看是否有额外的事件。这应该有效。
    • 不能与 USB 一起工作,正确,但 USB 仍然是一个中断源。所以是的。相关性可能不像 i8042 那样是 1:1,但是 - 都一样 - 当用户处于活动状态时,您将获得一个非零值 - 这是您首先想要的。
    【解决方案2】:

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

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

    【讨论】:

    • 用户可以在不创建新进程的情况下处于活动状态(在编辑器中编写内容)
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      • 2021-08-12
      • 2010-10-11
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多