Zde je další řešení pomocí "dbus-monitor". Malá aktivita na obrazovce protokolování skriptů 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
Zkuste se podívat na /var/log/auth.log
. Měli byste vidět některé související zprávy z PAM a/nebo aplikace spořiče obrazovky.
Ano, zdá se, že pro vás není nikde přihlášen. @tutuDajuju má dobré řešení, takže jsem si myslel, že ho přenesu na bash (a odstraním závislost na používání gnome, to by mělo fungovat bez ohledu na desktopové prostředí) pro ty, které to zajímá.
Pokud to běží na pozadí a přenášíte to do souboru protokolu, budete mít svůj protokol.
#!/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
Na mé Fedoře s KDE to fungovalo dobře, ale myslím, že by to mělo fungovat na jiných věcech, jako je Debian s gnome a tak dále.
Pokud máte grep
, můžete mít problémy nepodporuje -P
(v takovém případě stačí použít sed
).