记录锁屏事件

tut*_*uju 10 linux fedora gnome logging lock-screen

问题

查看用户锁定和解锁他的工作站的确切日期和时间 - 运行 Fedora 18。

有什么方法可以记录用户在 Fedora 18(或通用 linux 解决方案)上进入和退出“锁定屏幕”的事件?

试过

  1. 试着看/var/log/boot- 没有帮助。看着/var/log/messages我找到了消息systemd-logind[xxx]: New session 140 of user YYY,但找不到锁屏(侏儒?)事件。
  2. 尝试查看/var/log/audit/audit.log其中包含大量有关所有类型的用户和服务的 PAM 相关消息,但我不确定要查找锁定屏幕活动的内容

小智 9

这是使用“dbus-monitor”的另一种解决方案。一个小的 bash 脚本记录屏幕活动。

exit_report(){
echo "$(date) Monitoring Terminated."
}
trap "exit_report; exit;" 0

lockmon() {
adddate() {
    while IFS= read -r line; do
      echo "$(date) $line" | grep "boolean" | sed 's/   boolean true/Screen Locked/' | sed 's/   boolean false/Screen Unlocked/'
    done
}
echo "$(date) Monitoring Started."
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" | adddate

}

lockmon >> lock_screen.log
Run Code Online (Sandbox Code Playgroud)


sca*_*cai 8

尝试看一下/var/log/auth.log。您应该会看到来自 PAM 和/或屏幕保护程序应用程序的一些相关消息。


Has*_*own 5

是的,它似乎没有为您记录在任何地方。@tutuDajuju 有一个很好的解决方案,所以我想我可以将它移植到 bash (并消除对使用 gnome 的依赖,无论桌面环境如何,这都应该适用),供那些感兴趣的人使用。
如果您在后台运行此程序并将其通过管道传输到日志文件,您将获得日志。

#!/bin/bash

#prints out, among other things;
#      string "org.kde.screensaver"
#transform it to 'org.kde.screensaver'
service=$(\
    dbus-send \
        --session \
        --dest=org.freedesktop.DBus \
        --type=method_call \
        --print-reply \
        /org/freedesktop/DBus org.freedesktop.DBus.ListNames \
    | grep -o '[^"]*.screensaver'
)

#prints out, among other things;
#method bool org.freedesktop.ScreenSaver.SetActive(bool e)
#transform it to 'org.freedesktop.ScreenSaver'
interface=$(
    qdbus \
        $service /ScreenSaver \
    | grep -oP '[^ ]*(?=.SetActive)'
)

path='/ScreenSaver'

#monitor it with a while loop
dbus-monitor "type='signal',interface='$interface',member='ActiveChanged',path='$path'" \
| while read -r line; do
    #ignore the metadata and pull the 'boolean <true/false>' line
    read line

    #check if it is set to true
    if echo $line | grep -q 'true'; then
        echo "Locked at $(date)"
    else
        echo "Unlocked at $(date)"
    fi
done
Run Code Online (Sandbox Code Playgroud)

这在我的带有 KDE 的 Fedora 上运行得很好,但我想它应该可以在其他东西上运行,比如带有 gnome 的 Debian 等等。
如果您grep不支持,您可能会遇到问题-P(在这种情况下您可以使用sed)。