Kilit ekranı olaylarını günlüğe kaydetme


10

Sorun

Bir kullanıcının iş istasyonunu kilitlediği ve kilidini açtığı tarihi ve saati görün - Fedora 18'i çalıştırın.

Soru

Bir kullanıcının fedora 18'de (veya genel bir linux çözümü) "kilit ekranı" na girip çıktığı bir olayı günlüğe kaydetmenin herhangi bir yolu var mı?

Denenmiş

  1. Bakmaya çalıştım /var/log/boot- yardım yok. Ve baktığımda /var/log/messagesmesajı buldum systemd-logind[xxx]: New session 140 of user YYY, ancak kilit ekranı (gnome?) Olayını bulamadım.
  2. /var/log/audit/audit.logHer türlü kullanıcı ve hizmet hakkında PAM ile ilgili çok fazla iletiye sahip olduğuna bakmayı denedim , ancak kilit ekranı etkinliğini bulmak için ne arayacağınızdan emin değilim

Yanıtlar:


7

İşte "dbus-monitor" kullanan başka bir çözüm. Biraz bash script günlüğü ekran etkinliği.

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

Bunu bir .shdosyaya koydum ve Gnome'un başlangıç ​​uygulamalarına ekledim.
Kalayda

4

Bir göz atmaya çalışın /var/log/auth.log. PAM ve / veya ekran koruyucu uygulamasından ilgili bazı mesajları görmelisiniz.


Hayır /var/log/auth.log, /var/log/audit/audit.logher türlü kullanıcı ve hizmet hakkında PAM ile ilgili mesajların çok olduğu var, ancak kilit ekranı etkinliğini bulmak için ne arayacağımızdan gerçekten emin değilim
tutuDajuju

/Var/log/auth.log var ve kilitleme / kilitleme olaylarına göre PAM ne de ekran koruyucu hiçbir mesaj yoktur.
ychaouche

4

Evet, sizin için hiçbir yere kaydedilmemiş gibi görünüyor. @tutuDajuju iyi bir çözüm var bu yüzden bash (ve gnome kullanma bağımlılığını kaldırmak, bu masaüstü ortamı ne olursa olsun çalışması gerekir) için bağlantı olacağını düşündüm ilgilenenler için.
Bunu arka planda çalıştırırsanız ve bir günlük dosyasına bağlarsanız, günlüğünüz olur.

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

Bu Fedora'mda KDE ile iyi çalıştı, ama sanırım Debian gibi diğer şeyler üzerinde gnome et cetera ile çalışmalı.
Senin eğer sorunları olabilir grepdesteklemez -P(sadece kullanabilirsiniz bu durumda sed).


2

Aynı ihtiyacı (veya meraklı zihinleri) olan başkalarına yardım etmek için cevabım olmasa da (patronum bana çözüm sağladı) buna cevap verebilir.

tl; dr: Kilit ekranının etkin / devre dışı sinyallerini almak için D-Bus kullanın.

Öyle görünüyor D-Bus mesajlaşma yaygın GNOME uygulamalar tarafından desteklenmektedir ve ScreenSaver uygulaması özellikle ve görülüyor ki gnome-ekran koruyucu uygulaması Gnome kabuk için resmi kilitleme uygulamasıdır.

Bu yüzden, test etmek için, sadece dbus-monitör çalıştırdım ve yanıtı aldım:

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

Bu etkinliği bir dosyaya kaydetmek için küçük bir python betiği yazdım:

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

Yoklama? ne kaynak israfı.
ychaouche


2

Linux Mint 17.1. Benim dbus dizesi şöyle:

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

ya da böyle görünebilir

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

2

XFCE ve XScreensaver kullanıyorum. Dbus-monitor hiçbir xscreensaver günlüğü benim için çalışmıyor. Böylece başka bir çözüm buldum. Umarım diğer insanlar için de kullanılabilir.

XFCE başlatma sırasında bu komutu çalıştırın:

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

Kilitleme / kilit açma olayları günlüğe kaydedilir /var/log/messagesve tarafından alınabilir

grep lockLogger /var/log/messages
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.