Как запустить команду или скрипт при блокировке / разблокировке экрана?

16

Я ищу способ хранения времени блокировки / разблокировки.

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

Что я попробовал:

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

Затем я заблокировал экран и проверил, появился ли файл, и он терпит неудачу каждый раз. Как я могу проверить время, чем?

    
задан Benjamin 05.03.2014 в 09:28
источник

2 ответа

19

Следующий сценарий будет записывать время блокировки / разблокировки в файле time_xprofile в вашем доме.

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

сохранить сценарий. Дайте ему разрешение на выполнение.

chmod +x script.sh

Как запустить

./script.sh &

Примечание Сценарий должен работать на заднем плане. Не убивайте его. Если вы включите блокировку / разблокировку экрана во время работы сценария в фоновом режиме, ваше время блокировки / разблокировки будет записано в файле time_xprofile у вас дома. Можно использовать его для запуска некоторой команды или скрипта при блокировке / разблокировке экрана.

Помните, что если вы закроете текущий терминал, ваш скрипт будет убит. Вы можете использовать

nohup ./script.sh &

Затем он продолжит работу даже после закрытия терминала.

Как убить скрипт

Чтобы убить процесс, используйте в терминале

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

Над сценарием вдохновлен этот ответ

    
ответ дан souravc 05.03.2014 в 10:01
источник
5

В ubuntu 14.04 событие DBus для разблокировки блокировки экрана изменилось, и новый скрипт для привязки к событиям блокировки экрана и разблокировки выглядит следующим образом

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
)

Замените SCREEN_LOCKED и SCREEN_UNLOCKED на то, что вам нужно сделать.

    
ответ дан Luv Agarwal 24.06.2015 в 16:41