10 votos

Registro de eventos de bloqueo de pantalla

Problema

Ver la fecha y hora exactas de un usuario bloquea y desbloquea su estación de trabajo de ejecución de Fedora 18.

Pregunta

Hay alguna forma de registro de un evento de un usuario entrar y salir de "bloqueo de pantalla" en fedora 18 (o un linux en general de la solución)?

Trató de

  1. Intentado buscar en /var/log/boot - sin ayuda de nadie. Y mirando a /var/log/messages he encontrado el mensaje systemd-logind[xxx]: New session 140 of user YYY, pero no pudo encontrar el bloqueo de pantalla de escritorio gnome (?) evento.
  2. Intentado buscar en /var/log/audit/audit.log que tiene un montón de PAM mensajes relacionados sobre todo tipo de usuarios y servicios, pero no estoy realmente seguro de lo que debe buscar para encontrar el bloqueo de pantalla de la actividad

7voto

Aquí le damos otra solución usando a "dbus-monitor". Un pequeño script en bash registro de actividad de la pantalla.

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

4voto

Dejan.S Puntos 2556

Tratar de echar un vistazo a /var/log/auth.log . Veremos algunos mensajes relacionados con PAM o la aplicación de protector de pantalla.

4voto

Hashbrown Puntos 588

Sí no parece estar conectado en cualquier lugar para usted. @tutuDajuju tiene una buena solución, así que pensé en puerto bash (y eliminar la dependencia en el uso de gnome, esto debería funcionar independientemente del entorno de escritorio) para aquellos que estén interesados.
Si usted tiene esta ejecutando en segundo plano y de la tubería a un archivo de registro, usted 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

Funcionó muy bien en mi Fedora con KDE, pero supongo que se debe trabajar en otras cosas como Debian con gnome et cetera.
Puede tener problemas si su grep no admite -P (en cuyo caso sólo se puede utilizar sed).

2voto

tutuDajuju Puntos 120

Bien podría responder a esto, aunque no es mi respuesta (mi jefe me dio la solución) para ayudar a otras personas con la misma necesidad (o mentes curiosas).

tl;dr: Uso de D-Bus para llegar lockscreen del activo/deactived señales.

Parece D-Bus de mensajería es ampliamente soportado por aplicaciones de GNOME, y el protector de pantalla de la aplicación específicamente, y parece que el gnome-screensaver de la aplicación es la oficial de cierre de la aplicación para Gnome shell.

Así que, para ponerlo a prueba, me corrió dbus-supervisar y obtener la respuesta:

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

He escrito un pequeño script en python para registro de 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

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: