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 替换为您需要执行的操作。