画面がロックまたはロック解除されたときにスクリプトを実行する方法は?

画面がロックまたはロック解除されたときにスクリプトを実行する方法は?

Gnomeセッションがロックされているかロック解除されている場合は、スクリプトを実行したいと思います。
デスクトップがロックされているかロック解除されているときにこの動作を傍受していくつかの操作を実行する方法はありますか?

答え1

何かが起こると、Gnome-screensaverはいくつかの信号をdbusに送ります。

ここ文書(いくつかの例を含む)

次のように実行されるスクリプトを作成できます。

dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'"

dbus-monitorこれは、画面がロックまたはロック解除されるたびに1行を印刷する必要性を満たします。


必要な操作を実行するbashコマンドは次のとおりです。

dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" |
  while read x; do
    case "$x" in 
      *"boolean true"*) echo SCREEN_LOCKED;;
      *"boolean false"*) echo SCREEN_UNLOCKED;;  
    esac
  done

必要に応じてecho SCREEN_LOCKED交換してください。echo SCREEN_UNLOCKED

答え2

LockedHint今、スクリーンセーバーのメッセージを聞くよりもスクリーンセーバーのメッセージを聞く方が良いと思います。これはスクリーンセーバーの実装に縛られません。

これを行う簡単なスクリプトは次のとおりです。

gdbus monitor -y -d org.freedesktop.login1 | grep LockedHint

これを考慮すると:

/org/freedesktop/login1/session/_32: org.freedesktop.DBus.Properties.PropertiesChanged ('org.freedesktop.login1.Session', {'LockedHint': <true>}, @as [])
/org/freedesktop/login1/session/_32: org.freedesktop.DBus.Properties.PropertiesChanged ('org.freedesktop.login1.Session', {'LockedHint': <false>}, @as [])

答え3

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
)

答え4

Kubuntu を使用する場合、または KDE/Plasma をデスクトップ環境として使用する場合は、インターフェイスを受信する必要があるため、org.freedesktop.ScreenSaverそのイベントを受信するスクリプトは次のとおりです。

dbus-monitor --session "type='signal',interface='org.freedesktop.ScreenSaver'" |
  while read x; do
    case "$x" in 
      *"boolean true"*) echo SCREEN_LOCKED;;
      *"boolean false"*) echo SCREEN_UNLOCKED;;  
    esac
  done

関連情報