如何在屏幕锁定/解锁时运行命令或脚本?

Ben*_*min 19 command-line bash

我正在寻找一种存储锁定/解锁屏幕时间的方法。

A=$(date)
echo $A >> $HOME/time_xprofile
Run Code Online (Sandbox Code Playgroud)

我尝试了什么:

$HOME/.bashrc
$HOME/.bash_logout
$HOME/.bash_prompt
$HOME/.xprofile
Run Code Online (Sandbox Code Playgroud)

然后我锁定屏幕并检查文件是否出现并且每次都失败。我怎样才能检查时间比?

sou*_* c. 21

以下脚本将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 )
Run Code Online (Sandbox Code Playgroud)

保存脚本。给它执行权限。

chmod +x script.sh
Run Code Online (Sandbox Code Playgroud)

怎么跑

./script.sh &
Run Code Online (Sandbox Code Playgroud)

注意脚本应该在后台运行。不要杀死它。如果您在后台运行脚本时打开屏幕锁定/解锁,您的锁定/解锁时间将记录在time_xprofile您家中的文件中。可以使用它在屏幕锁定/解锁时运行一些命令或脚本。

请注意,如果您关闭当前终端,您的脚本将被终止。您可以使用

nohup ./script.sh &
Run Code Online (Sandbox Code Playgroud)

然后即使在关闭终端后它也会继续运行。

如何杀死脚本

要终止进程,请在终端中使用

ps ax| grep "[s]cript.sh" | cut -d' ' -f2 | xargs kill
Run Code Online (Sandbox Code Playgroud)

以上脚本的灵感来自这个答案


小智 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
)
Run Code Online (Sandbox Code Playgroud)

将 SCREEN_LOCKED 和 SCREEN_UNLOCKED 替换为您需要执行的操作。