我正在尝试在屏幕锁定/解锁时执行bash命令。
在教程和StackExchange问题之后,我想到了以下代码:
#!/bin/bash
while true; do #added to try to solve the issue, but alas it did not
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" |
while read sign; do
case "$sign" in
*"boolean false"*) echo "Screen unlocked";;
*"boolean true"*) echo "Screen locked";;
esac
done
done
我使用以下命令启动程序:
nohup myprogram.sh &
一切在开始时都运行良好,但过了一会儿(几个小时),当屏幕锁定/解锁时,不再有任何回显输出。
检查ps aux | grep mycommand
的输出,我得到以下结果 开始 :
user <pid1> 0.0 0.0 <number> <number> pts/2 S 13:01 0.00 /bin/bash myprogram.sh
user <pid2> 0.0 0.0 <number> <number> pts/2 S 13:01 0.00 /bin/bash myprogram.sh
中断后不再发出消息,然后,ps
输出仅显示一行。
我使用的是 CentOS 6.5 和 Gnome 2.28 (很遗憾,我无法升级到任何较新的版本)。
您是否会对可能发生的事情和/或如何进行进一步调查有任何见识?
编辑:更正了while true; then
语法错误
答案 0 :(得分:1)
以下脚本在Linux Mint Cinnamon上对我有用。注意“肉桂”而不是“侏儒”;如果不确定使用什么,请运行echo $DESKTOP_SESSION
,它应该为您提供使用的名称,而不是肉桂。对我来说:
me@localhost ~] echo $DESKTOP_SESSION
cinnamon
这是脚本:
#!/bin/bash
while true; do #added to try to solve the issue, but alas it did not
dbus-monitor --session "type='signal',interface='org.cinnamon.ScreenSaver'" |
while read sign; do
case "$sign" in
*[Ff]alse*) echo "Screen unlocked";;
*[Tt]rue*) echo "Screen locked";;
*) echo "`date` Unknown";;
esac
sleep 0.250
done
done
像这样运行:
nohup ./myprogram </dev/null >| $HOME/myprogram.out 2>&1 &
答案 1 :(得分:1)
final FindIterable<Document> foundResults = collection.find();
for (final Document doc : foundResults) {
doc.remove("_id");
// doc.toJson() no longer has _id
}
我将#!/bin/bash
while true; do
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" |
while read -r sign; do
case "$sign" in
*"boolean false"*) echo "Screen unlocked";;
*"boolean true"*) echo "Screen locked";;
esac
done
done
更改为while true; then
,并将选项while true; do
添加到-r