Registrando eventos na tela de bloqueio


10

Problema

Veja a data e hora exata em que um usuário bloqueia e desbloqueia sua estação de trabalho - executando o Fedora 18.

Questão

Existe alguma maneira de registrar um evento de um usuário entrando e saindo da "tela de bloqueio" no fedora 18 (ou uma solução linux geral)?

Tentou

  1. Tentei olhar /var/log/boot- sem ajuda. E olhando para /var/log/messagesencontrei a mensagem systemd-logind[xxx]: New session 140 of user YYY, mas não consegui encontrar o evento da tela de bloqueio (gnome?).
  2. Tentei ver o /var/log/audit/audit.logque tem muitas mensagens relacionadas ao PAM sobre todos os tipos de usuários e serviços, mas não sei ao certo o que procurar para encontrar a atividade da tela de bloqueio

Respostas:


7

Aqui está outra solução usando o "dbus-monitor". Uma pequena atividade na tela de log de script do 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

Coloquei isso em um .sharquivo e o adicionei aos aplicativos de inicialização do Gnome. Faz o que diz na lata, thx
aross

4

Tente dar uma olhada /var/log/auth.log. Você deve ver algumas mensagens relacionadas do PAM e / ou do aplicativo de proteção de tela.


Eu não tenho /var/log/auth.log, eu tenho /var/log/audit/audit.logque tem um monte de relacionados PAM mensagens sobre todos os tipos de usuários e serviços, mas eu não sou realmente certo o que procurar para encontrar a atividade de tela de bloqueio
tutuDajuju

Eu tenho /var/log/auth.log e não há mensagem do PAM nem do aplicativo de proteção de tela em relação aos eventos de bloqueio / bloqueio.
Ychaouche 04/12/19

4

Sim, não parece estar registrado em nenhum lugar para você. O @tutuDajuju tem uma boa solução, então pensei em portá-lo para o bash (e remover a dependência do uso do gnome, isso deve funcionar independentemente do ambiente da área de trabalho) para os interessados.
Se você tiver isso em execução em segundo plano e canalizá-lo para um arquivo de log, você terá seu log.

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

Isso correu bem no meu Fedora com o KDE, mas acho que deve funcionar em outras coisas como o Debian com o gnome et cetera.
Você pode ter problemas se grepnão suportar -P(nesse caso, você pode apenas usar sed).


2

É melhor responder a isso, embora não seja a minha resposta (meu chefe me forneceu a solução) para ajudar outras pessoas com a mesma necessidade (ou mentes curiosas).

tl; dr: Use o D-Bus para obter os sinais ativados / desativados da tela de bloqueio.

Parece que as mensagens D-Bus são amplamente suportadas pelos aplicativos GNOME e pelo aplicativo ScreenSaver especificamente , e parece que o aplicativo gnome-screensaver é o aplicativo de bloqueio oficial para o shell do Gnome.

Então, para testá-lo, executei o dbus-monitor e obtive a resposta:

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

Eu escrevi um pequeno script python para registrar esta atividade em um arquivo:

#!/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? que desperdício de recursos.
Ychaouche 04/12/19

2

qual protetor de tela você está usando? se for xscreensaver, ative as opções de log e tente monitorar o arquivo de log.

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


Eu só escrevi na minha própria resposta que o padrão no GNOME Shell é gnome-screensaver, que parece ser o que eu estou usando (desde fedora instala GNOME Shell por padrão) ...
tutuDajuju

2

Linux Mint 17.1. Minha string dbus fica assim:

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

ou pode ficar assim

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

2

Estou usando o XFCE e o XScreensaver. O registro dbus-monitor nem o xscreensaver log não funcionam para mim. Então, eu encontrei outra solução. Espero que também seja útil para outras pessoas.

Eu executo este comando durante o início do XFCE:

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

Os eventos de bloqueio / desbloqueio são registrados no /var/log/messagese podem ser recuperados por

grep lockLogger /var/log/messages
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.