¿Cómo ejecutar un comando o script en el bloqueo / desbloqueo de pantalla?


19

Estoy buscando una manera de almacenar tiempos de bloqueo / desbloqueo de pantalla.

A=$(date)
echo $A >> $HOME/time_xprofile

¿Qué probé?

$HOME/.bashrc
$HOME/.bash_logout
$HOME/.bash_prompt
$HOME/.xprofile

Luego bloqueé la pantalla y verifiqué si aparecía el archivo y falla cada vez. ¿Cómo puedo consultar la hora que?


Mientras leía esta pregunta, pensé que no estabas ejecutando un servidor X. La respuesta que ha seleccionado es puramente funcional mientras se ejecuta un servidor X. Tal vez podría describir mejor su situación ...
ExploWare

FWIW, esta pregunta también se hizo en el intercambio de pila Unix / Linux .
joeytwiddle

Respuestas:


20

El siguiente script escribirá el tiempo de bloqueo / desbloqueo en un archivo time_xprofileen su hogar.

#!/bin/bash

dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" | \
( while true
    do read X
    if echo $X | grep "boolean true" &> /dev/null; then
        echo "locking at $(date)" >> $HOME/time_xprofile
    elif echo $X | grep "boolean false" &> /dev/null; then
        echo "unlocking at $(date)" >> $HOME/time_xprofile
    fi
    done )

Guarda el guión. Dale permiso de ejecución.

chmod +x script.sh

Como correr

./script.sh &

Nota El script debe ejecutarse en segundo plano. No lo mates. Si activa / desactiva el bloqueo de pantalla mientras el script se ejecuta en segundo plano, su tiempo de bloqueo / desbloqueo se registrará en el time_xprofilearchivo de su hogar. Se puede usar para ejecutar algún comando o script en el bloqueo / desbloqueo de pantalla.

Tenga en cuenta que si cierra la terminal actual, su secuencia de comandos se eliminará. Puedes usar

nohup ./script.sh &

Luego continuará ejecutándose incluso después de cerrar la terminal.

Cómo matar el guión

Para matar el proceso, use en la terminal

ps ax| grep "[s]cript.sh" | cut -d' ' -f2 | xargs kill

El guión anterior está inspirado en esta respuesta


¿Sigue funcionando en Ubuntu 17.10 con XServer? No sé por qué no está funcionando para mí ..
eddieferetro

Más que eso: solo funciona un par de veces ...
eddieferetro

1
@eddieferetro Todavía estoy en 16.04 no puedo probarlo por ti. ¿Por qué no haces una nueva pregunta especificando tus problemas? El evento Dbus para el bloqueo de pantalla se puede cambiar en 17.10
souravc

6

En ubuntu 14.04, el evento DBus para el desbloqueo de bloqueo de pantalla ha cambiado y el nuevo script para vincular los eventos de bloqueo de pantalla y desbloqueo se ve de la siguiente manera

dbus-monitor --session "type='signal',interface='com.ubuntu.Upstart0_6'" | \
(
  while true; do
    read X
    if echo $X | grep "desktop-lock" &> /dev/null; then
      SCREEN_LOCKED;
    elif echo $X | grep "desktop-unlock" &> /dev/null; then
      SCREEN_UNLOCKED;
    fi
  done
)

Reemplace SCREEN_LOCKED y SCREEN_UNLOCKED con lo que necesita hacer.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.