记录锁屏事件


10

问题

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

有什么方法可以记录用户在fedora 18上进入或退出“锁屏”事件的事件(或一般的Linux解决方案)?

试过了

  1. 试图看/var/log/boot-没有帮助。看着/var/log/messages我找到了消息systemd-logind[xxx]: New session 140 of user YYY,但是找不到锁屏(gnome?)事件。
  2. 试图查看/var/log/audit/audit.log其中有很多有关各种用户和服务的PAM相关消息,但是我不确定要查找锁定屏幕活动的内容是什么

Answers:


7

这是使用“ 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

我将其放入.sh文件中,并将其添加到Gnome的启动应用程序中。会在锡罐上说什么-thros
aross

4

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


我没有/var/log/auth.log,我的确有/var/log/audit/audit.log很多有关各种用户和服务的PAM相关消息,但我不确定要查找锁定屏幕活动的内容

我有/var/log/auth.log,相对于锁定/锁定事件,没有来自PAM或屏保应用程序的消息。
ychaouche

4

是的,似乎没有为您记录任何地方。@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

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


2

也可以回答这个问题,尽管这不是我的答案(老板为我提供了解决方案)来帮助有相同需求(或好奇心)的其他人。

tl; dr:使用D-Bus获取锁屏的激活/停用信号。

似乎GNOME应用程序(尤其ScreenSaver应用程序)广泛支持D-Bus消息传递,并且gnome-screensaver应用程序似乎是Gnome shell的官方锁定应用程序。

因此,为了进行测试,我只运行了dbus-monitor并获得了响应:

dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'"

我已经编写了一些python脚本来将该活动记录到文件中:

#!/usr/bin/env python
from datetime import datetime
import os
import pwd
import subprocess
import time

LOG_FILE = os.path.expanduser('~/hours_log.csv')


cmd = subprocess.Popen(["dbus-monitor \"type='signal',interface="
                        "'org.gnome.ScreenSaver'\""], shell=True,
                       stdout=subprocess.PIPE)

running = 0
while 1:
    time.sleep(0.1)
    if running:
        output = cmd.stdout.readline()
        status = 'unlocked' if 'true' in output else 'locked'
        new_line = "{time} {user} {status} the screen\n".format(
            time=datetime.now().ctime(),
            user=pwd.getpwuid(os.getuid())[0],
            status=status
        )
        with open(LOG_FILE, 'a') as f:
            f.write(new_line)

        running = 0
    line = cmd.stdout.readline()
    if "ActiveChange" in line and 'org.gnome.ScreenSaver' in line:
        running = 1

轮询?浪费资源。
ychaouche

2

您正在使用哪个屏幕保护程序?如果是xscreensaver,请打开日志选项并尝试监视日志文件。

http://www.jwz.org/xscreensaver/man1.html


我只是在自己的回答中写道,gnome shell中的默认值是gnome-screensaver,这似乎是我正在使用的(因为fedora默认情况下安装了gnome shell)...
tutuDajuju 2013年

2

Linux Mint 17.1。 我的dbus字符串如下所示:

 dbus-monitor --session "type='signal',path='/org/cinnamon/ScreenSaver'" 

或者看起来像这样

dbus-monitor --session "type='signal',interface='org.cinnamon.ScreenSaver'"

2

我正在使用XFCE和XScreensaver。dbus-monitor都不支持xscreensaver日志记录。所以我找到了另一种解决方案。我希望它对其他人也可以使用。

我在XFCE启动期间运行以下命令:

/usr/bin/xscreensaver-command -watch |logger -t lockLogger

锁定/解锁事件被记录到,/var/log/messages并且可以通过

grep lockLogger /var/log/messages
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.