首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为ScreenSaver的Bash脚本

作为ScreenSaver的Bash脚本
EN

Stack Overflow用户
提问于 2014-08-19 05:40:45
回答 1查看 2.3K关注 0票数 0

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

我一直在拔掉我的头发,因为我不知道为什么会发生这种情况。我在另一台机器上尝试了相同的脚本,它完美地工作了好几个月……

它工作的机器是Linux Mint 13机器,而不能工作的机器是Linux Mint 17机器。

脚本如下:

代码语言:javascript
复制
#!/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脚本如下所示:

代码语言:javascript
复制
#!/bin/bash

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

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2014-08-19 06:36:53

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

如果您有两个mplayer进程,脚本将开始轰炸系统,尽可能快地启动无限数量的mplayer。

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

代码语言:javascript
复制
if [ "$(pidof mplayer)" ]
then
  echo "There is one or more mplayer processes"
else
  echo "There are no mplayer processes."
fi

它可以更直接地写成

代码语言:javascript
复制
if pidof mplayer > /dev/null
then 
  ...

PS:您也可以用while sleep 1替换while true,这将在不损失功能的情况下将脚本的CPU使用率从100%降低到<1%。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25372466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档