web-dev-qa-db-fra.com

Événements à écran de location

Problème

Consultez la date et l'heure exactes qu'un utilisateur verrouille et déverrouille son poste de travail - exécutant Fedora 18.

Question

Existe-t-il un moyen de connecter un événement d'un utilisateur entrant et sortant de "écran verrouillage" sur Fedora 18 (ou une solution générale Linux)?

A essayé

  1. Essayé en regardant /var/log/boot - Pas d'aide. Et en regardant /var/log/messages J'ai trouvé le message systemd-logind[xxx]: New session 140 of user YYY, mais je n'ai pas pu trouver l'événement de l'écran de verrouillage (Gnome?).
  2. Essayé en regardant /var/log/audit/audit.log qui a beaucoup de messages liés à PAM sur toutes sortes d'utilisateurs et de services, mais je ne suis pas vraiment sûr de savoir quoi rechercher l'activité de verrouillage
10
tutuDajuju

Voici une autre solution utilisant "DBUS-Monitor". Une petite activité d'écran de journalisation du 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
7

Oui, cela ne semble pas être enregistré n'importe où pour vous. @ Tutudajuju a une bonne solution Donc, je pensais que je l'aurais de la porter pour bash (et supprimer la dépendance à l'aide de Gnome, cela devrait fonctionner indépendamment de l'environnement de bureau) pour ceux qui sont intéressés.
[.____] Si vous rencontrez cela en arrière-plan et conduisez-le à un fichier journal, vous aurez votre journal.

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

Cela a couru bien sur ma Fedora avec KDE, mais je suppose que cela devrait travailler sur d'autres choses comme Debian avec Gnome et cetera.
Vous pouvez avoir des problèmes si votre grep ne prend pas en charge -P (auquel cas vous pouvez simplement utiliser sed).

4
Hashbrown

Essayez de regarder /var/log/auth.log. Vous devriez voir des messages associés de PAM et/ou de l'application Screensaver.

4
scai

J'utilise xfce et xscreensaver. Les DBus-Monitent que ni la journalisation XScreensaver ne fonctionne pas pour moi. J'ai donc trouvé une autre solution. J'espère que ce sera utilisable pour les autres personnes aussi.

J'exécute cette commande pendant xfce start:

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

Les événements de verrouillage/de déverrouillage sont connectés au /var/log/messages et peut être récupéré par

grep lockLogger /var/log/messages
2
eNca

Linux Mint 17.1. My DBus String ressemble à ceci:

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

ou ça peut ressembler à ceci

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

Pourrait aussi bien répondre à cela bien que ce ne soit pas ma réponse (mon patron m'a fourni la solution) pour aider les autres avec le même besoin (ou des esprits curieux).

tL; DR: Utilisez D-Bus pour obtenir des signaux activés/désactivés par Lockscreen.

Il semble que D-bus Messagerie est largement pris en charge par Gnome Apps, et l'application Screensaver spécifiquement , et il semble que L'application Gnome-Screensaver est l'application de verrouillage officielle pour Gnome Shell.

Donc, pour le tester, je viens de courir dbus-moniteur et obtenez la réponse:

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

J'ai écrit un petit python script pour enregistrer cette activité dans un fichier:

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

quel économiseur d'écran utilisez-vous? S'il s'agit de xscreensaver, allumez les options du journal et essayez de surveiller le fichier journal.

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

2
user218473