Como posso recuperar os tempos de desbloqueio de tela no Gnome em variantes posteriores da Red Hat?

1

O comando last recupera apenas os tempos de login. Estou interessado nas vezes que a tela foi desbloqueada. Qualquer meio indireto de conseguir isso também é bem-vindo.

    
por BuckFilledPlatypus 07.03.2014 / 22:32

1 resposta

2

Eu me deparei com este método discutido em SO neste Q & A intitulado: . Abaixo estão os detalhes desse post.

autostart

O método faz uso deste arquivo autostart .desktop config que você deixaria cair neste diretório: $HOME/.config/autostart/watcher.sh.desktop .

$ cat ~/.config/autostart/watcher.sh.desktop 

[Desktop Entry]
Type=Application
Exec=/home/<username>/path/to/watcher/watcher.sh
Hidden=false
X-GNOME-Autostart-enabled=true
Name[de_DE]=watcher
Name=watcher
Comment[de_DE]=
Comment=

watch.sh

O script watch.sh recebe argumentos, portanto, é necessário incluir os que estão na linha Exec= acima. Veja um exemplo de como o watcher.sh pode parecer:

$ cat watch.sh
#!/bin/bash
# param $1: type, in:
#     ["SCREEN_LOCKED",
#     "SCREEN_UNLOCKED",
#     "LOGIN",
#     "LOGOUT",
#     "SIGINT",
#     "SIGTERM"]
function write_log {
  if [ -z $1 ]; then
    1="unspecified"
  fi
  echo -e "$1\t$(date)" >> "$LOG"
}

function notify {
  echo "$@" >&2
}

function show_usage {
  notify "Usage: $0 login <address> <logfile>"
  notify "Parameters:"
  notify "  login: You must use the string 'login' to avoid seeing this message."
  notify "  <logfile>: File to store logs."
  notify ""
  notify "This script is designed to go in the bashrc file, and be called in the"
  notify "form of: $0 login '$USER@$(uname -n)' >>/path/to/logfile &"
  notify ""
}

if [ "$#" -eq 0 ]; then
  show_usage
  exit 1
fi
if [ "$1" != "login" ]; then
  show_usage
  notify "Error: first parameter must be the string 'login'."
  exit 1
fi
LOG="$2"
if [ -z "$LOG" ]; then
  notify "Error: please specify a logfile."
  exit 1
elif [ -f "$LOG" ]; then
  # If the logfile exists, verify that the last action was a LOGOUT.
  LASTACTION=$(tail -1 "$LOG" | awk '{print $1}')
  if [ $LASTACTION != "LOGOUT" ]; then
    notify "Logfile '$LOG' exists but last action was not logout: $LASTACTION"
    exit 1
  fi
else
  # If the file does not exist, create it.
  touch "$LOG" || ( notify "Cannot create logfile: '$2'" && exit 1 )
fi

# Begin by logging in:
write_log "LOGIN"

# Handle signals by logging:
trap "write_log 'LOGOUT'; exit" SIGHUP
trap "write_log 'INTERRUPTED_SIGINT'; exit 1" SIGINT
trap "write_log 'INTERRUPTED_SIGTERM'; exit 1" SIGTERM

# Monitor gnome for screen locking. Log these events.
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" | \
  (
    while true; do
      read X;
      if echo $X | grep "boolean true" &> /dev/null; then
        write_log "SCREEN_LOCKED"
      elif echo $X | grep "boolean false" &> /dev/null; then
        write_log "SCREEN_UNLOCKED"
      fi
    done
  )

Com o script no lugar quando você faz o login, ele emitirá entradas para qualquer arquivo de log incluído na linha Exec= que você especificar.

Exec="/path/to/watcher.sh login someuser.log >> error.log"

Exemplo

Você pode simular a execução via linha de comando diretamente:

$ ./watcher.bash login someuser.log  >> smurf.log &
[1] 20684

Se você bloquear sua tela e desbloquear, verá mensagens como estas:

$ more someuser.log 
LOGIN   Fri Mar  7 20:16:29 EST 2014
SCREEN_LOCKED   Fri Mar  7 20:25:48 EST 2014
SCREEN_UNLOCKED Fri Mar  7 20:28:02 EST 2014
SCREEN_UNLOCKED Fri Mar  7 20:28:03 EST 2014
INTERRUPTED_SIGINT  Fri Mar  7 21:44:46 EST 2014

OBSERVAÇÃO: A mensagem "LOGIN" do script acima é de quando você chama o script. Eu abortei o script usando Ctrl + C , que gerou a mensagem "INTERRUPTED_SIGINT" por meio de um dos traps no script watch.sh . Se eu tivesse feito o logout, teria mostrado uma mensagem que eu "LOGOUT".

    
por 08.03.2014 / 04:05