获取用户登录时长(不含锁屏时间)

获取用户登录时长(不含锁屏时间)

我想获取有关特定日期的 Linux 系统用户“使用时间”的信息。这意味着用户拥有解锁屏幕的时间。相反,该命令ac显示用户登录的整个时间,包括锁屏或待机的时间。

据我所知,who命令显示的空闲时间与解锁屏幕的时间不同。所以这显然不是解决方案。

开源程序时间kpr显示所需信息,但仅限本周。也许可以提取该计算的代码。然而,我的编程能力太差了。

答案1

据我所知,who命令显示的空闲时间与解锁屏幕的时间不同。

No.who是一个早于图形会话出现的程序。它根本不知道“锁定屏幕”是什么。

一般来说,屏幕锁只是一个普通的程序,它恰好以全屏运行并捕获您的所有按键。因此,从计算机的角度来看,用户永远不会注销 - 只是在显示锁屏期间没有做太多事情。

近年来,幸运的是,大多数 Linux 发行版在用户会话和席位管理的外观上达成了某种程度的一致——所以就有了loginctl lock-session(您的会话管理器可以在内部调用它或通过 dbus 来锁定)。

可以编写一个程序,通过 dbus 挂钩锁定/解锁机制,并记录其间的时间 - 据我所知,还没有这样做:loginctl session-status有一个概念年龄会话的时间,但不是分配给席位并解锁的时间。

一般来说,您正在查找的信息的用途似乎非常可疑 - 出于会计目的,用户可能会在屏幕锁定时执行任意计算/网络/存储密集型操作。

答案2

这并不完全是您所要求的,但您可能会发现GNU 会计实用程序 (acct)有用。

GNU Accounting Utilities 是一组实用程序,用于报告和汇总有关用户连接时间和进程执行统计数据的数据。

“登录统计”提供基于连接时间的系统资源使用情况摘要,“进程统计”提供基于系统上执行的命令的摘要。

它应该适用于大多数发行版 - 例如在 Debian 等上,apt-get install acct

注意:跟踪用户及其进程和执行时间等可能会影响性能......在轻负载的高端系统上可能并不重要,但在重负载或低端系统上可能会非常明显。

相关内容