Регистрация событий экрана блокировки

10

проблема

Посмотрите точную дату и время, когда пользователь блокирует и разблокирует свою рабочую станцию ​​- работает Fedora 18.

Вопрос

Есть ли способ записать в журнал событие пользователя, входящего и выходящего из «экрана блокировки» на fedora 18 (или обычное решение для Linux)?

Пытался

  1. Пробовал смотреть /var/log/boot- не поможет. И, глядя на, /var/log/messagesя нашел сообщение systemd-logind[xxx]: New session 140 of user YYY, но не смог найти событие блокировки экрана (gnome?).
  2. Пытался глядя на /var/log/audit/audit.logкоторый имеет много связанных с РАМ сообщений о все роде пользователей и услуг, но я не совсем уверен , что искать , чтобы найти активность блокировки экрана
tutuDajuju
источник

Ответы:

7

Вот еще одно решение с использованием «dbus-monitor». Небольшая активность экрана входа в 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
Александр Даллакян
источник
Я поместил это в .shфайл и добавил его в автозагрузку приложений Gnome. Есть ли то , что он говорит на олове, ТНХ
aross
4

Попробуйте взглянуть на /var/log/auth.log. Вы должны увидеть некоторые связанные сообщения от PAM и / или экранной заставки.

SCAI
источник
У меня нет /var/log/auth.log, у меня действительно /var/log/audit/audit.logесть много связанных с PAM сообщений обо всех видах пользователей и служб, но я не совсем уверен, что искать, чтобы найти активность на экране блокировки
tutuDajuju
У меня есть /var/log/auth.log, и нет сообщений от PAM и скринсейвера о событиях блокировки / блокировки.
ychaouche
4

Да, это, кажется, нигде не зарегистрировано для вас. У @tutuDajuju есть хорошее решение, так что я решил перенести его на bash (и убрать зависимость от использования gnome, это должно работать независимо от среды рабочего стола) для тех, кто заинтересован.
Если у вас есть это работает в фоновом режиме и направить его в файл журнала, у вас будет свой журнал.

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

Hashbrown
источник
2

Могу также ответить на это, хотя это не мой ответ (мой начальник предоставил мне решение), чтобы помочь другим с такой же потребностью (или любопытным умом).

tl; dr: Используйте D-Bus для получения сигналов активного / деактивированного экрана блокировки.

Похоже, что обмен сообщениями D-Bus широко поддерживается приложениями GNOME, в частности приложением ScreenSaver , и кажется, что приложение gnome-screensaver является официальным приложением для блокировки оболочки Gnome.

Итак, чтобы проверить это, я просто запустил dbus-monitor и получил ответ:

dbus-monitor --session "type='signal',interface='org.gnome.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.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
источник
Опрос? какая трата ресурсов.
ychaouche
2

какую заставку вы используете? если это xscreensaver, включите параметры журнала и попробуйте отслеживать файл журнала.

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


источник
Я просто написал в своем собственном ответе, что в оболочке gnome по умолчанию используется gnome-screensaver, который, по-видимому, и используется (поскольку fedora по умолчанию устанавливает оболочку gnome) ...
tutuDajuju
2

Linux Mint 17.1. Моя строка dbus выглядит так:

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

или это может выглядеть так

dbus-monitor --session "type='signal',interface='org.cinnamon.ScreenSaver'"
Александр Чжен
источник
2

Я использую XFCE и XScreensaver. У меня на dbus-мониторе ни логирование xscreensaver не работает. Поэтому я нашел другое решение. Я надеюсь, что это будет полезно и для других людей.

Я запускаю эту команду во время запуска XFCE:

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

События блокировки / разблокировки регистрируются в /var/log/messagesи могут быть получены с помощью

grep lockLogger /var/log/messages
ENCA
источник