Журнал блокировки экрана KDE?

когда экран заблокирован в KDE (моя конкретная версия Kubuntu, но, надеюсь, это то, что является общим Linux), регистрируется ли событие? Если да, то где я буду искать, чтобы найти его?

12
задан Jistanidiot
11.05.2023 7:35 Количество просмотров материала 3039
Распечатать страницу

2 ответа

используйте D-Bus для получения активных / деактивированных сигналов lockscreen. Имя службы экранной заставки зависит от системы. В общем, 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

[ источник: logging-lock-screen-events ]

3
отвечен krowe 2023-05-12 15:23

он нигде не регистрируется для вас, но, как сказал @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 не поддерживает -P (в этом случае вы можете просто использовать sed).

0
отвечен Hashbrown 2023-05-12 17:40

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх