Registro de eventos de pantalla bloqueada

10

Problema

Vea la fecha y hora exactas en que un usuario bloquea y desbloquea su estación de trabajo, ejecutando Fedora 18.

Pregunta

¿Hay alguna forma de registrar un evento de un usuario entrando y saliendo de "bloqueo de pantalla" en fedora 18 (o una solución general de Linux)?

Intentó

  1. Intenté mirar /var/log/boot, sin ayuda. Y mirando /var/log/messages, encontré el mensaje systemd-logind[xxx]: New session 140 of user YYY, pero no pude encontrar el evento de bloqueo de pantalla (¿gnomo?).
  2. Intenté ver /var/log/audit/audit.logcuál tiene muchos mensajes relacionados con PAM sobre todo tipo de usuarios y servicios, pero no estoy realmente seguro de qué buscar para encontrar la actividad de la pantalla de bloqueo
tutuDajuju
fuente

Respuestas:

7

Aquí hay otra solución usando "dbus-monitor". Una pequeña actividad de pantalla de registro de script 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
Alexander Dallakyan
fuente
Puse esto en un .sharchivo y lo agregué a las aplicaciones de inicio de Gnome. Hace lo que dice en la lata, gracias
aross
4

Intenta echar un vistazo /var/log/auth.log. Debería ver algunos mensajes relacionados de PAM y / o la aplicación de protector de pantalla.

scai
fuente
No tengo /var/log/auth.log, sí tengo /var/log/audit/audit.logmuchos mensajes relacionados con PAM sobre todo tipo de usuarios y servicios, pero no estoy realmente seguro de qué buscar para encontrar la actividad de la pantalla de bloqueo
tutuDajuju
Tengo /var/log/auth.log y no hay ningún mensaje de PAM ni de la aplicación del protector de pantalla en relación con los eventos de bloqueo / bloqueo.
ychaouche
4

Sí, no parece estar registrado en ningún lugar para usted. @tutuDajuju tiene una buena solución, así que pensé en portarlo a bash (y eliminar la dependencia del uso de gnome, esto debería funcionar independientemente del entorno de escritorio) para aquellos que estén interesados.
Si tiene esto ejecutándose en segundo plano y canalizándolo a un archivo de registro, tendrá su registro.

#!/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

Esto funcionó bien en mi Fedora con KDE, pero supongo que debería funcionar en otras cosas como Debian con gnome, etc.
Puede tener problemas si su grepno es compatible -P(en cuyo caso puede usar sed).

Hashbrown
fuente
2

También podría responder esto, aunque no es mi respuesta (mi jefe me proporcionó la solución) para ayudar a otros con la misma necesidad (o mentes curiosas).

tl; dr: use D-Bus para obtener las señales activadas / desactivadas de la pantalla de bloqueo.

Parece que la mensajería D-Bus es ampliamente compatible con las aplicaciones GNOME, y la aplicación ScreenSaver específicamente , y parece que la aplicación gnome-screensaver es la aplicación de bloqueo oficial para el shell Gnome.

Entonces, para probarlo, simplemente ejecuté dbus-monitor y obtuve la respuesta:

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

He escrito un pequeño script de Python para registrar esta actividad en un archivo:

#!/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
tutuDajuju
fuente
Encuesta? Que desperdicio de recursos.
ychaouche
2

¿Qué protector de pantalla estás usando? si es xscreensaver, active las opciones de registro e intente monitorear el archivo de registro.

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


fuente
Me acabo de escribir en mi propia respuesta que el defecto en GNOME Shell es del Salvapantallas, que parece ser lo que estoy usando (desde Fedora instala GNOME Shell por defecto) ...
tutuDajuju
2

Linux Mint 17.1. Mi cadena dbus se ve así:

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

o puede verse así

dbus-monitor --session "type='signal',interface='org.cinnamon.ScreenSaver'"
Alexander Chzhen
fuente
2

Estoy usando XFCE y XScreensaver. El registro de dbus-monitor ni xscreensaver no funciona para mí. Entonces he encontrado otra solución. Espero que también pueda ser utilizado por otras personas.

Ejecuto este comando durante el inicio de XFCE:

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

Los eventos de bloqueo / desbloqueo se registran en el /var/log/messagesy pueden ser recuperados por

grep lockLogger /var/log/messages
eNca
fuente