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

19

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

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

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

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

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

Вениамин
источник
Когда я читал этот вопрос, я подумал, что вы не используете X-сервер. Ответ, который вы выбрали, просто работает во время работы X-сервера. Может быть, вы могли бы описать вашу ситуацию лучше ...
ExploWare
FWIW, этот вопрос также задавался на Unix / Linux stackexchange .
Joeytwiddle

Ответы:

20

Следующий скрипт запишет время блокировки / разблокировки в файл 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
источник
Работает ли он в Ubuntu 17.10 с XServer? Я не знаю, почему у меня не работает ..
eddieferetro
Более того: это работает только несколько раз ...
eddieferetro
1
@eddieferetro Я все еще 16.04 не могу проверить это для вас. Почему бы вам не задать новый вопрос с указанием ваших проблем? Событие Dbus для блокировки экрана может быть изменено в 17.10
souravc
6

В 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 тем, что вам нужно сделать.

Лув Агарвал
источник