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

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

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

我尝试了什么:

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

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

以下脚本将在您家中的文件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 

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

在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替换为您需要做的事情。