Protokollieren von Sperrbildschirmereignissen

10

Problem

Sehen Sie sich das genaue Datum und die Uhrzeit an, zu der ein Benutzer seinen Arbeitsplatz sperrt und entsperrt - unter Fedora 18.

Frage

Gibt es eine Möglichkeit, ein Ereignis zu protokollieren, bei dem ein Benutzer unter fedora 18 (oder einer allgemeinen Linux-Lösung) den "Sperrbildschirm" betritt und verlässt?

Versucht

  1. Versucht zu schauen /var/log/boot- keine Hilfe. Und als /var/log/messagesich sie ansah systemd-logind[xxx]: New session 140 of user YYY, fand ich die Nachricht , konnte aber das Sperrbildschirm-Ereignis (Gnom?) Nicht finden.
  2. /var/log/audit/audit.logIch habe versucht zu sehen, welche viele PAM-bezogene Nachrichten über alle Arten von Benutzern und Diensten enthält, bin mir aber nicht sicher, wonach ich suchen soll, um die Sperrbildschirmaktivität zu finden
tutuDajuju
quelle

Antworten:

7

Hier ist eine andere Lösung mit "dbus-monitor". Eine kleine Aktivität auf dem Bash-Skript-Protokollierungsbildschirm.

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
quelle
Ich habe dies in eine .shDatei eingefügt und es den Startanwendungen von Gnome hinzugefügt. Tut, was es verspricht, thx
aross
4

Versuchen Sie einen Blick darauf zu werfen /var/log/auth.log. Sie sollten einige verwandte Nachrichten von PAM und / oder der Bildschirmschoneranwendung sehen.

scai
quelle
Ich habe keine /var/log/auth.log, ich habe /var/log/audit/audit.logviele PAM-bezogene Nachrichten über alle Arten von Benutzern und Diensten, aber ich bin mir nicht sicher, wonach ich suchen soll, um die Sperrbildschirmaktivität zu finden
tutuDajuju
Ich habe /var/log/auth.log und es gibt keine Nachricht von PAM oder der Bildschirmschoner-App in Bezug auf die Sperr- / Sperrereignisse.
Ychaouche
4

Ja, es scheint nirgendwo für Sie protokolliert zu sein. @tutuDajuju hat eine gute Lösung, daher dachte ich, ich würde sie auf Bash portieren (und die Abhängigkeit von der Verwendung von Gnome beseitigen, dies sollte unabhängig von der Desktop-Umgebung funktionieren) für diejenigen, die interessiert sind.
Wenn Sie dies im Hintergrund ausführen und an eine Protokolldatei weiterleiten, haben Sie Ihr Protokoll.

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

Dies lief gut auf meinem Fedora mit KDE, aber ich denke, es sollte bei anderen Dingen wie Debian mit Gnome und so weiter funktionieren.
Möglicherweise haben Sie Probleme, wenn Sie grepdies nicht unterstützen -P(in diesem Fall können Sie es einfach verwenden sed).

Hashbrown
quelle
2

Könnte dies auch beantworten, obwohl es nicht meine Antwort ist (mein Chef hat mir die Lösung gegeben), anderen mit dem gleichen Bedürfnis (oder neugierigen Köpfen) zu helfen.

tl; dr: Verwenden Sie D-Bus, um die aktivierten / deaktivierten Signale des Sperrbildschirms abzurufen.

Es scheint, dass D-Bus- Messaging von GNOME-Apps und speziell von der ScreenSaver-App weitgehend unterstützt wird , und es scheint, dass die Gnome-Bildschirmschoner-App die offizielle Sperr-App für die Gnome-Shell ist.

Um es zu testen, habe ich einfach dbus-monitor ausgeführt und die Antwort erhalten:

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

Ich habe ein kleines Python-Skript geschrieben, um diese Aktivität in einer Datei zu protokollieren:

#!/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
quelle
Umfragen? Was für eine Verschwendung von Ressourcen.
Ychaouche
2

Welchen Bildschirmschoner verwenden Sie? Wenn es sich um xscreensaver handelt, aktivieren Sie die Protokolloptionen und versuchen Sie, die Protokolldatei zu überwachen.

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


quelle
Ich habe gerade in meiner eigenen Antwort geschrieben, dass der Standard in der Gnome-Shell Gnome-Bildschirmschoner ist, was anscheinend das ist, was ich verwende (da Fedora die Gnome-Shell standardmäßig installiert) ...
tutuDajuju
2

Linux Mint 17.1. Mein dbus String sieht so aus:

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

oder es kann so aussehen

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

Ich verwende XFCE und XScreensaver. Der dbus-Monitor und die xscreensaver-Protokollierung funktionieren bei mir nicht. Also habe ich eine andere Lösung gefunden. Ich hoffe, dass es auch für andere Leute verwendbar ist.

Ich führe diesen Befehl während des XFCE-Starts aus:

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

Sperren / Entsperren-Ereignisse werden im protokolliert /var/log/messagesund können von abgerufen werden

grep lockLogger /var/log/messages
eNca
quelle