การบันทึกเหตุการณ์ล็อคหน้าจอ


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-monitor" กิจกรรมหน้าจอการบันทึกสคริปต์ทุบตีเล็กน้อย

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 และ / หรือแอปพลิเคชันสกรีนเซฟเวอร์


ฉันไม่มี/var/log/auth.logฉันมี/var/log/audit/audit.logข้อความที่เกี่ยวข้องกับ PAM จำนวนมากเกี่ยวกับผู้ใช้และบริการทุกประเภท แต่ฉันไม่แน่ใจจริงๆว่าจะหากิจกรรมล็อคหน้าจอได้อย่างไร
tutuDajuju

ฉันมี /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 เพื่อรับสัญญาณการเปิดใช้งาน / ปิดการใช้งานของ lockscreen

ดูเหมือนว่าการส่งข้อความD-Busได้รับการสนับสนุนอย่างกว้างขวางจากแอป GNOME และแอป ScreenSaver โดยเฉพาะและดูเหมือนว่าแอป gnome-screensaverเป็นแอปล็อคอย่างเป็นทางการสำหรับ Gnome shell

ดังนั้นเพื่อทดสอบออกมาฉันเพิ่งรันdbus-monitorและรับคำตอบ:

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

ฉันได้เขียนสคริปต์หลามเล็ก ๆ น้อย ๆ เพื่อบันทึกกิจกรรมนี้ลงในไฟล์:

#!/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-สกรีนเซฟเวอร์ซึ่งดูเหมือนจะเป็นสิ่งที่ฉันใช้ (ตั้งแต่หมวกติดตั้งเปลือกคำพังเพยโดยค่าเริ่มต้น) ...
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-monitor การบันทึก xscreensaver ไม่ทำงานสำหรับฉัน ดังนั้นฉันจึงได้พบวิธีแก้ปัญหาอื่น ฉันหวังว่ามันจะใช้งานได้สำหรับคนอื่นด้วย

ฉันรันคำสั่งนี้ในระหว่างการเริ่ม XFCE:

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

เหตุการณ์ล็อค / ปลดล็อคถูกบันทึกไว้ใน/var/log/messagesและสามารถเรียกคืนได้โดย

grep lockLogger /var/log/messages
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.