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

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

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

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

我尝试了什么:

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

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

答案1

以下脚本将把锁定/解锁时间写入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

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

答案2

在 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。

答案3

我使用了相同的答案苏拉夫 c.,但首先我只dbus-monitor --session "type='signal'"在终端中运行,并锁定和解锁我的屏幕。然后,我可以找出我的操作系统的正确名称:

signal time=1680812432.954794 sender=:1.27 -> destination=(null destination) serial=3080 path=/org/xfce/ScreenSaver; interface=org.xfce.ScreenSaver; member=ActiveChanged
   boolean true
signal time=1680812435.757417 sender=:1.27 -> destination=(null destination) serial=3082 path=/org/xfce/ScreenSaver; interface=org.xfce.ScreenSaver; member=ActiveChanged
   boolean false

因此,我的命令以dbus-monitor --session "type='signal',interface='org.xfce.ScreenSaver'"'而不是开头dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'"

相关内容