Log de bloqueio de tela do KDE?

4

Quando a tela está bloqueada no KDE (minha versão específica é o Kubuntu, mas espero que isso seja algo genérico do Linux), o evento está logado? Se sim, onde eu procuraria encontrá-lo?

    
por Jistanidiot 04.10.2014 / 03:40

2 respostas

3

Use o D-Bus para obter os sinais ativados / desativados do lockscreen. O nome do serviço de proteção de tela varia de sistema para sistema. Em geral, o KDE usa org.freedesktop.ScreenSaver e o Gnome usa org.gnome.ScreenSaver . Não se pode confiar nisso, por exemplo, porque o Mint usa org.cinnamon.ScreenSaver .

Comandos úteis

Estes assumem que sua proteção de tela é org.freedesktop.ScreenSaver e seu serviço DBus é org.freedesktop.DBus . Você pode precisar ajustar isso para outros sistemas. Use as informações a seguir para descobrir o que seu sistema usa:

  • Para obter uma lista dos serviços dbus disponíveis em sua sessão atual, use:

    dbus-send --session --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames
    

    Adicione |grep screensaver ao final se quiser apenas os serviços de proteção de tela disponíveis.

  • Para obter uma lista dos comandos suportados pelo seu serviço de proteção de tela, use:

    qdbus org.freedesktop.ScreenSaver /ScreenSaver
    
  • Para invocar um comando, use:

    dbus-send --session --dest=org.freedesktop.ScreenSaver --type=method_call --print-reply --reply-timeout=20000 /org/freedesktop/ScreenSaver org.freedesktop.ScreenSaver.SetActive boolean:true
    

    Em que SetActive foi listado na lista de comandos suportados e recebe um valor booleano.

  • Para monitorar um serviço:

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

Automação

Agora que você entende como seu sistema funciona, você pode usar um script python para registrar essa 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.freedesktop.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.freedesktop.ScreenSaver' in line:
        running = 1

[Fonte: registro-bloqueio de tela-eventos ]

    
por 04.10.2014 / 06:02
0

Ele não está logado em lugar algum para você, mas como @krowe disse, você pode ligar para ele.
Eu desenvolvi este script bash que trabalha com as especificidades da sua configuração para você, se você tem isso rodando em segundo plano e canalizando 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 eu acho que deve funcionar em outras coisas como o Debian com o gnome et cetera.
Você pode ter problemas se o grep não suportar -P (caso em que você pode usar apenas sed ).

    
por 08.04.2015 / 07:20