KDE 屏幕锁定日志?

KDE 屏幕锁定日志?

当 KDE 中的屏幕被锁定时(我的具体版本是 Kubuntu,但希望这是通用 Linux),事件会被记录吗?如果会,我该在哪里查找它?

答案1

使用 D-Bus 获取锁屏的激活/停用信号。屏幕保护程序服务的名称因系统而异。一般来说,KDE 使用org.freedesktop.ScreenSaver,Gnome 使用org.gnome.ScreenSaver。但这不能依赖,例如,Mint 使用org.cinnamon.ScreenSaver

有用的命令

这些假设您的屏幕保护程序是org.freedesktop.ScreenSaver并且您的 DBus 服务是org.freedesktop.DBus。您可能需要针对其他系统进行调整。使用以下信息来找出您的系统使用什么:

  • 为了得到dbus 服务列表在您当前会话中可用,使用:

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

    如果您只希望使用屏幕保护程序服务,请添加|grep screensaver到末尾。

  • 要获取屏幕保护程序服务支持的命令列表,请使用:

    qdbus org.freedesktop.ScreenSaver /ScreenSaver
    
  • 要调用命令,请使用:

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

    SetActive在支持的命令列表中列出并且采用布尔值。

  • 要监控服务:

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

自动化

现在您了解了系统的工作原理,您可以使用 Python 脚本将此活动记录到文件中:

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

[ 来源:记录锁屏事件]

答案2

它不会为您记录在任何地方,但就像@krowe所说的那样,您可以将其挂接到它。
我开发了这个bash脚本,它可以为您计算出您的设置的细节,如果您在后台运行它并将其传输到日志文件,您将获得您的日志。

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

这在我的 Fedora 和 KDE 上运行良好,但我想它应该可以在其他系统上运行,比如 Debian 和 gnome 等等。如果你的电脑不支持,
你可能会遇到问题(在这种情况下,你可以使用)。grep-Psed

相关内容