ロック画面イベントのロギング


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どのユーザーとサービスのすべての並べ替えについてPAM関連のメッセージをたくさん持っているが、私は本当にわからどのようなロック画面の活動を探して見てないんだけど

回答:


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のスタートアップアプリケーションに追加しました。缶に書かれていることを実行するthx
aros

4

を見てみてください/var/log/auth.log。PAMやスクリーンセーバーアプリケーションからの関連メッセージが表示されるはずです。


私にはありません/var/log/auth.log/var/log/audit/audit.logすべての種類のユーザーとサービスに関するPAM関連のメッセージがたくさんありますが、ロック画面のアクティビティを見つけるために何を探すべきか本当にわかりません
tutuDajuju 2013年

/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

これはKDEを使用した私のFedoraで問題なく動作しましたが、gnomeなどを使用したDebianのような他の機能でも動作するはずです。
grepサポートしていない場合は問題が発生する可能性があります-P(その場合はを使用できますsed)。


2

同じ必要性(または好奇心)を持つ他の人を助けるのは私の答えではありませんが(私の上司が解決策を提供してくれました)、これにも答える可能性があります。

tl; dr:D-Busを使用して、ロック画面のアクティブ/非アクティブ信号を取得します。

そうですD-バスメッセージングが広くGNOMEアプリケーションによってサポートされている、とスクリーンセーバーアプリは、特に、と思われるGNOME-スクリーンセーバーアプリが 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

ポーリング?何という資源の無駄遣い。
ychaouche

2

どのスクリーンセーバーを使用していますか?xscreensaverの場合は、ログオプションをオンにして、ログファイルの監視を試みます。

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


私は自分の答えを書いたところ、gnomeシェルのデフォルトはgnome-screensaverで、これは私が使用しているように見えます(
fedoraは

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.