Jak uruchomić polecenie lub skrypt przy blokowaniu / odblokowywaniu ekranu?

19

Szukam sposobu, aby zapisać czasy blokady / odblokowania ekranu.

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

Co próbowałem:

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

Następnie zablokowałem ekran i sprawdziłem, czy plik się pojawia i za każdym razem nie działa. Jak mogę sprawdzić czas niż?

Benzoes
źródło
Gdy czytam to pytanie, pomyślałem, że nie korzystasz z serwera X. Wybrana odpowiedź działa czysto podczas uruchamiania serwera X. Może mógłbyś lepiej opisać swoją sytuację ...
ExploWare
FWIW, to pytanie zostało również zadane na wymianie stosów Unix / Linux .
joeytwiddle

Odpowiedzi:

20

Poniższy skrypt zapisze czas blokady / odblokowania w pliku time_xprofilew domu.

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

zapisz skrypt. Daj mu pozwolenie na wykonanie.

chmod +x script.sh

Jak biegać

./script.sh &

Uwaga Skrypt powinien działać w tle. Nie zabijaj tego. Jeśli włączysz blokadę / odblokowanie ekranu, gdy skrypt działa w tle, czas blokady / odblokowania zostanie zapisany w time_xprofilepliku w domu. Można go użyć do uruchomienia komendy lub skryptu przy blokowaniu / odblokowywaniu ekranu.

Pamiętaj, że jeśli zamkniesz obecny terminal, skrypt zostanie zabity. Możesz użyć

nohup ./script.sh &

Następnie będzie działał nawet po zamknięciu terminala.

Jak zabić skrypt

Aby zabić proces, użyj w terminalu

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

Powyższy skrypt jest inspirowany tą odpowiedzią

souravc
źródło
Czy nadal działa w Ubuntu 17.10 z XServer? Nie wiem, dlaczego dla mnie nie działa ...
eddieferetro,
Co więcej: działa tylko kilka razy ...
eddieferetro
1
@ eddieferetro Nadal jestem 16.04 nie mogę przetestować dla ciebie. Dlaczego nie zadajesz nowego pytania określającego swoje problemy? Zdarzenie Dbus dla blokady ekranu można zmienić w 17.10
souravc
6

W Ubuntu 14.04 zdarzenie DBus dla odblokowania blokady ekranu zmieniło się, a nowy skrypt dla powiązania z zablokowaniem i odblokowaniem ekranu wygląda następująco

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
)

Zastąp SCREEN_LOCKED i SCREEN_UNLOCKED tym, co musisz zrobić.

Luv Agarwal
źródło