Як запустити команду чи сценарій при блокуванні / розблокуванні екрана?


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

Вище написаний сценарій натхненний цією відповіддю


Він все ще працює в 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 тим, що вам потрібно зробити.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.