在启动时启动自定义屏幕保护程序的行为与手动启动屏幕保护程序不同

时间:2016-04-02 22:50:33

标签: linux screensaver init.d

我有一个触摸屏自助服务终端,我正在运行一个网络服务器。如果屏幕在一段时间内没有被触摸,我想要显示幻灯片。为此目的,我有下面的脚本。

#!/bin/sh

# Wanted trigger timeout in milliseconds.
IDLE_TIME=$((15*1000))

# Sequence to execute when timeout triggers.
trigger_cmd() {
DISPLAY=:0 feh -ZXYrzFD 10 /home/pi/screensaver/img --zoom fill &
    echo '"pkill -n feh; pkill -n xbindkeys"'>/home/pi/screensaver/xbindkeys.temp
    echo "b:1">>/home/pi/screensaver/xbindkeys.temp
    DISPLAY=:0 xbindkeys -n -f /home/pi/screensaver/xbindkeys.temp
    sudo rm /home/pi/screensaver/xbindkeys.temp
}

sleep_time=$IDLE_TIME
triggered=false

# ceil() instead of floor()
while sleep $(((sleep_time+999)/1000)); do
    idle=$(DISPLAY=:0 xprintidle)
    if [ $idle -gt $IDLE_TIME ]; then
        if ! $triggered; then
            trigger_cmd
            triggered=true
            sleep_time=$IDLE_TIME
        fi
    else
        triggered=false
        # Give 100 ms buffer to avoid frantic loops shortly before triggers.
        sleep_time=$((IDLE_TIME-idle+100))
    fi
done

我使用xprintidle来检查屏幕闲置的时间。 xbindkeys部分用于在触摸屏幕时查杀feh。当我手动启动脚本时,我可以通过触摸屏幕关闭幻灯片,并在给定的空闲时间后重新打开。当我通过init.d中的脚本启动脚本时,我必须先触摸屏幕两次才会再次打开幻灯片,如果您只触摸一次屏幕,则永远不会重新打开幻灯片。
init.d中的脚本只是以用户pi。

启动上面的脚本

有人可以帮我弄清楚为什么在启动时启动脚本显然导致脚本需要两次点击而不是一次启动空闲计时器?

1 个答案:

答案 0 :(得分:1)

在设置init.d环境变量之前,触摸屏脚本最有可能由DISPLAY运行(即用户pi未登录)。

尝试从.bash_profile运行此操作。这样,所有用户环境变量都将被设置为$DISPLAY,并且脚本将在登录时运行一次。