Bash脚本作为ScreenSaver

时间:2014-08-18 21:40:45

标签: linux bash screensaver linuxmint mplayer

我正在尝试创建一个脚本以将电影用作ScreenSaver,但是一旦打开电影,系统就会冻结并重新启动。

我一直在拔头发,因为我无法弄清楚为什么会这样。我在另一台机器上尝试了相同的脚本,它可以在很多个月内完美运行......

它所使用的机器是Linux Mint 13机器,而它没有使用的机器是Linux Mint 17机器。

脚本如下:

#!/bin/bash
screen_on=false;
state=0;
time_idle=1200;

while true;do

IDLE=$(./idletime)


if [ $IDLE -gt $time_idle ];then

    if [ $(pidof mplayer) ];then

        echo "Screen is on " >> mylog.log

    else
        ./test.sh &

    fi

else
    if [ $(pidof mplayer) ];then

        pkill mplayer

    else
        echo "Screen is off." >> mylog.log

    fi

fi

done

idletime程序实际上与xprintidle相同......它使用X Server来获取系统的空闲时间。 test.sh脚本如下:

#!/bin/bash

mplayer -nostop-xscreensaver movie.mp4 -fs -loop 0

谢谢!

1 个答案:

答案 0 :(得分:2)

可能发生的是拒绝服务攻击。

如果你有两个mplayer进程,你的脚本就会开始轰炸系统,尽快启动无限数量的mplayers。

使用shellcheck。它会警告你if [ $(pidof mplayer) ]中缺少引号。正确的代码是:

if [ "$(pidof mplayer)" ]
then
  echo "There is one or more mplayer processes"
else
  echo "There are no mplayer processes."
fi

可以更直接地写为

if pidof mplayer > /dev/null
then 
  ...

PS:您还可以将while true替换为while sleep 1,这会将脚本的CPU使用率从100%降低到<1%而不会丢失功能。