Ubuntu 22.04 下获取用户锁屏/解锁时间戳及活动时长的技术问询
Ubuntu 22.04 下获取用户锁屏/解锁时间戳及活动时长的技术问询
嗨,针对你在Ubuntu 22.04上想要获取用户锁屏/解锁时间戳,以及登录后实际活动时长的需求,我整理了几个实用的方案,你可以根据场景选用:
一、获取锁屏/解锁时间戳
通过systemd-logind日志查询
Ubuntu 22.04基于systemd,systemd-logind服务会全程记录系统的锁屏、解锁、休眠等关键事件。直接用以下命令就能筛选出相关记录:
journalctl -u systemd-logind | grep -E 'Locking|Unlocking'
输出结果会包含完整的时间戳、事件类型以及对应的用户信息。如果要针对特定用户查询,可以加上用户UID的过滤条件(把1000换成目标用户的UID,可通过id -u 用户名获取):
journalctl -u systemd-logind _UID=1000 | grep -E 'Locking|Unlocking'
通过GNOME Shell日志查询
Ubuntu 22.04默认使用GNOME桌面,锁屏/解锁事件也会被GNOME Shell单独记录,你可以用以下命令查看:
journalctl /usr/bin/gnome-shell | grep -E 'screen locked|screen unlocked'
二、计算登录后的实际活动时长
活动时长需要排除锁屏期间的闲置时间,我们可以结合锁屏/解锁的时间戳,用脚本自动计算累计时长。下面是一个针对当前用户的示例脚本,会统计今日的累计活动时长(如果当前处于解锁状态,会计算到脚本运行时刻):
#!/bin/bash # 统计当前用户今日累计活动时长(排除锁屏时间) journalctl -u systemd-logind _UID=$(id -u) --since "today" | grep -E 'Unlocking|Locking' | awk ' BEGIN { unlock_time = 0; total_active = 0; } /Unlocking/ { # 将日志时间戳转换为可计算的时间戳数值 unlock_time = mktime(gensub(/([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2}).*/, "\\1 \\2 \\3 \\4 \\5 \\6", 1, $1" "$2)); } /Locking/ { if (unlock_time > 0) { lock_time = mktime(gensub(/([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2}).*/, "\\1 \\2 \\3 \\4 \\5 \\6", 1, $1" "$2)); total_active += lock_time - unlock_time; unlock_time = 0; } } END { # 处理当前处于解锁状态的情况 if (unlock_time > 0) { current_time = systime(); total_active += current_time - unlock_time; } # 转换为时分秒格式输出 hours = int(total_active / 3600); minutes = int((total_active % 3600) / 60); seconds = total_active % 60; printf("今日累计活动时长: %d小时%d分钟%d秒\n", hours, minutes, seconds); } '
把这段代码保存为active_time.sh,执行chmod +x active_time.sh赋予权限后,运行./active_time.sh就能得到结果。
补充说明
last命令记录的是用户登录/注销的会话信息,和锁屏/解锁是完全不同的事件(锁屏时用户会话仍然处于登录状态),所以无法通过last获取锁屏记录。- 如果使用的是KDE等其他桌面环境,日志中的关键词可能会有所不同,比如KDE的锁屏事件关键词可能是
Session locked,你需要调整grep的筛选条件。
备注:内容来源于stack exchange,提问作者Mahesh Garole
相关产品推荐
相关产品推荐

