Wie führe ich einen Befehl oder ein Skript beim Sperren / Entsperren des Bildschirms aus?

19

Ich suche nach einer Möglichkeit, Sperr- / Entsperrzeiten für den Bildschirm zu speichern.

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

Was habe ich versucht:

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

Dann habe ich den Bildschirm gesperrt und überprüft, ob eine Datei angezeigt wird und sie jedes Mal fehlschlägt. Wie kann ich die Uhrzeit dann überprüfen?

Benjamin
quelle
Als ich diese Frage las, dachte ich, dass Sie keinen X-Server ausführen. Die Antwort , die Sie ausgewählt haben , arbeitet rein , während ein X - Server ausgeführt wird . Vielleicht könnten Sie Ihre Situation besser beschreiben ...
ExploWare
FWIW, diese Frage wurde auch bei Unix / Linux stackexchange gestellt .
Joeytwiddle

Antworten:

20

Das folgende Skript schreibt die Sperr- / Entsperrzeit in eine Datei time_xprofilein Ihrem Zuhause.

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

Speichern Sie das Skript. Gib ihm die Ausführungserlaubnis.

chmod +x script.sh

Wie läuft man?

./script.sh &

Hinweis Das Skript sollte im Hintergrund ausgeführt werden. Töte es nicht Wenn Sie den Bildschirm sperren / entsperren, während das Skript im Hintergrund ausgeführt wird, wird die Zeit für das Sperren / Entsperren time_xprofilebei Ihnen zu Hause in einer Datei aufgezeichnet . Man kann es verwenden, um einen Befehl oder ein Skript beim Sperren / Entsperren des Bildschirms auszuführen.

Beachten Sie, dass beim Schließen des aktuellen Terminals Ihr Skript beendet wird. Sie können verwenden

nohup ./script.sh &

Dann läuft es auch nach dem Schließen des Terminals weiter.

Wie töte ich das Drehbuch?

Verwenden Sie im Terminal, um den Vorgang abzubrechen

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

Das obige Skript ist von dieser Antwort inspiriert

souravc
quelle
Funktioniert es immer noch in Ubuntu 17.10 mit XServer? Ich weiß nicht, warum nicht für mich arbeitet ..
Eddieferetro
Mehr als das: es funktioniert nur ein paar Mal ...
Eddieferetro
1
@eddieferetro Ich bin noch am 16.04 kann es nicht für dich testen. Warum stellen Sie keine neue Frage, die Ihre Probleme spezifiziert? Das Dbus-Ereignis für die Bildschirmsperre kann in 17.10
souravc
6

In Ubuntu 14.04 wurde das DBus-Ereignis zum Entsperren des Bildschirms geändert und das neue Skript zum Binden an Ereignisse zum Sperren und Entsperren des Bildschirms sieht folgendermaßen aus

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
)

Ersetzen Sie SCREEN_LOCKED und SCREEN_UNLOCKED durch das, was Sie tun müssen.

Luv Agarwal
quelle