Registrazione degli eventi della schermata di blocco


10

Problema

Guarda la data e l'ora esatte che un utente blocca e sblocca la sua postazione di lavoro - con Fedora 18.

Domanda

Esiste un modo per registrare un evento in cui un utente entra ed esce da "lock-screen" su fedora 18 (o una soluzione Linux generale)?

Provato

  1. Ho provato a guardare /var/log/boot- nessun aiuto. E guardando /var/log/messagesho trovato il messaggio systemd-logind[xxx]: New session 140 of user YYY, ma non sono riuscito a trovare l'evento schermata di blocco (gnomo?).
  2. /var/log/audit/audit.logHo provato a vedere quali sono molti messaggi relativi a PAM su tutti i tipi di utenti e servizi, ma non sono sicuro di cosa cercare per trovare l'attività della schermata di blocco

Risposte:


7

Ecco un'altra soluzione che utilizza "dbus-monitor". Un po 'di attività sulla schermata di registrazione degli 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

L'ho inserito in un .shfile e l'ho aggiunto alle applicazioni di avvio di Gnome. Fa quello che dice sulla latta, thx
aross

4

Prova a dare un'occhiata /var/log/auth.log. Dovresti vedere alcuni messaggi correlati da PAM e / o dall'applicazione salvaschermo.


Non ho /var/log/auth.log, ho /var/log/audit/audit.logmolti messaggi relativi a PAM relativi a tutti i tipi di utenti e servizi, ma non sono sicuro di cosa cercare per trovare l'attività di blocco schermo
tutuDajuju,

Ho /var/log/auth.log e non c'è nessun messaggio da PAM né dall'app di screensaver relativa agli eventi di blocco / blocco.
ychaouche,

4

Sì, non sembra essere registrato da nessuna parte per te. @tutuDajuju ha una buona soluzione, quindi ho pensato di portarlo su bash (e rimuovere la dipendenza dall'uso di gnome, questo dovrebbe funzionare indipendentemente dall'ambiente desktop) per coloro che sono interessati.
Se hai questo in esecuzione in background e lo instrada in un file di registro avrai il tuo 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

Questo andava bene sulla mia Fedora con KDE, ma credo che dovrebbe funzionare su altre cose come Debian con gnome et cetera.
Potresti avere problemi se il tuo grepnon supporta -P(nel qual caso puoi semplicemente usare sed).


2

Potrebbe anche rispondere a questa domanda, sebbene non sia la mia risposta (il mio capo mi ha fornito la soluzione) per aiutare gli altri con le stesse necessità (o menti curiose).

tl; dr: usa D-Bus per ottenere i segnali attivati ​​/ disattivati ​​della schermata di blocco.

Sembra che la messaggistica D-Bus sia ampiamente supportata dalle app GNOME e dall'app ScreenSaver in particolare , e sembra che l'app gnome-screensaver sia l'app di blocco ufficiale per la shell Gnome.

Quindi, per provarlo, ho appena eseguito dbus-monitor e ho ottenuto la risposta:

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

Ho scritto un piccolo script Python per registrare questa attività in un file:

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

Polling? che spreco di risorse.
ychaouche,

2

quale screensaver stai usando? se è xscreensaver, attiva le opzioni di registro e prova a monitorare il file di registro.

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


Ho appena scritto nella mia risposta che il valore predefinito in gnome shell è gnome-screensaver, che sembra essere quello che sto usando (dal momento che fedora installa gnome shell di default) ...
tutuDajuju

2

Linux Mint 17.1. La mia stringa dbus è simile alla seguente:

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

o potrebbe apparire così

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

2

Sto usando XFCE e XScreensaver. Il dbus-monitor né la registrazione xscreensaver non funzionano per me. Quindi ho trovato un'altra soluzione. Spero che sia utilizzabile anche per altre persone.

Eseguo questo comando durante l'avvio di XFCE:

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

Gli eventi di blocco / sblocco vengono registrati su /var/log/messagese possono essere recuperati da

grep lockLogger /var/log/messages
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.