Журнал подій блокованого екрана


10

Проблема

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

Питання

Чи є спосіб зареєструвати подію користувача, що входить і виходить із «блокованого екрана» на Fedora 18 (або загальне рішення для Linux)?

Спробував

  1. Спробував, дивлячись /var/log/boot- ніякої допомоги. І подивившись, /var/log/messagesя знайшов повідомлення systemd-logind[xxx]: New session 140 of user YYY, але не зміг знайти подію блокованого екрану (гном?).
  2. Перепробував, у /var/log/audit/audit.logякому є багато повідомлень, пов’язаних з PAM, про всіх користувачів та сервісів, але я не дуже впевнений, що шукати, щоб знайти активність блокованого екрана

Відповіді:


7

Ось ще одне рішення за допомогою "dbus-монітора". Невелика активність екрана реєстрації сценаріїв.

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. Робить те, що написано на
бляшанці

4

Спробуйте поглянути /var/log/auth.log. Ви повинні побачити деякі пов’язані повідомлення з програми PAM та / або програми заставки.


У мене немає /var/log/auth.log, у мене є /var/log/audit/audit.logбагато повідомлень, пов’язаних з PAM, про всі види користувачів та служб, але я не дуже впевнений, що шукати, щоб знайти активність
блокованого

У мене /var/log/auth.log, і немає жодного повідомлення від PAM або програми заставки щодо подій блокування / блокування.
ychaouche

4

Так, це, здається, не реєструється ніде для вас. @tutuDajuju має хороше рішення, тому я подумав, що я перенесу його на баш (і усуну залежність від використання 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 et cetera.
У вас можуть виникнути проблеми, якщо ваш grepне підтримує -P(у такому випадку ви можете просто користуватися sed).


2

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

tl; dr: Використовуйте D-Bus для отримання активованих / деактивованих сигналів блокувального екрану.

Здається, обмін повідомленнями D-Bus широко підтримується додатками GNOME, зокрема програмою ScreenSaver , і, здається, додаток gnome-screensaver є офіційним додатком блокування для оболонки Gnome.

Отже, щоб перевірити це, я просто запустив dbus-монітор і отримав відповідь:

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

Опитування? яка трата ресурсів.
ychaouche

2

яку заставку ви використовуєте? якщо це xscreensaver, увімкніть параметри журналу та спробуйте контролювати файл журналу.

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


Я просто написав в своєму власному відповіді , що за замовчуванням в GNOME Shell є гном-заставка, яка , здається, що я використовую (з фетровому капелюхом встановлює гнома оболонки за замовчуванням) ...
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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.