Fedora 18を実行しているユーザーが自分のワークステーションをロックおよびロック解除した正確な日時を確認します。
Fedora 18(または一般的なLinuxソリューション)で「ロック画面」に出入りするユーザーのイベントをログに記録する方法はありますか?
/var/log/boot
を見てみました-助けはありません。 /var/log/messages
を見ると、メッセージsystemd-logind[xxx]: New session 140 of user YYY
は見つかりましたが、ロック画面(gnome?)イベントが見つかりませんでした。/var/log/audit/audit.log
を見てみましたが、ロック画面のアクティビティを見つけるために何を探すべきか本当にわかりません「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
はい、どこにも記録されていないようです。 @ 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
を使用できます)。
/var/log/auth.log
をご覧ください。 PAMやスクリーンセーバーアプリケーションから関連するメッセージが表示されるはずです。
XFCEとXScreensaverを使用しています。 dbus-monitorもxscreensaverロギングも機能しません。だから私は別の解決策を見つけました。他の人にも使えるといいですね。
XFCEの起動中にこのコマンドを実行します。
/usr/bin/xscreensaver-command -watch |logger -t lockLogger
ロック/ロック解除イベントは/var/log/messages
に記録され、
grep lockLogger /var/log/messages
Linux Mint 17.1。私のdbus文字列は次のようになります。
dbus-monitor --session "type='signal',path='/org/cinnamon/ScreenSaver'"
またはそれはこのように見えるかもしれません
dbus-monitor --session "type='signal',interface='org.cinnamon.ScreenSaver'"
同じ必要性(または好奇心)を持つ他の人を助けるのは私の答えではありませんが(私の上司が解決策を提供してくれました)、これにも答える可能性があります。
tl; dr:D-Busを使用して、ロック画面のアクティブ/非アクティブ信号を取得します。
D-Bus メッセージングはGNOMEアプリで広くサポートされているようです スクリーンセーバーアプリ 、そして gnome-screensaverアプリ はGnome Shellの公式ロックアプリ。
だから、それをテストするために、私は 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
どのスクリーンセーバーを使用していますか? xscreensaverの場合は、ログオプションをオンにして、ログファイルの監視を試みます。