Rejestrowanie zdarzeń blokady ekranu

10

Problem

Zobacz dokładną datę i godzinę, kiedy użytkownik blokuje i odblokowuje swoje stanowisko pracy - z uruchomioną Fedorą 18.

Pytanie

Czy jest jakiś sposób na zarejestrowanie zdarzenia, w którym użytkownik wchodzi i wychodzi z „ekranu blokady” na fedora 18 (lub ogólne rozwiązanie linux)?

Wypróbowany

  1. Próbowałem patrzeć /var/log/boot- bez pomocy. I patrząc na /var/log/messagesznalazłem wiadomość systemd-logind[xxx]: New session 140 of user YYY, ale nie mogłem znaleźć zdarzenia blokady ekranu (gnome?).
  2. Próbowałem sprawdzić, w /var/log/audit/audit.logktórym jest wiele komunikatów związanych z PAM o różnych użytkownikach i usługach, ale nie jestem pewien, czego szukać, aby znaleźć aktywność na ekranie blokady
tutuDajuju
źródło

Odpowiedzi:

7

Oto inne rozwiązanie wykorzystujące „dbus-monitor”. Trochę aktywności na ekranie rejestrowania skryptu 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
źródło
Umieściłem to w .shpliku i dodałem do aplikacji startowych Gnome. Robi to, co mówi na puszce, dzięki
aross
4

Spróbuj spojrzeć na /var/log/auth.log. Powinieneś zobaczyć niektóre powiązane wiadomości z PAM i / lub aplikacji wygaszacza ekranu.

scai
źródło
Nie mam /var/log/auth.log, mam /var/log/audit/audit.logwiele komunikatów związanych z PAM o różnych użytkownikach i usługach, ale nie jestem pewien, czego szukać, aby znaleźć aktywność na ekranie blokady
tutuDajuju
Mam /var/log/auth.log i nie ma wiadomości od PAM ani aplikacji do wygaszacza ekranu w odniesieniu do zdarzeń blokowania / blokowania.
ychaouche
4

Tak, wydaje się, że nie jest nigdzie dla ciebie zalogowany. @tutuDajuju ma dobre rozwiązanie, więc pomyślałem, że przeniosę go na bash (i usunę zależność od używania gnome, to powinno działać niezależnie od środowiska graficznego) dla tych, którzy są zainteresowani.
Jeśli masz to uruchomione w tle i potokujesz go do pliku dziennika, będziesz mieć swój dziennik.

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

Działa to dobrze na mojej Fedorze z KDE, ale myślę, że powinno działać na inne rzeczy, takie jak Debian z gnome et cetera.
Możesz mieć problemy, jeśli grepnie obsługuje -P(w takim przypadku możesz po prostu użyć sed).

Hashbrown
źródło
2

Równie dobrze mogę odpowiedzieć na to pytanie, chociaż nie jest to moja odpowiedź (mój szef dostarczył mi rozwiązanie), aby pomóc innym o tej samej potrzebie (lub ciekawskich umysłach).

tl; dr: Użyj D-Bus, aby uzyskać sygnały aktywowane / dezaktywowane ekranu blokady.

Wygląda na to, że wiadomości D-Bus są szeroko obsługiwane przez aplikacje GNOME, a konkretnie aplikację ScreenSaver , i wydaje się, że aplikacja gnome-wygaszacz ekranu jest oficjalną aplikacją blokującą dla powłoki Gnome.

Aby to przetestować, właśnie uruchomiłem dbus-monitor i otrzymałem odpowiedź:

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

Napisałem mały skrypt Pythona, aby zalogować tę aktywność do pliku:

#!/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
źródło
Ankieta co za strata zasobów.
ychaouche,
2

jakiego wygaszacza ekranu używasz? jeśli jest to xscreensaver, włącz opcje dziennika i spróbuj monitorować plik dziennika.

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


źródło
Właśnie napisałem we własnej odpowiedzi, że domyślną powłoką gnome jest wygaszacz ekranu gnome, który wydaje się być tym, którego używam (ponieważ fedora domyślnie instaluje powłokę gnome) ...
tutuDajuju
2

Linux Mint 17.1. Mój ciąg dbus wygląda następująco:

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

lub może tak wyglądać

dbus-monitor --session "type='signal',interface='org.cinnamon.ScreenSaver'"
Alexander Chzhen
źródło
2

Używam XFCE i XScreensaver. Rejestrowanie przez dbus-monitor ani rejestrowanie wygaszacza ekranu nie działa dla mnie. Więc znalazłem inne rozwiązanie. Mam nadzieję, że będzie to przydatne także dla innych ludzi.

Uruchamiam to polecenie podczas uruchamiania XFCE:

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

Zablokuj / odblokuj zdarzenia są rejestrowane w /var/log/messagesi mogą być przywrócone przez

grep lockLogger /var/log/messages
eNca
źródło