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


19

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

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

我尝试了什么:

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

然后,我锁定了屏幕,并检查文件是否出现,并且每次都失败。我该如何检查时间?


在阅读此问题时,我以为您没有在运行X服务器。您选择的答案仅 运行X服务器时有效。也许您可以更好地描述您的情况...
ExploWare

Answers:


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

上面的脚本受此答案启发


它仍然可以在XServer的ubuntu 17.10中工作吗?我不知道为什么对我
不起作用。– 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替换为您需要执行的操作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.