Ecco un'altra soluzione che utilizza "dbus-monitor". Un po' di attività della schermata di registrazione dello script 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
Prova a dare un'occhiata a /var/log/auth.log
. Dovresti vedere alcuni messaggi correlati da PAM e/o dall'applicazione salvaschermo.
Sì, non sembra essere registrato da nessuna parte per te. @tutuDajuju ha una buona soluzione, quindi ho pensato di portarlo su bash (e rimuovere la dipendenza dall'uso di gnome, dovrebbe funzionare indipendentemente dall'ambiente desktop) per coloro che sono interessati.
Se lo hai in esecuzione in background e lo invii in un file di registro, avrai il tuo registro.
#!/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
Funzionava bene sulla mia Fedora con KDE, ma immagino che dovrebbe funzionare su altre cose come Debian con gnome et cetera.
Potresti avere problemi se il tuo grep
non supporta -P
(nel qual caso puoi semplicemente usare sed
).