Come eseguire un comando o uno script con il blocco / sblocco dello schermo?


19

Sto cercando un modo per memorizzare i tempi di blocco / sblocco dello schermo.

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

Cosa ho provato:

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

Quindi ho bloccato lo schermo e verificato se il file è apparso e fallisce ogni volta. Come posso controllare il tempo di?


Mentre leggevo questa domanda, pensavo che non avessi un server X. La risposta che hai selezionato funziona puramente durante l' esecuzione di un server X. Forse potresti descrivere meglio la tua situazione ...
ExploWare

FWIW, questa domanda è stata posta anche su Unix / Linux stackexchange .
joeytwiddle,

Risposte:


20

Il seguente script scriverà l'ora di blocco / sblocco in un file time_xprofiledi casa.

#!/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 )

salva lo script. Dagli il permesso di esecuzione.

chmod +x script.sh

Come correre

./script.sh &

Nota Lo script deve essere eseguito in background. Non ucciderlo. Se si attiva il blocco / sblocco dello schermo mentre lo script è in esecuzione in background, il tempo di blocco / sblocco verrà registrato nel time_xprofilefile di casa. Si può usare per eseguire alcuni comandi o script in blocco / sblocco dello schermo.

Ricorda che se chiudi il terminale corrente il tuo script verrà ucciso. Puoi usare

nohup ./script.sh &

Quindi continuerà a funzionare anche dopo aver chiuso il terminale.

Come uccidere la sceneggiatura

Per terminare il processo, utilizzare nel terminale

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

La sceneggiatura sopra è ispirata da questa risposta


Funziona ancora in Ubuntu 17.10 con XServer? Non so perché non
funzioni


1
@eddieferetro Sono ancora al 16.04, non posso provarlo per te. Perché non fai una nuova domanda specificando i tuoi problemi? L'evento Dbus per il blocco dello schermo può essere modificato in 17.10
souravc l'

6

In Ubuntu 14.04 l'evento DBus per lo sblocco del blocco dello schermo è cambiato e il nuovo script per l'associazione al blocco dello schermo e agli eventi di sblocco è simile al seguente

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
)

Sostituisci SCREEN_LOCKED e SCREEN_UNLOCKED con ciò che devi fare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.