我正在寻找一种方法来存储锁定/解锁屏幕时间。
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'"
。