Bash 如何使我的screen locker脚本正常工作?

Bash 如何使我的screen locker脚本正常工作?,bash,cron,gnome,screen-lock,Bash,Cron,Gnome,Screen Lock,我的screenlocker程序出现了一些问题。我花了一天的时间试图解决这个问题,但没有任何效果,所以我决定编写一个程序来锁定我的屏幕: LOCKTIME=60 lastIdleTime=0 extra=0 while [ 1 ]; do sound=$(pacmd list-sink-inputs | grep -c "state: RUNNING") idleTime=$(($(xprintidle) / 1000)) lock=$(gnome-screensaver

我的screenlocker程序出现了一些问题。我花了一天的时间试图解决这个问题,但没有任何效果,所以我决定编写一个程序来锁定我的屏幕:

LOCKTIME=60
lastIdleTime=0
extra=0
while [ 1 ]; do
    sound=$(pacmd list-sink-inputs | grep -c "state: RUNNING")
    idleTime=$(($(xprintidle) / 1000))
    lock=$(gnome-screensaver-command -q | grep -c " active")
    if [[ $lock != 0 ]]; then
        extra=$idleTime
    else
        if [[ $sound != 0 || $idleTime -lt $lastIdleTime ]]; then
            extra=$idleTime
        fi
        if [[ $(($idleTime - $extra)) -gt $LOCKTIME ]]; then
            gnome-screensaver-command -l
        fi
    fi
    lastIdleTime=$idleTime
    sleep 1
done
如果我手动执行,一切都会顺利。但我想在启动时运行它,所以我尝试使用crontab并在~/.config/autostart文件夹中创建一个桌面条目。但crontab似乎不执行程序,或者它执行了,但脚本无法锁定我的屏幕,它使用桌面条目运行,但
xprintidle
不更新,并且
gnome屏幕保护程序命令-q | grep-c“active”
始终返回0,因此在60秒后它保持每秒锁定我的屏幕

我也用python编写了它,但它也不起作用。唯一的区别是
gnome屏幕保护程序命令-q | grep-c“active”
始终返回1

是否有更好的方法来执行和保持它在每次启动时运行(和工作)


顺便说一句,我将Antergos与GNOME和GDM一起使用。

如果您在启动时使用cron来运行它,请尝试以您的用户身份而不是root用户身份启动它。此外,cron没有使用相同的环境(X11显示、D-Bus会话等)通过su调用您的脚本,并将其设置为登录shell。下面是cronjob条目的一个示例:
@reboot su-[YOURUSER]-c“[pathtoyorscript]&
@LukasIsselbächer我已经以我的用户身份运行了,我在命令行尝试了您的条目,但是pacmd抱怨没有运行pulse audio守护进程(我认为这是因为标志--login),cron也没有执行它。我知道了,你认为我可以用桌面输入吗?