dbus-monitoring循环自动退出

时间:2019-04-18 08:44:28

标签: bash gnome dbus

我正在尝试在屏幕锁定/解锁时执行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语法错误

2 个答案:

答案 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